Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #60, НОЯБРЬ 2005 г.

Компьютерный СМЕРШ

Зайцев Олег (z-oleg.com/secur)

Спецвыпуск: Хакер, номер #060, стр. 060-070-6


Из спецпрограмм стоит отметить PrivacyKeyboard и Anti-keylogger, которые перехватывают кучу системных функций и отлавливают типичное для кейлоггера поведение. Они хорошо ловят кейлоггеры всех видов, но ставить отдельный продукт для поимки клавиатурного шпиона - это на любителя.

Конечно, настоящий Х-мэн в состоянии обойтись и без спецпрограмм, так как большинство кейлоггеров построено на основе ловушек, а ловушки предполагают загрузку библиотеки-перехватчика во все GUI-процессы, что и выдает такие кейлоггеры с головой. Как раз во время написания этой статьи мне прислали файл для анализа - оказалось, Family Key Logger:

5. Поиск перехватчиков событий клавиатуры/мыши/окон (Keylogger, троянские DLL)

C:\WINDOWS\system32\CTF\ctfs.dll -->gt; Подозрение на Keylogger или троянскую DLL

C:\WINDOWS\system32\CTF\ctfs.dll>gt; >gt; >gt; Нейросеть: файл с вероятностью 99,92% похож на типовой перехватчик событий клавиатуры/мыши

>gt; >gt; >gt; C:\WINDOWS\system32\CTF\ctfmon.dll -->gt; С высокой степенью вероятности обнаружен Keylogger или троянская DLL

C:\WINDOWS\system32\CTF\ctfmon.dll>gt; >gt; >gt; Нейросеть: файл с вероятностью 99,98% похож на типовой перехватчик событий клавиатуры/мыши

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

Наш подопытный экспортирует функцию, инсталлирующую Hook:

листинг

IDA - фрагмент кода, устанавливающего Hook кейлоггера

Верстальщику: строки .text:1000151A:. и .text:1000151 :. выделить цветом или жирным шрифтом

.text:1000150A InstallKeyboardHook proc near

.text:1000150A push ebp

.text:1000150B mov ebp, esp

.text:1000150D push 0 ; dwThreadId

.text:1000150F mov eax, hmod

.text:10001514 push eax ; hmod

.text:10001515 push offset KeyboardProc ; lpfn

.text:1000151A push 2 ; idHook

.text:1000151C call ds:SetWindowsHookExA

.text:10001522 mov ds:hhk, eax

.text:10001527 mov eax, ds:hhk

.text:1000152C pop ebp

.text:1000152D retn

.text:1000152D InstallKeyboardHook endp

В данном коде для нас интересны параметры функции SetWindowsHookExA. Параметр idHook задает тип перехватчика (в нашем случае он "2", то есть клавиатура, что наводит на соответствующие подозрения), offset KeyboardProc - смещение функции-обработчика. Посмотрим, что делает этот самый KeyboardProc (листинг урезан: в настоящем звере несколько веток, а я оставил короткий и наглядный фрагмент; более сложный обработчик отличается только тем, что фиксирует имя пользователя и имя окна в фокусе ввода - все остальное остается неизменным).

Назад на стр. 060-070-5  Содержание  Вперед на стр. 060-070-7