Site icon Меандр — занимательная электроника

Что такое клавиатурные «шпионы»

Клавиатурные шпионы образуют категорию вредоносных про­грамм, представляющую большую угрозу для безопасности пользо­вателя. Они не являются вирусами, т. к. не обладают способностью к размножению.1

Определение.
Клавиатурные шпионы— это программа для скрытной записи информации о нажимаемых пользователем клавишах.

У термина «клавиатурный шпион» есть ряд синонимов: Keyboard Logger, KeyLogger; реже встречается термины «snoop», «snooper» (от англ. snoop — буквально «человек, вечно сующий нос в чужие дела»).

Как правило, современные клавиатурные шпионы не просто запи­сывает коды вводимых клавиш. Они «привязывают» клавиатурный ввод к текущему окну и элементу ввода.

Кроме того, многие клавиатурные шпионы:

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

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

Принцип действия

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

Полученные сообщения помещаются в конец очереди виртуаль­ного ввода одного из потоков (виртуальная очередь потока называ­ется VIQ — Virtualized Input Queue). При этом RIT сам выясняет, в очередь какого конкретно потока необходимо поместить событие. Для событий мыши поток определяется поиском окна, над которым рас­положен курсор мыши.

Клавиатурные события отправляются только одному потоку — так называемому активному потоку (т. е. потоку, которому принадлежит окно, с которым работает пользователь). На самом деле это не совсем так — в частности, на рисунке показан поток А, не имеющий очереди виртуального ввода.

В данном случае получатся, что потоки А и В совместно исполь­зуют одну очередь виртуального ввода. Это достигается при помощи вызова API функции AttachThreadlnput, которая позволяет одному потоку подключиться к очереди виртуального ввода другого потока.

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

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

Данная методика является классической для клавиатурных шпио­нов. Суть метода состоит в применении механизма ловушек (hook) операционной системы. Ловушки позволяют наблюдать за сообще­ниями, которые обрабатываются окнами других программ.

Установка и удаление ловушек производится при помощи хорошо документированных функций API библиотеки user32.dll (функция SetWindowsHookEx позволяет установить ловушку, UnhookWindowsHookEx — снять ее). При установке ловушки указы­вается тип сообщений, для которых должен вызываться обработчик ловушки.

В частности, есть два специальных типа ловушки WH_KEYBOARD и WHJVIOUSE — для регистрации событий клавиатуры и мыши соот­ветственно. Ловушка может быть установлена для заданного потока и для всех потоков системы. Ловушка для всех потоков системы очень удобна для построения клавиатурного шпиона.

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

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

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

Данная методика основана на периодическом опросе состояния клавиатуры. Для опроса состояния клавиш в системе предусмотрена специальная функция GetKeyboardState, возвращающая массив из 255 байт, в котором каждый байт содержит состояние определенной кла­виши на клавиатуре. Данный метод уже не требует внедрения DLL в GUI процессы и в результате шпион менее заметен.

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

Недостатком клавиатурных шпионов такого типа является необхо­димость периодического опроса состояния клавиатуры с достаточно высокой скоростью, не менее 10—20 опросов в секунду.

Клавиатурный шпион на базе драйвера

Данный метод более эффективен, чем описанные выше методы. Возможны как минимум два варианта реализации этого метода — написание и установка в систему своего драйвера клавиатуры вместо штатного или установка драйвера-фильтра.

Аппаратные клавиатурные шпионы

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

Аппаратные клавиатурные шпионы встречаются намного реже, чем программные. Однако при проверке особо ответственных компьюте­ров (например, применяемых для совершения банковских операций) о возможности аппаратного слежения за клавиатурным вводом не следует забывать.

Методики поиска клавиатурных шпионов

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

Эвристически алгоритмы. Как очевидно из названия, это методики поиска клавиатурного шпиона по его характерным особенностям. Эвристический поиск носит вероятностный характер. Как показала практика, этот метод наиболее эффективен для поиска клавиатурных шпионов самого распространенного типа — основанных на ловушках.

Однако подобные методики дают много ложных срабатываний. Мои исследования показали, что существуют сотни безопасных про­грамм, не являющихся клавиатурными шпионами, но устанавли­вающих ловушки для слежения за клавиатурным вводом и мышью. Наиболее распространенный примеры — программы Punto Switcher, словарь Lingvo, программное обеспечение от мультимедийных кла­виатур и мышей.

Мониторинг API функций, используемых клавиатурными шпионами. Данная методика основана на перехвате ряда функ­ций, применяемых клавиатурным шпионом — в частности, функ­ций SetWindowsHookEx, UnhookWindowsHookEx, GetAsyncKeyState, GetKeyboardState. Вызов данных функций каким-либо приложением позволяет вовремя поднять тревогу, однако проблемы многочислен­ных ложных срабатываний будут аналогичны предыдущему методу.

Отслеживание используемых системой драйверов, процессов и сервисов. Это универсальная методика, применимая не только про­тив клавиатурных шпионов. В простейшем случае можно применять программы типа Kaspersky Inspector или Adinf, которые отслеживают появление в системе новых файлов.

Программы для поиска и удаления клавиатурных шпионов

Любой антивирусный продукт. Все антивирусы в той или иной мере могут находить клавиатурные шпионы, однако клавиатурный шпион не является вирусом и в результате пользы от антивируса мало.

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

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

Из специализированных программ интерес могут представлять коммерческие продукты PrivacyKeyboard и Anti-keylogger (http://www.bezpeka.biz/).

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

Другим примером может служить программа Advanced Anti Keylogger (http://www.anti-keylogger.net). В режиме обучения данная программа по логике работы напоминает Firewall — при обнаружении подозрительной активности выводится предупреждение с указанием имени и описания программы. Пользователь может выбрать действие на сеанс (разрешить, запретить), или создать постоянное правило для правило для приложения. В ходе тестов Advanced Anti Keylogger уверенно обнаружил все основные разновидности клавиатурных шпионов (на базе ловушки, циклического опроса, драйвера-фильтра). Настройки программы защищаются паролем, который задается в ходе инсталляции.

Exit mobile version