Клавиатурные шпионы (кейлоггеры) - Кейлоггеры режима ядра
ОГЛАВЛЕНИЕ
Кейлоггеры режима ядра
Кейлоггеры режима ядра значительно более сложные, чем кейлоггеры пользовательского режима — как для реализации, так и в плане обнаружения. Они требуют специальных знаний для написания, но позволяют создавать кейлоггеры, абсолютно незаметные для всех приложений пользовательского режима. Для перехвата могут использоваться как документированные в Microsoft Driver Development Kit, так и недокументированные методы.
Использование драйвер-фильтра драйвера класса клавиатуры Kbdclass
Документированный в DDK способ перехвата (см. раздел «Стек драйверов для Plug and Play PS/2-клавиатуры»). Кейлоггеры, построенные на основе этого метода, перехватывают запросы к клавиатуре посредством установки фильтра поверх устройства «\Device\KeyboardClass0», созданного драйвером Kbdclass (см. раздел «Стек устройств для Plug and Play PS/2-клавиатуры»). Фильтруются только запросы типа IRP_MJ_READ, поскольку именно они позволяют получить коды нажатых и отпущенных клавиш.
Достоинства — гарантированный перехват всех нажатий, невозможность обнаружения без использования драйвера, благодаря чему не все антикейлоггеры их определяют. Недостатки — необходимость установки собственного драйвера.
Самыми известными кейлоггерами, использующими данный метод реализации, являются ELITE Keylogger и Invisible KeyLogger Stealth.
Kaspersky Internet Security проактивно детектирует такие кейлоггеры как Keylogger путем мониторинга клавиатурного стека устройств (должна быть включена опция «Обнаружение клавиатурных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).
Использование драйвер-фильтра функционального драйвера i8042prt
Документированный в DDK способ перехвата. Кейлоггеры, построенные на основе этого метода, перехватывают запросы к клавиатуре посредством установки фильтра поверх безымянного устройства, создаваемого драйвером i8042prt под устройством Device\KeyboardClass0 (см. раздел «Стек устройств для Plug and Play PS/2-клавиатуры»). Драйвер i8042prt предоставляет собой программный интерфейс для добавления дополнительной функции обработки прерывания IRQ1 (IsrRoutine), в которой можно произвести анализ полученных от клавиатуры данных.
Достоинства и недостатки аналогичны описанным для метода, в предыдущем пункте. Но есть и дополнительный недостаток — зависимость от типа клавиатуры: драйвер i8042prt обрабатывает запросы только от PS/2 клавиатуры, поэтому рассматриваемый метод не пригоден для перехвата данных, вводимых через USB или беспроводную клавиатуру.
Kaspersky Internet Security проактивно детектирует такие кейлоггеры как Keylogger путем мониторинга клавиатурного стека устройств (должна быть включена опция «Обнаружение клавиатурных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).
Модификация таблицы обработки системных запросов драйвера Kbdclass
Кейлоггеры, построенные на основе этого метода, перехватывают запросы к клавиатуре, подменяя точку входа IRP_MJ_READ в таблице обработки системных запросов (dispatch table) драйвера Kbdclass. Функционально похож на драйвер-фильтр драйвера Kbdclass (см. раздел «2.1. Драйвера-фильтры драйвера класса kbdclass»). Особенности те же. В другом варианте используется перехват иной функции обработчика запросов — IRP_MJ_DEVICECONTROL. В этом случае кейлоггер становится подобным драйверу-фильтру драйвера i8042 (см. раздел «2.2. Драйвера-фильтры функционального драйвера i8042prt»).
Kaspersky Internet Security проактивно детектирует такие кейлоггеры как Keylogger (должна быть включена опция «Обнаружение клавиатурных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).
Модификация таблицы системных сервисов KeServiceDescriptorTableShadow
Достаточно распространенный метод реализации кейлоггеров, функционально аналогичный методу реализации пользовательского режима, описанному в разделе «1.3. Внедрение в процесс и перехват функций GetMessage/PeekMessage». Кейлоггеры, построенные на основе этого метода, перехватывают запросы к клавиатуре посредством патчинга точки входа NtUserGetMessage/PeekMessage во второй таблице системных сервисов (KeServiceDescriptorTableShadow) драйвера win32k.sys. Информация о нажатии клавиши приходит в перехватчик, когда в каком-либо потоке завершается вызов функций GetMessage или PeekMessage.
Достоинством данного метода является сложность его обнаружения, недостатком — относительная сложность реализации (поиск самой таблицы KeServiceDescriptorTableShadow — непростая задача; помимо этого, другие драйвера могут ранее пропатчить точки входа в этой таблице) и необходимость установки отдельного драйвера.
Kaspersky Internet Security проактивно детектирует такие кейлоггеры как Keylogger (должна быть включена опция «Обнаружение клавиатурных перехватчиков» подсистемы «Анализ активности приложений» модуля проактивной защиты).
Модификация кода функций NtUserGetMessage или NtUserPeekMessage путем сплайсинга
Крайне редко встречаемый тип кейлоггера. Кейлоггеры, построенные на основе этого метода, перехватывают запросы к клавиатуре, модифицируя код функций NtUserGetMessage или NtUserPeekMessage методом сплайсинга. Данные функции реализованы в ядре системы в драйвере win32k.sys и вызываются из соответствующих функций библиотеки user32.dll. Как указано в разделе «1.3. Внедрение в процесс и перехват функций GetMessage/PeekMessage», эти функции позволяют фильтровать все получаемые приложениями сообщения и получать данные о нажатии и отпускании клавиш из клавиатурных сообщений.
Достоинством данного метода является сложность его обнаружения, недостатком — трудности реализации (необходимость переписывать тело функции «на лету», зависимость от версии операционной системы и установленного программного обеспечения), а также необходимость установки драйвера.
Подмена драйвера в клавиатурном стеке драйверов
Данный метод основан на подмене драйвера Kbdclass или одного из низкоуровневых драйверов клавиатуры драйвером собственной разработки. Явным недостатком данного метода является сложность реализации, так как заранее не известен тип применяемой пользователем клавиатуры, а потому подмену драйвера сравнительно просто обнаружить. Вследствие этого подобный метод практически не реализуется на практике.
Реализация собственного драйвера-обработчика прерывания IRQ 1
Метод заключается в написании своего драйвера режима ядра, перехватывающего прерывание от клавиатуры (IRQ 1) и напрямую обращающегося к ее портам ввода-вывода (60h, 64h). В связи со сложностью реализации и не совсем ясным способом взаимодействия с системным обработчиком прерывания IRQ 1 (драйвером i8042prt.sys) в настоящее время метод является сугубо теоретическим.