2014-12-30 4 views
0

в аналитической работе PANDEX, я прочитал следующее:IRP_MJ_DEVICE_CONTROL, чтобы скрыть процесс?

"The driver export its device object to user mode through symbolic link 
    path \\.\Runtime. 
    It implements functionality to hide a process through its IRP_MJ_DEVICE_CONTROL 
    dispatch routine when a user-mode program calls the DeviceIoControl API with 
    process id as the input parameter" 

(примечание: упомянутый водитель выполняет стелс руткит-активность)

С «стелс руткит деятельности» и мой knwoledge о драйверах не лучший, I начал читать документацию о концепции всего драйвера, используемой в окнах.

Итак, я собираю следующее (я пытаюсь объяснить все в своих словах, потом задам вопрос): Например, если приложение нуждается в данных с устройства, то оно связывается с os, os контакт с драйвером, драйвер знает, как связаться с устройством, и поэтому драйвер передает необходимые данные в os, который передает его затем в приложение. Итак, стек драйверов обрабатывает запросы IRP. Объект устройства представляет собой устройство. Один или несколько объектов устройства связаны с устройством. Они являются объектами всех операций на устройстве.

Итак, если они говорят, что он «экспортирует объект устройства в пользовательский режим», то я должен спросить: a) Как они это делают? b) экспорт объекта устройства в пользовательский режим также означает, что теперь у меня есть доступ к нему из приложения режима пользователя, верно? (который обычно невозможен)

О 2-й части, особенно о IRP_MJ_DEVICE_CONTROL, я знаю, что отправляется диспетчером ввода-вывода. Но что именно это делает? И как они используют его, чтобы скрыть процесс? Я также прочитал, что этот IRP_MJ_DEVICE_CONTROL отправляется от имени приложения пользовательского режима , который вызвал функцию DeviceIoControl. Об DeviceIoControl Я прочитал, что он позволяет приложению напрямую связываться с устройством. Таким образом, он передает управляющие коды, которые представляют собой операцию, выполняемую на устройстве. И они говорят, что он скрывает процесс с ним, поместив идентификатор процесса в DeviceIoControl.

Но опять же, как они скрывают этот процесс ...?

PS: Я бы сказал, что «функциональность» (не объяснено в анализе), которые они упоминали берет часть укрытия, но я не знаю, почему они поставили всю IRP_MJ_DEVICE_CONTROL и т.д.

Итак, Я бы рад, если бы кто-то сказать мне, как работает такой вся вещь, что концепция водителей имеет смысл в том случае, ...

наилучших пожеланий,

+0

Как драйвер скрывает процесс, в этой цитате не обсуждается. – eryksun

+0

Символическая ссылка предназначена для открытия ручки устройства. (Например, символическая ссылка для диска C: в пространстве имен объектов, '\ Global ?? \ C:', указывает на фактическое устройство, такое как '\ Device \ HarddiskVolume1'.) Win32' DeviceIoControl' используется для отправки идентификатор целевого процесса. Это вызывает системную функцию «NtDeviceIoControlFile», которая может использовать быстрый ввод-вывод, если драйвер реализует ее, а также очереди и отправляет пакет IRP_MJ_DEVICE_CONTROL в драйвер. – eryksun

ответ

0

для того, чтобы получить представление позади пользовательской земли и я предлагаю вам прочитать следующую статью https://msdn.microsoft.com/en-us/library/windows/hardware/ff554836(v=vs.85).aspx, и я бы предложил также прочитать эту статью https://msdn.microsoft.com/en-us/library/windows/hardware/hh439638(v=vs.85).aspx, чтобы получить представление об I/O в целом.

Теперь, чтобы ответить на ваш второй вопрос, скрыть процесс можно несколькими способами. Наиболее часто используемыми являются:

  • DKOM (Манипулирование с прямым ядром): Чтобы правильно понять, как это работает, вам нужно понять, как процесс перечисления в Windows работает в целом. Это зависит от структуры EPROCESS, которая не задокументирована в MSDN. Структура EPROCESS представляет собой непрозрачную структуру, которая служит в качестве объекта процесса для процесса. Каждый EPROCESS находится в памяти ядра для каждого процесса.Такая структура должна выглядеть так: enter image description here Таким образом, структурный элемент, представляющий интерес, здесь будет ActiveProcessLink, который имеет тип LIST_ENTRY. Отсюда мы видим, как они связаны друг с другом. Элемент Flink этой структуры указывает на следующую запись (процесс) в двусвязном списке. Элемент Blink указывает на предыдущую запись (процесс). Чтобы правильно продемонстрировать это, рассмотрим следующую диаграмму: enter image description here Теперь, чтобы вернуться к алгоритмам 101, все, что требуется для скрытия процесса в этой точке, состоит в том, чтобы отключить его от двусвязного списка. Все, что нам нужно сделать, это установить Flink процесса, предшествующего процессу, который мы хотим скрыть до Flink процесса, который мы скрываем. То же самое делается с Blink следующего процесса, который установлен в Blink скрытого процесса.

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

ПРИМЕЧАНИЕ: Я не могу утверждать, что цифры мои, я просто искал их в соответствии с обсуждаемой темой, чтобы служить визуальной помощью для тех, у кого недостаточно воображения.