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

Олег Зайцев

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

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

Слежение за клавиатурным вводом при помощи перехвата функций Windows API

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

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

Пример клавиатурного шпиона

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

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

Заключение

 

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

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

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

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

Перед описанием основных принципов работы клавиатурного шпиона необходимо рассмотреть модель аппаратного ввода системы Windows. Достаточно подробное описание этой модели можно найти в книге «Windows для профессионалов» Д.Рихтера.

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

 

Рис. 1

Рис. 1

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

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

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

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

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

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

 


1 GUI (Graphical User Interface) — графический интерфейс пользователя.

В начало В начало

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

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

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

На прилагаемом компакт-диске имеется демонстрационный клавиатурный шпион, построенный на основе циклического опроса клавиатуры, — приложение KD2.

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

В начало В начало

Слежение за клавиатурным вводом при помощи перехвата функций Windows API

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

Простейшим способом может быть перехват функций GetMessage, PeekMessage и TranslateMessage библиотеки User32, что позволит вести мониторинг всех сообщений, получаемых GUI-приложениями.

В начало В начало

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

Данный метод еще более эффективен, чем описанные выше. Возможны как минимум два варианта реализации этого метода — написание и установка в систему своего драйвера клавиатуры вместо штатного или установка драйвера-фильтра. Применение драйвера-фильтра, на наш взгляд, является наиболее корректной методикой. Удачный вариант ее реализации описан на сайте http://www.wasm.ru/, другой вариант можно найти в Windows DDK (пример называется kbfiltr).

В начало В начало

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

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

  • установка устройства слежения в разрыв кабеля клавиатуры (например, устройство может быть выполнено в виде переходника PS/2);
  • встраивание устройства слежения в клавиатуру;
  • считывание данных путем регистрации ПЭМИН (побочных электромагнитных излучений и наводок);
  • визуальное наблюдение за клавиатурой.

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

В начало В начало

Пример клавиатурного шпиона

В настоящее время существуют сотни клавиатурных шпионов. В качестве примера рассмотрим достаточно распространенную коммерческую программу ActualSpy (http://www.actualspy.ru/). Данная программа может регистрировать клавиатурный ввод (с регистрацией заголовка окна и имени программы), снимать скриншоты экрана по расписанию, регистрировать запуск/останов программ, следить за буфером обмена, принтером, создаваемыми пользователем файлами. Кроме того, в программе реализовано слежение за Интернет-соединениями и посещаемыми сайтами.

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

 

Пример клавиатурного шпиона

В качестве других примеров могут выступать SpyAgent (http://www.spytech-web.com/), ActMon (http://www.actmon.com/), SpyBuddy (http://www.actmon.com/), PC Activity Monitor (http://www.keyloggers.com), KGB Spy (http://www.refog.ru/) и пр. Этот список можно продолжать очень долго, однако в большинстве случаев современные клавиатурные шпионы имеют примерно одинаковую базовую функциональность, а различаются сервисными функциями и качеством маскировки в системе.

В начало В начало

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

  1. Поиск по сигнатурам. Данный метод не отличается от типовых методик поиска вирусов. Сигнатурный поиск позволяет однозначно идентифицировать клавиатурные шпионы, при правильном выборе сигнатур вероятность ошибки практически равна нулю. Однако сигнатурный сканер сможет обнаруживать заранее известные и описанные в его базе данных объекты.
  2. Эвристические алгоритмы. Из названия понятно, что это методики поиска клавиатурного шпиона по его характерным особенностям. Эвристический поиск носит вероятностный характер. Как показала практика, этот метод наиболее эффективен для поиска клавиатурных шпионов самого распространенного типа — тех, что основаны на ловушках. Однако подобные методики дают много ложных срабатываний. Мои исследования показали, что существуют сотни безопасных программ, не являющихся клавиатурными шпионами, но устанавливающих ловушки для слежения за клавиатурным вводом и мышью. Наиболее распространенные примеры — программы Punto Switcher, словарь Lingvo, программное обеспечение для мультимедийных клавиатур и мышей.
  3. Мониторинг функций Windows API, используемых клавиатурными шпионами. Данная методика основана на перехвате ряда функций, применяемых клавиатурным шпионом, — в частности функций SetWindowsHookEx, UnhookWindowsHookEx, GetAsyncKeyState, GetKeyboardState. Вызов данных функций каким-либо приложением позволяет вовремя поднять тревогу, однако проблемы многочисленных ложных срабатываний будут теми же, что и при применении метода 2.
  4. Отслеживание используемых системой драйверов, процессов и сервисов. Это универсальная методика, применяемая не только против клавиатурных шпионов. В простейшем случае можно применять программы типа Kaspersky Inspector или Adinf, которые отслеживают появление в системе новых файлов.

В начало В начало

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

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

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

 

 

Рис. 2

Рис. 2

Программа Anti-Keylogger работает в фоновом режиме и производит обнаружение программ, подозреваемых в слежении за клавиатурой. В случае необходимости можно вручную разблокировать работу любой из обнаруженных программ (например, на рисунке видно, что в список шпионов попали MSN Messanger и программа закачки из Интернета FlashGet). Для обнаружения клавиатурных шпионов не применяются базы сигнатур, обнаружение ведется эвристическими методами.

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

Другим примером может служить программа Advanced Anti-Keylogger (http://www.anti-keylogger.net/) — рис. 3.

 

Рис. 3

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

В начало В начало

Заключение

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

КомпьютерПресс 6'2005

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует