Как Его Вычислить — Убей в себе ламера — APC АДАКТ

Ntvdm.Exe — Как Его Вычислить

#1 tolik16

На других форумах Витарх

  • Заблокированные
  • 1262 сообщений
    • Город: Калининградская обл.
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #2 СаняЖД

    Chip-Tuning-Ekaterinburg.ru, 89221499885, c 14 до 01 часа.

  • APC-Пользователи
  • 13137 сообщений
    • Город: Свердловск
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #3 yaudi

  • APC Pro
  • 1244 сообщений
    • Город: КОМИ сыктывкар
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #4 Дмитрий 42

  • Пользователи
  • 526 сообщений
    • Город: Россия, Кемерово
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #5 Vasiliy Armeev

  • Заблокированные
  • 0 сообщений
    • Город: Вологда
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #6 Lis2007

  • НП АДАКТ
  • 3462 сообщений
    • Город: пгт. Апастово
    • Пол: Мужчина

    Сообщение отредактировал Lis2007: 07 February 2010 — 14:39

    • Наверх
    • Ник или цитата

    #7 gas-val

  • Пользователи
  • 39 сообщений
    • Город: Туапсе
    • Пол: Мужчина

    В реестри автозагрузка по адресу: [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] посмотри там он есть? Другой вариант, найти где он находится через поиск и удалить или переименовать.

    Это файл системы но не знаю для чего он. В диспечери задач его нет, находится C:WINDOWSsystem32 возможно он у тебя заражон. Если его удалить он появится снова.

    Сообщение отредактировал gas-val: 07 February 2010 — 17:09

    • Наверх
    • Ник или цитата

    #8 tolik16

    На других форумах Витарх

  • Заблокированные
  • 1262 сообщений
    • Город: Калининградская обл.
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #9 Lis2007

  • НП АДАКТ
  • 3462 сообщений
    • Город: пгт. Апастово
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #10 gas-val

  • Пользователи
  • 39 сообщений
    • Город: Туапсе
    • Пол: Мужчина

    Да в систем32 он сидит, убирать его пока не стал, мало ли для чего он нужен, а вот по поводу автозагрузки может может кто расписать пошагово (что нажать, куда посмотреть, что стереть)как туда забраться.
    Просто в нете везде только общие фразы а как забратся в тот же реестр. фиг его знает, да и не нужно было до сих пор это.

    пуск — выполнить- regedit

    вход в редактор реестра а дальше написал выше. удали строчку если он там

    • Наверх
    • Ник или цитата

    #11 int2146655

  • APC-Пользователи
  • 1073 сообщений
    • Город: Москва
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #12 tolik16

    На других форумах Витарх

  • Заблокированные
  • 1262 сообщений
    • Город: Калининградская обл.
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #13 gas-val

  • Пользователи
  • 39 сообщений
    • Город: Туапсе
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #14 Lis2007

  • НП АДАКТ
  • 3462 сообщений
    • Город: пгт. Апастово
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #15 tolik16

    На других форумах Витарх

  • Заблокированные
  • 1262 сообщений
    • Город: Калининградская обл.
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #16 gas-val

  • Пользователи
  • 39 сообщений
    • Город: Туапсе
    • Пол: Мужчина

    Да тяжко искать в слепую.

    Попробуй исключить автозагрузку лишних программ и попробуй завершать процесы другие возможно подклейка, бывает к эксплоиру. У меня аваст у него функция сканировать во время загрузки винды, убивает, что найдет.

    • Наверх
    • Ник или цитата

    #17 Vasiliy Armeev

  • Заблокированные
  • 0 сообщений
    • Город: Вологда
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #18 tolik16

    На других форумах Витарх

  • Заблокированные
  • 1262 сообщений
    • Город: Калининградская обл.
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #19 SemeNka

  • Новые пользователи
  • 1 сообщений
    • Город: Новокузнецк
    • Пол: Мужчина
    • Наверх
    • Ник или цитата

    #20 Кужимоши

  • Доверенные пользователи
  • 839 сообщений
    • Город: Брянск
    • Пол: Мужчина

    Сообщение отредактировал Кужимоши: 11 February 2011 — 20:08

    • Наверх
    • Ник или цитата

    #21 Valera_kursk

  • Пользователи
  • 23 сообщений
    • Город: Курск
    • Пол: Мужчина

    Давно за программирование не брался, ntvdm.exe запускает DOS приложения

    бывают проблемы при установке ПО с ключами защиты HASP

    а также лечится установкой программы Tame.exe

    Сообщение отредактировал Valera_kursk: 15 February 2011 — 21:51

    • Наверх
    • Ник или цитата

    1. APC АДАКТ
    2. → Обо всем
    3. → Убей в себе ламера
    4. Правила форума

    АРС АДАКТ разрабатывает прошивки для чип-тюнинга бензиновых и дизельных двигателей. В официальном магазине доступны готовые калибровки для любых задач: более 60 марок и 300 моделей, для ГБО, с переходом на другие нормы Евро и сохранением заводских. Если нет готовой прошивки, можно заказать индивидуальную калибровку под любые задачи.

    Прошивки АДАКТ можно купить только в магазине на официальном сайте. Их распространение защищено с помощью ключа SenseLock и системы оценки действий пользователей. Любые другие сайты, предлагающие прошивки АДАКТ, выдают собственные непроверенные работы за калибровки нашей компании.

    Получаем системные привилегии с помощью ошибок в NTVDM

    Обратная совместимость — вещь хорошая, но использовать ее надо в разумных пределах. Ведь до сих пор в ядре Windows можно найти код, разработанный еще в прошлом веке. Говорить о его высокой безопасности было бы глупо. И мы докажем это на примере трех privilage escalation уязвимостей, прижившихся в подсистеме виртуальной машины DOS

    В 1978 году компания Intel выпустила первый процессор семейства х86, модели 8086, который предоставлял довольно ограниченную среду для исполнения 16-битного кода, известную под названием «режим реального времени» (Real mode). Вскоре после этого началась активная разработка программных решений для новой аппаратной платформы, причем как операционных систем, так и работающих в них обычных программ. Система Disk Operating System (DOS) от Microsoft быстро утвердилась в качестве ведущей рабочей среды для десктопных ПК, а приложения под эту ОС создавались и выходили на рынок в течение более десяти лет. В качестве самых известных примеров можно привести Norton Commander, ChiWriter или Quattro Pro. При разработке в 1992 году архитектуры NT для операционной системы Windows, которая использовала преимущества уже более мощного и безопасного защищенного режима (Protected Mode), одним из ключевых решений стало сохранение обратной совместимости с DOS, то есть обеспечение возможности безопасного запуска старых программ в новом графическом окружении.

    WARNING

    Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

    NTVDM

    Созданный в Windows специальный режим совместимости получился очень функциональным. Из-за того, что он был довольно сложным компонентом как с технической стороны, так и со стороны логики работы, его появление открыло локальным пользователям много новых возможностей проведения атак, направленных на повышение своих прав в операционной системе. В NTVDM уже не раз находили и исправляли проблемы безопасности, но до сих пор в ядре остается много интересных и неисследованных возможностей. В следующем разделе мы детально рассмотрим одну из них — специфичную обработку исключений, возникающих в хост-процессе NTVDM.EXE. Тут, правда, стоит отметить, что любой потенциальный баг, который может обнаружиться в подсистеме совместимости DOS, затронет только 32-битные платформы Windows, так как 64-битные версии системы не поддерживают VDM из-за особенностей реализации режима Long Mode, в котором исполняется 64-битный код на процессорах Intel. В новых операционных системах Windows 8 и 8.1 воздействие потенциальных уязвимостей ядра нивелируется за счет того, что там эта подсистема отключена по умолчанию, а для ее запуска необходимы административные права. Тем не менее эти уязвимости можно успешно задействовать без участия пользователя на системах от Windows XP до Windows 7 32-бит (а на данный момент такие системы предположительно составляют около 50% парка всех десктопных ОС).

    Режим реального времени

    Поддерживать обратную совместимость с 16-битными приложениями для современного 32-битного окружения очень сложно с технической точки зрения из-за фундаментальных различий в функционировании между реальным и защищенным режимом. Сюда входят и режимы работы процессора, и ширина слов и адресов, и кодирование инструкций, и много других моментов. Иначе говоря, стандартными средствами современных операционных систем запустить устаревшие программы из 80-х не получится. С другой стороны, переключение процессора в реальный режим каждый раз при запуске 16-битной программы тоже не выход, поскольку это лишает смысла базовые установки защищенного режима, такие как разделение прав. Передача управления потенциально недоверенному коду, который работает в практически неограниченной среде исполнения и имеет прямой доступ ко всей периферии компьютера, не только создает потенциальную угрозу безопасности системы, но и лишает операционную систему контроля над компьютером, так как решение о возврате в предыдущий рабочий контекст будет приниматься именно этим старым приложением.

    Режим Virtual 8086

    Инженеры Intel, которые прекрасно понимали эти и многие другие связанные с обратной совместимостью проблемы, разработали еще один совершенно новый режим исполнения, назвав его Virtual 8086 (V8086), который стал важной составляющей защищенного режима. Основная особенность режима V8086 состоит в том, что для работающего в нем кода он совершенно неотличим от реального режима, но при этом полностью управляется основной операционной системой. Это позволяет запускать старые приложения в 32-битном окружении с сохранением безопасности и без негативных побочных эффектов. Эту технологию можно рассматривать в качестве механизма виртуализации для ПО DOS, в котором операционная система выполняет роль монитора виртуальной машины (Virtual Machine Monitor — VMM). VMM отвечает за создание рабочей среды и обработку критичных и привилегированных инструкций, которые использует гостевое приложение, при этом 16-битный код выполняется в специальном режиме и с нативной скоростью. Типичный, разработанный Intel порядок исполнения для операционной системы, использующей V8086, показан на рис. 1.


    Рис. 1. Передача управления операционной системой при выполнении устаревших 16-битных приложений

    В случае Microsoft Windows сущность «операционная система» далее распадается на два компонента: ядро и процесс NTVDM.EXE, работающий на уровне пользователя. Поддержка описанной подсистемы имеется на обоих уровнях — некоторые события, происходящие внутри устаревшего ПО, обрабатываются напрямую ядром, в то время как другим требуется некоторая помощь на уровне ring 3 (см. рис. 2). Благодаря тому что исполнение кода старого ПО изолировано в специальный процесс, ядро может легко определить, нуждается ли конкретное событие процессора в отдельной обработке, в зависимости от того, исходит оно от VDM-хоста или нет. В результате большинство процедур уровня ring 0 предоставляют дополнительные функциональные возможности при вызове их из особых процессов; в качестве одного из ярких примеров можно отметить обработчики системных прерываний (trap handlers) для x86 (такие как nt!KiTrap0c, nt!KiTrap0d, nt!KiTrap0e), системные вызовы NT (например, nt!NtVdmControl) и системные вызовы win32k.sys (например,nt!NtUserInitTask). Важно отметить, что, хотя процесс NTVDM.EXE и обрабатывается системой особым образом, он все равно наследует токен безопасности локального пользователя; это, в свою очередь, позволяет атакующему исполнять произвольный код в рамках процесса, используя всего лишь две документированные функции API — OpenProcess и CreateRemoteThread — для того, чтобы воспользоваться гипотетической уязвимостью в тех частях ядра, которые отвечают за поддержку VDM.

    Рис. 2. Пример управления выполнением время исполнения устаревших 16-битных приложений в Microsoft Windows

    Наконец, нельзя забывать, что NTVDM поддерживает основную часть спецификаций интерфейса защищенного режима DOS (DOS Protected Mode Interface — DPMI), то есть в дополнение к реализации режима Virtual 8086, он также может предоставлять среду исполнения (например, создавать сегменты памяти) и выполнять код защищенного режима. Следовательно, вполне может появиться код с поддержкой обработки 32-битных инструкций в ядре в дополнение к простой 16-битной эмуляции.

    CVE-2013-3196 (write-what-where в nt!PushInt)

    General Protection Fault

    Одной из самых важных особенностей режима Virtual 8086, а также рабочей среды, созданной NTVDM.EXE для исполнения устаревшего 32-битного кода с поддержкой DPMI, состоит в том, что любая попытка выполнить критичную или требующую повышенных прав инструкцию (такую как INT, OUT или STI) сразу же приведет к исключению General Protection Fault в ядре. Как уже отмечалось выше, после этого операционная система должна безопасно эмулировать работу инструкции и вернуться к исполнению прерванного гостевого кода, обеспечивая продолжение исполнения. Как выяснилось, код эмулирования инструкций для 16- и 32-битных режимов эмуляции находится полностью в пространстве ядра, что открывает перед нами интересные возможности для атаки: программным путем воспроизвести поведение особых инструкций х86. Для того чтобы попасть в эмулятор, нужно выполнение следующих условий:

    1. Исключение #GP происходит внутри режима Virtual 8086 (флаг EFlags.VM установлен) ИЛИ Исключение #GP происходит в режиме пользователя (ring 3) и
    2. Селектор cs: segment не равен KGDT_R3_CODE (0x1b) в момент исключения и
    3. Исключение #GP происходит в хост-процессе VDM.

    Рис. 3. Таблица диспетчеризации инструкций режима Virtual 8086, используемая обработчиком #GP

    Если любой из вариантов полностью выполнен, то обработчик #GP передает управление внутренней процедуре nt!VdmDispatchOpcode_try , которая производит базовое декодирование вызвавшей сбой инструкции и вызывает одну или несколько функций-обработчиков, применимых к этой инструкции. Списки обработчиков для режимов эмуляции 16 и 32 бит показаны на рис. 3 и 4; как можно увидеть, ядро выдает очень длинный список инструкций и их префиксов. По нашему мнению, до этого года эта часть кода, скорее всего, никогда ранее не подвергалась проверке на наличие уязвимостей, что делало ее серьезной мишенью для исследования. После этого «открытия» мы решили провести реверс-инжиниринг всех обработчиков в поисках потенциальных недоработок и получили первые результаты уже в течение следующих нескольких часов. Первая уязвимость находилась в слое эмуляции инструкции INT для защищенного режима.

    Рис. 4. Таблица диспетчеризации инструкций защищенного режима, используемая обработчиком #GP

    Где собака зарыта

    Базовая роль функции обработчика nt!OpcodeINTnn состоит в том, что она извлекает операнд imm8 инструкции, вызвавшей сбой, а дальше вызывает другую внутреннюю процедуру nt!PushInt. Ее основная задача заключается в том, чтобы получить базовый адрес пользовательского ss: сегмента и положить адрес обработчика системных прерываний в стек (в адресном пространстве пользователя), используя полный адрес указателя стека ss:esp. Полученный путем обратного инжиниринга С-код, ответственный за помещение в стек трех 16- или 32-битных слов (в зависимости от гостевого режима исполнения), приведен ниже.

    Проблема в реализации состояла в том, что указатель на стек пользовательского пространства (ring 3) никак не проверяется на корректность, вероятно из-за предположения, что он всегда будет указывать на адресное пространство процесса NTVDM.EXE. А это, разумеется, не всегда так, поскольку эксплойт может устанавливать регистр esp на любой произвольный указатель, например на адрес, относящийся к ядру. Таким образом, для задействования уязвимости было достаточно выполнить всего лишь две простые инструкции в контексте виртуальной машины DOS: mov esp, 0xdeadbeef и затем int 0 . Единственные ограничения состояли в том, что и cs: , и ss: должны выбирать сегменты кода и данных в рамках локальной таблицы дескрипторов (LDT — Local Descriptor Table), а аргумент инструкции int должен быть прерыванием уровня ядра (любое значение в диапазоне между 0–255, за исключением последовательности 0x2a–0x2e). Результат запуска двух описанных инструкций на непропатченной Windows 7 SP1 приведен ниже:

    Благодаря тому факту, что одна из 32-битных переменных хранится ядром в произвольно выбранном исключении eip, ситуация превращается в простое write-what-where условие с незначительными ограничениями, которыми можно пренебречь (например, что непосредственное значение не может иметь установленным старший бит). Имея в своем распоряжении такую удобную базовую возможность, становится возможным «угнать» управление выполнением (control flow) ядра, переписав один из указателей функций, например широко известный указатель nt!HalDispatchTable+4, вызываемый из пространства пользователя через системный вызов nt!NtQueryIntervalProfile.

    Рис. 5. Успешная реализация write-what-where в nt!PushInt

    Устранение данной уязвимости реализовано довольно просто и состоит из трех дополнительных инструкций, добавленных в nt!PushInt. Они проверяют, чтобы адрес ss:esp , который должен быть из пространства пользователя, действительно указывал на нижние части адресного пространства (см. рис. 6).


    Рис 6. Бинарные различия между первоначальной реализацией nt!PushInt и после патча

    CVE-2013-3197 (write-what-where в nt!PushException)

    Если внимательно посмотреть на обработчики системных прерываний Windows (помимо nt!KiTrap0d ), то становится очевидным, что специфическую функциональность для VDM обеспечивает не только обработчик #GP, а большинство из них. В этом плане особенность General Protection Fault состоит в том, что она имеет выделенные подпрограммы для обработки конкретных типов исключений (таких как критичные или привилегированные инструкции); другие обработчики не используют такую сложную функциональность, а вместо этого просто вызывают функцию nt!Ki386VdmReflectException в случае, если встречаются с исключением VDM. Этим они пытаются эмулировать событие в виртуальной среде, примерно по той же схеме, что и эмуляция инструкций в nt!VdmDispatchOpcode_try . Граф передачи управления иллюстрирует, что большинство обработчиков зависят от этой функции (cм. рис. 7).


    Рис. 7. Граф функции nt!Ki386VdmReflectException

    Причина головной боли

    При типичных обстоятельствах (то есть для любого обычного процесса) исполнение, как правило, завершается в одном из вариантов nt!CommonDispatchException, который отправляет событие к обработчику исключений пространства пользователя. В случае VDM ядро сначала пытается с помощью nt!PushException создать фрейм-ловушку в стеке пространства пользователя и перенаправить управление по адресу cs:eip, который берется из полей VfCsSelector и VfEip структуры NtCurrentTeb()->Vdm->VdmIntDescriptor[trap_no] (см. рис. 8); и только если эта процедура не срабатывает, исключение обрабатывается обычным способом. И, подобно предыдущему случаю, при создании эмулированного фрейма-ловушки ядро не проверяет, что указатель стека находится действительно в рамках адресного пространства пользователя. Это опять приводит к возможности использовать write-what-where условие, только размером 16 или 32 байта вместо 6 или 12. Задействовать уязвимость так же просто, для этого достаточно установить esp на произвольный адрес в пространстве ядра и вызвать исключение (например, #DE через инструкцию div edx) с нормальными реквизитами полностью инициализированной среды VDM и пользовательскими сегментами cs: и ss: в момент возникновения ошибки.

    Рис. 8. Внутренние структуры пространства пользователя, которые задействуются для возобновления исполнения NTVDM, прерванного исключением

    И в этот раз благодаря тому, что одно из записанных в контролируемый адрес значений — это eip ошибки, та же методика использования указателя функции (function pointer exploitation technique) может использоваться для получения полного контроля над компьютером. Правда, из-за ограничений на значение LDT воспользоваться этой уязвимостью можно только на системах начиная с Windows Vista. В обновлении безопасности Microsoft просто вставили два простых блока, которые отвечают за проверку указателя в стеке пространства пользователя для ветвей создания фрейма ловушки и для 16, и для 32 бит.

    CVE-2013-3198 (write-what-where в nt!VdmCallStringIoHandlerPushException)

    В дополнение к обработке привилегированных инструкций VDM ядро также эмулирует выполнение критичных инструкций, то есть таких инструкций, которые могут выполняться, только если CPL cs: и es: (причем базовый адрес последнего сегмента указывает на память ядра для перезаписи), инициализировать регистр di значением 0x0 и dx значением 0x3b0, а потом вызвать инструкцию insb; разумеется, все операции необходимо проводить внутри процесса NTVDM.EXE. Если мы установим базу сегмента es: в 0xaaaaaaaa и запустим эксплойт на непропатченной системе, то должно произойти следующее:

    По умолчанию порт 0x3b0 записывает в память единственный байт — 0x00 , так что данная уязвимость может быть использована для обнуления любого указателя на функцию пространства ядра; сделав это, мы можем перенаправить выполнение кода ring 0 на страницу NULL, которая уже расположена в адресном пространстве NTVDM. Таким образом, мы и в этом случае можем повысить токен безопасности локального процесса или скомпрометировать безопасность системы любым другим удобным нам путем.
    Для устранения этой проблемы Microsoft ввела inline-вызов ProbeForRead перед считыванием данных из пространства пользователя по адресу ds:si, а также общий вызов ProbeForWrite перед записью данных обратно по адресу es:di.

    Мысли вслух

    Все три уязвимости для повышения привилегий, о которых шла речь в этой статье, были возможны благодаря условию write-what-where, которое возникает в силу того, что предоставляемые пользователем данные не проходят никакой валидации. В других ситуациях уязвимости этого типа для базового образа ядра NT (ntoskrnl.exe) встречаются крайне редко. И хотя Microsoft за последние годы смогла внутренними силами отследить и устранить большинство таких проблем, они каким-то образом упустили код эмуляции ввода/вывода, исключений и инструкций в VDM; скорее всего, из-за того, что инструменты статического анализа, очень эффективные для высокоуровневого кода С и С++, в настоящее время не поддерживают ассемблер или плохо взаимодействуют с ним. Стоит отметить, что возможность использовать эти уязвимости появилась только после небольшого несвязанного изменения в коде входного контроля LDT, которое впервые появилось в Windows Vista. Из-за этого изменения внутренняя функция nt!PspIsDescriptorValid оказалась лишена проверок, связанных с базой и ограничениями ввода. Впрочем, это не более чем удачное совпадение. Реальной причиной, которая лежит в основе этой уязвимости, стали не различия в контроле сегментов, а тот факт, что код эмуляции использовал полные адреса ss:esp, ds:si и es:di в операциях памяти, хотя и одна из ключевых особенностей безопасности для ядра Windows гласит: привилегированный код никогда не должен доверять любым сегментам памяти со стороны пользователя.

    Резюмируя

    На примере этих трех открытий мы еще раз ясно видим, что многие уязвимости ядра обусловлены существованием кода, написанного чуть ли не в начале 90-х годов. Тогда безопасность не рассматривалась в качестве важного приоритета (в отличие от нашего времени), что приводило к созданию плохого кода, и никто его не пересматривал с точки зрения обеспечения безопасности с тех пор, как он был написан двадцать лет назад. При этом большие участки кода используются и в самых последних версиях Windows, включая новейшие Windows 8.1 и Server 2012. Современный исходный код ядра, который пишется в 2013 году, должен соответствовать руководствам по безопасной разработке и тщательно тестироваться перед выпуском. Поэтому мы считаем, что вместо того, чтобы копаться в новых функциональных элементах, которые были внедрены в последних версиях системы, гораздо эффективнее искать ошибки в тех ключевых компонентах, которые были созданы давным-давно.
    Ну и последнее, что стоит отметить, — отключение по умолчанию обратной совместимости с приложениями DOS в Windows 8 было отличным решением Microsoft. Благодаря ему большинство еще не обнаруженных ошибок либо невозможно использовать, либо нет смысла искать, потому что атакующий не получит от их использования достаточных дивидендов. К тому же это решение позволило полностью отключить любые страницы NULL (раньше их наличия требовал хост-процесс VDM), а благодаря этому полностью исчезают либо значительно сокращаются ошибки типа NULL pointer dereference, которые часто встречаются и в ядре, и в драйверах устройств. По общему влиянию на будущие защитные свойства это одно из самых серьезных улучшений со стороны Microsoft за все время. Ну а сейчас вперед — найди свой собственный баг в ядре!

    Автор: Mateusz «j00ru» Jurczyk.

    Впервые опубликовано в журнале «Хакер» от 01/2014.

    http://forum.adact.ru/index.php?showtopic=9828
    http://habr.com/ru/company/xakep/blog/232207/

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *