Данная методика основана на периодическом опросе состояния клавиатуры. Для опроса состояния клавиш в системе предусмотрена специальная функция GetKeyboardState, возвращающая массив из 255 байт, в котором каждый байт содержит состояние определенной клавиши на клавиатуре. Данный метод уже не требует внедрения DLL в GUI процессы и в результате шпион менее заметен.
Однако изменение статуса клавиш происходит в момент считывания потоком клавиатурных сообщений из его очереди, и в результате подобная методика работает только для слежения за GUI приложениями. От этого недостатка свободна функция GetAsyncKeyState, возвращающая состояние клавиши на момент вызова функции.
На прилагаемом компакт-диске имеется демонстрационный «клавиатурный шпион», построенный на основе циклического опроса клавиатуры — приложение KD2.
Недостатком клавиатурных шпионов такого типа является необходимость периодического опроса состояния клавиатуры с достаточно высокой скоростью, не менее 10–20 опросов в секунду.
Данная методика не получила широкого распространения, но тем не менее она может с успехом применяться для построения клавиатурных шпионов. Методики перехвата функций API подробно рассматривались в статье, посвященной RootK.it. Разница между RootKit и клавиатурным шпионов в данном случае невелика — шпион будет перехватыватьфункции с целью мониторинга, а не с целью модификации принципов работы и результатов вызова.
Простейшим способом может быть перехват функций GetMessage, PeekMessage и TranslateMessage библиотеки User32, что позволит вести мониторинг всех сообщений, получаемых GUI приложениями.
В ходе решения задач по защите от утечки информации часто рассматривают только различные программные средства для шпионажа за работой пользователя. Однако кроме программных возможны и аппаратные средства:
• установка устройства слежения в разрыв кабеля клавиатуры (например, устройство может быть выполнено в виде переходника PS/2);
• встраивание устройства слежения в клавиатуру;
• считывание данных путем регистрации ПЭМИН (побочных электромагнитных излучений и наводок);
• визуальное наблюдение за клавиатурой.
Аппаратные клавиатурные шпионы встречаются намного реже, чем программные. Однако при проверке особо ответственных компьютеров (например, применяемых для совершения банковских операций) о возможности аппаратного слежения за клавиатурным вводом не следует забывать.
В настоящее время сотни клавиатурных шпионов, рассмотрим в качестве примера достаточно распространенную коммерческую программу ActualSpy (http://www.actualspy.ru
). Данная программа может регистрировать клавиатурный ввод (с регистрацией заголовка окна и имени программы), снимать скриншоты экрана по расписанию, регистрировать запуск/останов программ, следить за буфером обмена, принтером, создаваемыми пользователем файлами. Кроме того, в программе реализовано слежение за Интернет-сое-динениями и посещаемыми сайтами. ActualSpy выбран в качестве примера.Программа Actual Spy имеет простейшую маскировку от обнаружения — она не видна в стандартном списке задач Windows. Для анализа собранной информации программа формирует протоколы в формате HTML. Принцип работы программы ActualSpy основан на ловушке, регистрирующей события клавиатуры.
В качестве других примеров могут выступить Spy Agent (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/)… Этот список можно продол-жать очень долго, однако в большинстве случаев современные клавиатурные шпионы имеют примерно одинаковую базовую функциональность и различаются сервисными функциями и качеством маскировки в системе.