Эссе по курсу "Защита информации", кафедра радиотехники,

advertisement
Эссе по курсу "Защита информации", кафедра радиотехники,
Московский физико-технический институт (ГУ МФТИ),
http://www.re.mipt.ru/infsec
Клавиатурные шпионы
Быков Валерий
23 апреля 2008 года
г. Москва
Миллиардер по имени Билл
Новый пароль, улыбаясь, вводил.
Быстро сработал KeySpy.exe Знает пароль каждый хакер в Москве :)
В феврале 2005 года бизнесмен из Флориды Джо Лопес (Joe Lopez) подал иск против Bank of
America: неизвестные хакеры украли у американского предпринимателя с его банковского счета в
Bank of America 90 тыс. долларов, которые каким-то образом были переведены в Латвию.
В результате расследования выяснилось, что на компьютере Лопеса присутствовал вирус
Backdoor.Win32.Apdoor (Backdoor.Сoreflood), который фиксирует все клавиатурные нажатия
пользователя и через Интернет направляет их злоумышленникам. Именно таким образом к
хакерам попали пароль и логин Джо Лопеса, который регулярно работал через Интернет со своим
счетом в Bank of America.
Однако суд отказал истцу в возмещении ущерба, указав на то, что г-н Лопес пренебрег
элементарными мерами предосторожности при работе со своим банковским счетом через
Интернет: детектирование указанного вируса было добавлено в антивирусные базы почти всех
производителей антивирусного ПО еще в 2003 году.
Исчезновению 90 тыс. долларов со счета Джо Лопеса помог обычный кейлоггер .
Что такое кейлоггер?
Keylogger (он же - клавиатурный шпион) — (англ. key(stroke) — нажатие на клавишу и англ.
logger — регистрирующее устройство) — это программный продукт (модуль) или аппаратное
устройство, регистрирующее каждое нажатие клавиши на клавиатуре компьютера.
Клавиатурные шпионы образуют большую категорию вредоносных программ, представлющую
большую угрозу для безопасности пользователя. Но, клавиатурные шпионы не являются
вирусами, т.к. не обладают способностью к размножению.
Как правило, современные клавиатурные шпионы не просто записывает коды вводимых
клавиш - он "привязывает" клавиатурный ввод к текущему окну и элементу ввода. Кроме того,
многие клавиатурные шпионы отслеживают список запущенных приложений, умеют делать
"снимки" экрана по заданному расписанию или событию, шпионить за содержимым буфера обмена
и решать ряд задач, нацеленных на скрытное слежение за пользователем. Записываемая
информация сохраняется на диске и большинство современных клавиатурных шпионов могут
формировать различные отчеты, могут передавать их по электронной почте или http/ftp протоколу.
Перед описанием основных принципов работы клавиатурного шпиона необходимо
рассмотреть упрощённую схему клавиатуры и модель аппаратного ввода системы Windows.
Упрощённая схема клавиатуры
Существуют два микроконтроллера, обеспечивающие процесс обработки клавиатурного
ввода: один — на материнской плате ПК, второй — в самой клавиатуре. Таким образом,
клавиатура персонального компьютера сама по себе является компьютерной системой.
За каждой клавишей клавиатуры закреплен определенный номер, однозначно связанный с
распайкой клавиатурной матрицы и не зависящий напрямую от обозначений, нанесенных на
поверхность клавиш. Этот номер называется скан-кодом (название подчеркивает тот факт, что
компьютер сканирует клавиатуру для поиска нажатой клавиши).На самом деле клавиатура
генерирует два скан-кода для каждой клавиши — когда пользователь нажимает клавишу и когда
отпускает. Наличие двух скан-кодов важно, так как некоторые клавиши имеют смысл только тогда,
когда они нажаты (Shift, Control, Alt).
Когда пользователь нажимает клавишу на клавиатуре, он замыкает электрический контакт. В
результате при следующем сканировании микроконтроллер фиксирует нажатие определенной
клавиши и посылает в центральный компьютер скан-код нажатой клавиши и запрос на
прерывание. Аналогичные действия выполняются и тогда, когда оператор отпускает нажатую
ранее клавишу.
Модель аппаратного ввода системы Windows
При возникновении неких событии ввода (нажатии клавиш, перемещении мыши) события
обрабатываются соответствующим драйвером и помещается в системную очередь аппаратного
ввода. В системе имеется особый поток необработанного ввода, называемый RIT (Raw Input
Thread), который извлекает события из системной очереди и преобразует их в сообщения.
Полученные сообщения помещаются в конец очереди виртуального ввода одного из потоков
(виртуальная очередь потока называется VIQ – Virtualized Input Queue). При этом RIT сам
выясняет, в очередь какого конкретно потока необходимо поместить событие.
Алгоритм прохождения сигнала от нажатия пользователем клавиш на клавиатуре до
появления символов на экране
1. Операционная система при старте создает в системной процессе csrss.exe поток
необработанного ввода и системную очередь аппаратного ввода.
2. Поток необработанного ввода в цикле посылает запросы чтения драйверу класса
клавиатуры, которые остаются в состоянии ожидания до появления событий от
клавиатуры.
3. Когда пользователь нажимает или отпускает клавишу на клавиатуре, микроконтроллер
клавиатуры фиксирует нажатие/отпускание клавиши и посылает в центральный компьютер
скан-код нажатой клавиши и запрос на прерывание.
4. Системный контроллер клавиатуры получает скан-код, производит преобразование сканкода, делает его доступным на порту ввода-вывода и генерирует аппаратное прерывание
центрального процессора.
5. Контроллер прерываний вызывает процедуру обработки прерывания
6. Процедура ISR считывает из внутренней очереди контроллера клавиатуры появившиеся
данные, переводит скан-коды в коды виртуальных клавиш (независимые значения,
определенные системой) и ставит в очередь вызов отложенной процедуры
I8042KeyboardIsrDpc.
7. Как только это становится возможным, система вызывает Dpc, которая в свою очередь
вызывает процедуру обратного вызова KeyboardClassServiceCallback.
8. Процедура KeyboardClassServiceCallback извлекает из своей очереди ожидающий
завершения запрос от потока необработанного ввода и возвращает в нем информацию о
нажатой клавише.
9. Поток необработанного ввода сохраняет полученную информацию в системной очереди
аппаратного ввода и формирует на ее основе базовые клавиатурные сообщения Windows
WM_KEYDOWN, WM_KEYUP, которые ставятся в конец очереди виртуального ввода VIQ
активного потока.
10. Цикл обработки сообщений потока удаляет сообщение из очереди и передает его
соответствующей оконной процедуре для обработки.
Типы клавиатурных шпионов
Клавиатурные шпионы разделяют на три типа:

Аппаратные клавиатурные шпионы.
Это миниатюрные встроенные устройства, расположенные между клавиатурой и
компьютером. Из-за их маленьких размеров они часто остаются незамеченными длительное
время, однако они требуют физического доступа к оборудованию. Эти устройства могут
записывать сотни символов, введенных с клавиатуры, включая почтовые и банковские реквизиты.

Приложение с перехватывающим механизмом.
Этот тип использует функцию Windows API SetWindowsHookEx(), которая следит за
сообщениями о нажатиях клавиш клавиатуры. Обычно spyware-приложение состоит из exe-файла,
инициирующего функцию перехвата, и dll-файла, управляющего функциями записи информации.
Приложение, вызывающее SetWindowsHookEx(), может перехватить даже самозаполняющиеся
пароли.

Ядерные/драйверные клавиатурные шпионы.
Этот тип клавиатурного шпиона расположен на уровне ядра и получает информацию прямо от
вводного устройства (обычно клавиатуры). Он заменяет основное программное обеспечение,
обрабатывающее нажатия клавиш. Его можно запрограммировать быть невидимым, используя
преимущество выполнения при загрузке системы, до начала выполнения приложений уровня
пользователя. Так как программа запускается на уровне ядра, она не может перехватить
самозаполняющиеся пароли, потому что эта информация передается на уровне приложений.
Наиболее популярные технические подходы к построению программных кейлоггеров
 Системная ловушка на сообщения о нажатии клавиш клавиатуры
Данная методика является классической для клавиатурных шпионов. Суть метода состоит в
применении механизма ловушек (hook) операционной системы. Ловушки позволяют наблюдать за
сообщениями, которые обрабатываются окнами других программ. Установка и удаление ловушек
производится при помощи хорошо документированных функций API библиотеки user32.dll
(функция SetWindowsHookEx позволяет установить ловушку, UnhookWindowsHookEx - снять ее). В
частности, есть два специальных типа ловушки WH_KEYBOARD и WH_MOUSE - для регистрации
событий клавиатуры и мыши соответственно.
 Циклический опрос клавиатуры
Данная методика основана на периодическом опросе состояния клавиатуры. Для опроса
состояния клавиш в системе предусмотрена специальная функция GetKeyboardState,
возвращающая массив из 255 байт, в котором каждый байт содержит состояние определенной
клавиши на клавиатуре. Данный метод менее заметен чем предыдущий.
 Драйвер-фильтр стека клавиатурных драйверов ОС Windows
Данный метод еще более эффективен, чем описанные выше методы. Возможны как минимум
два варианта реализации этого метода – написание и установка в систему своего драйвера
клавиатуры вместо штатного или установка драйвера - фильтра.
Аппаратные клавиатурные шпионы
В ходе решения задач по защите от утечки информации часто рассматривают только
различные программные средства для шпионажа за работой пользователя. Однако кроме
программных возможны и аппаратные средства:

Установка устройства слежения в разрыв кабеля клавиатуры (например, устройство
может быть выполнено в виде переходника PS/2);

Встраивание устройства слежения в клавиатуру;

Считывание данных путем регистрации ПЭМИН (побочных электромагнитных
излучений и наводок);

Визуальное наблюдение за клавиатурой
Аппаратные клавиатурные шпионы встречаются намного реже, чем программные. Однако при
проверке особо ответственных компьютеров (например, применяемых для совершения банковских
операций) о возможности аппаратного слежения за клавиатурным вводом не следует забывать.
Способы распространения кейлоггеров
Способы распространения кейлоггеров в целом не отличаются от способов распространения
других вредоносных программ. Можно выделить следующие методы распространения кейлоггеров
(без учета случаев покупки и установки кейлоггера заботливым супругом(-ой) и использования
кейллоггеров службами безопасности организаций):

при открытии файла, присоединенного к электронному письму;

при запуске файла из каталога, находящегося в общем доступе в peer-to-peer сети;

с помощью скрипта на веб-страницах, который использует особенности интернетбраузеров, позволяющие программам запускаться автоматически при заходе пользователя
на данные страницы;

с помощью ранее установленной вредоносной программы, которая умеет скачивать
и устанавливать в систему другие вредоносные программы.
Методы защиты от кейлоггеров
Так как основной целью использования кейлоггеров является получение конфиденциальной
информации (номера банковских карт, паролей и т.п.), то разумными методами защиты от
неизвестных кейлоггеров являются следующие:

Использование одноразовых паролей / двухфакторная аутентификация,
Одноразовый пароль действует только один раз, при этом часто ограничивается и период
времени, в течение которого им можно воспользоваться. Поэтому, даже если такой пароль будет
перехвачен, злоумышленник уже не сможет воспользоваться им для получения доступа к
конфиденциальной информации.
Для получения одноразовых паролей могут использоваться специальные аппаратные
устройства:
1. в виде брелка
2. в виде «калькулятора»
3. Для получения одноразовых паролей могут также использоваться системы,
основанные на посылке SMS с мобильного телефона, зарегистрированного в системе,
и получения в ответ PIN-кода, который нужно вводить вместе с персональным кодом
при аутентификации.

