Читаем Кибероружие и кибербезопасность. О сложных вещах простыми словами полностью

Как правило, программы клавиатурных шпионов не просто записывают коды вводимых клавиш — он «привязывает» клавиатурный ввод к текущему окну и элементу ввода. Кроме того, многие клавиатурные шпионы отслеживают список запущенных приложений, умеют делать «снимки» экрана по заданному расписанию или событию, шпионить за содержимым буфера обмена и решать ряд задач, нацеленных на скрытное слежение за пользователем. Записываемая информация сохраняется на диске и большинство современных клавиатурных шпионов могут формировать различные отчеты, могут передавать их по электронной почте или http/ftp протоколу. Кроме того, ряд современных клавиатурных шпионов пользуются RootKit технологиями для маскировки следов своего присутствия в системе.

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

На рис. 8.12. показана упрощенная модель аппаратного ввода системы Windows.

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


Рис. 8.12. Упрощенная модель аппаратного ввода системы Windows

RIT (Raw Input Thread), который извлекает события из системной очереди и преобразует их в сообщения. Полученные сообщения помещаются в конец очереди виртуального ввода одного из потоков (виртуальная очередь потока называется VIQ — Virtualized Input Queue). При этом RIT сам выясняет, в очередь какого конкретно потока необходимо поместить событие. Для событий мыши поток определяется поиском окна, над которым расположен курсор мыши. Клавиатурные события отправляются только одному потоку — так называемому активному потоку (т. е. потоку, которому принадлежит окно, с которым работает пользователь). На самом деле это не совсем так — в частности, на рисунке показан поток А, не имеющий очереди виртуального ввода. В данном случае получатся, что потоки А и В совместно используют одну очередь виртуального ввода. Это достигается при помощи вызова API функции AttachThreadlnput, которая позволяет одному потоку подключиться к очереди виртуального ввода другого потока.

Следует отметить, что поток необработанного ввода отвечает за обработку специальных сочетаний клавиш, в частности Alt+Tab и Ctrl+Alt+Del.

8.5.2. Методы слежения за клавиатурным вводом

8.5.2.1. Слежение за клавиатурным вводом при помощи ловушек

Данная методика является классической для клавиатурных шпионов. Суть метода состоит в применении механизма ловушек (hook) операционной системы. Ловушки позволяют наблюдать за сообщениями, которые обрабатываются окнами других программ. Установка и удаление ловушек производится при помощи хорошо документированных функций API библиотеки user32. dll (функция SetWindowsHookEx позволяет установить ловушку, UnhookWindowsHookEx — снять ее). При установке ловушки указывается тип сообщений, для которых должен вызываться обработчик ловушки. В частности, есть два специальных типа ловушки WH KEYBOARD и WH MOUSE — для регистрации событий клавиатуры и мыши соответственно. Ловушка может быть установлена для заданного потока и для всех потоков системы. Ловушка для всех потоков системы очень удобна для построения клавиатурного шпиона.

Код обработчика событий ловушки должен быть расположен в DLL. Это требование связано с тем, что DLL с обработчиком ловушки проецируется системой в адресное пространство всех GUI процессов. Интересной особенностью является то, что проецирование DLL происходит не в момент установки ловушки, а при получении GUI процессом первого сообщения, удовлетворяющего параметрам ловушки.

На прилагаемом компакт-диске имеется демонстрационный «клавиатурный шпион», построенный на основе ловушки. Он регистрирует клавиатурный ввод во всех GUI приложениях и дублирует вводимый текст на своем окне. Данный пример можно использовать для тестирования программ, противодействующих клавиатурных шпионам.

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

8.5.2.2. Слежение за клавиатурным вводам при помощи опроса клавиатуры

Перейти на страницу:

Похожие книги