Использование виртуальных клавиатур
Виртуальная клавиатура представляет собой графическое изображение клавиатуры,
информацию с которой пользователь вводит, щелкая мышью по нужным символам. По понятным
причинам такое решение не удовлетворит всех пользователей. Однако, этот метод все равно
можно использовать при вводе важной информации или при работе с определенными
приложениями. Отметим, что даже используя виртуальную клавиатуру, вам не гарантируется
полная безопасность, т.к. некоторые клавиатурные шпионы делают снимки с экрана при каждом
нажатии на кнопку мыши. Чтобы избежать этого, некоторые виртуальные клавиатуры способны
вводить символ при наведении на него курсора мыши и задержании на определенное время.
Таким образом, пользователь может ввести информацию, не нажимая кнопку мыши.
Как войти в сеть из интернет-кафе не беспокоясь о клавиатурных шпионах?
В интернет-кафе компьютер совершенно не защищён от этих шпионов. По состояние на
сегодняшний день невозможно определить безопасно ли ваше пребывание за компьютером или
нет. Обычно данные полученные из кейлоггера выглядят, например, следующим образом:
www.hotmail.comsarahj7@hotmail.comsnoopy2
Что означает: на электронном ящике sarahj7@hotmail.com стоит пароль snoopy2.
Рассмотрим простой трюк, который помогает эффективно скрывать пароль.
Вначале наша задача может показаться невозможной: если кейлоггер видит все, как мы
можем скрыть пароль?
Вместо того чтобы прятать пароль, наш подход заключается в том, чтобы
вставлять его в последовательность случайных символов. Поэтому мы ищем пути проникновения
на произвольные клавиши, чтобы их рассматривал кейлоггер. Причём это не должно влиять на
нормальный логин. Хитрость заключается в том, что кейлоггеры работают на очень низком
уровне операционной системы. Кейлоггер видит все, но он не понимает, что он видит. Кроме того,
браузер видит все, но он не использует все, что он видит: он не знает, что делать с ключами,
которые ввели в любом месте, кроме поля ввода. Поэтому трюк состоит в том чтобы между
правильными символами пароля вводить случайные символы за пределами интернет-браузера.
Алгоритм можно описать так:
Navigate to the login page desired;
Type in the userid;
for (each pwd character){
Give focus to anywhere but the pwd field;
Type some random characters;
Give focus to the pwd field;
Type the next character of the pwd}
Submit;
В итоге вместо
пароля snoopy2 в кейлоггере сейчас получаем:
hotmail.comspqmlainsdgsosdgfsodgfdpuouuyhdg2
Здесь в общей сложности 26 случайных символов, которые были вставлены
среди 7 символов из фактического пароля. В итоге можно набрать пароль так, что нападение
окажется невозможным. Из протестированных пяти shareware кейлоггеров: HomeKeylogger 1,70,
GhostKeylogger, KGBKeylogger, Spytector 1.2.8 и ProBot, ни одна из них не взломала пароль,
благодаря нашей хитрости
Выводы
В то время как клавиатурные шпионы существуют довольно длительное время, рост их
количества в последнее время требует нового внимания. В частности это связано с легкостью, с
которой компьютер может быть заражен – пользователю нужно просто посетить определенную
web-страницу.
В отчете компании VeriSign отмечается, что в последние годы наблюдается бурный рост
числа вредоносных программ, имеющих функциональность кейлоггера.
В настоящее время кейлоггеры, наряду с фишингом и методами социальной инженерии,
являются одним из главных методов электронного мошенничества.
Обнаружить факт шпионажа с помощью кейлоггеров можно только с использованием
специализированных средств защиты.
Существует зависимость распространенности кейлоггера от сложности его реализации. Так,
наиболее распространенные методы перехвата — установка ловушки на события ввода и
циклический опрос состояния клавиатуры — являются в то же время самыми простыми в
реализации. Написать кейлоггер, использующий данные методы, может даже человек,
научившийся программировать неделю назад.
Литература
1. Клавиатурные шпионы. Части I и 2, Николай Гребенников,
http://www.viruslist.com/ru/analysis?pubid=204007536
2. Курс лекций по компьютерной безопасности, http://ruseti.ru/book8/2/Index5.htm
3. Д.Рихтер “Windows для профессионалов”
4. How to login from an internet caf´e without worrying about keyloggers, Cormac Herley and Dinei
Florenco, http://cups.cs.cmu.edu/soups/2006/posters/herley-poster_abstract.pdf
5. Знакомство с клавиатурными шпионами,20 июня 2005,Sachin Shetty,
http://www.securitylab.ru/analytics/216399.php
6. http://ru.wikipedia.org
7. http://google.ru
8. http://xaker.ru
Download