Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Майкл_Сикорски,_Эндрю_Хониг_Вскрытие_покажет!_Практический_анализ.pdf
Скачиваний:
18
Добавлен:
19.04.2024
Размер:
17.17 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

262  Часть IV  •  Возможности вредоносного ПО

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Похищение учетных данных

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

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

Программы, которые копируют информацию, хранящуюся в Windows (пароли, хеши и т. д.), для непосредственного использования или дальнейшей расшифровки.

Программы, которые записывают нажатия клавиш.

В данном разделе мы рассмотрим каждую из этих разновидностей вредоносного ПО.

Перехват GINA

В Windows XP для хищения учетных данных используется прием, состоящий в перехвате GINA (graphical identification and authentication — графическая идентификация и аутентификация). Система GINA создавалась для того, чтобы позволить сторонним приложениям адаптировать под себя процесс входа в систему, добавляя поддержку таких технологий, как аппаратная радиочастотная идентификация (radio-frequency identification, RFID) на основе маркеров или смарт-карт. Авторы вредоносного ПО пользуются этой возможностью для загрузки кода, который крадет учетные данные.

GINA реализуется в виде DLL под названием msgina.dll и загружается программой Winlogon во время входа в систему. Winlogon также поддерживает сторонние плагины, загружая их перед GINA DLL (как при атаке посредника). Для удобства Windows предоставляет следующую ветвь реестра, где Winlogon может найти и загрузить сторонние DLL:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL

Когда-то мы нашли там зараженный файл fsgina.dll, который оказался перехватчиком GINA.

На рис. 11.2 показан пример того, как данные для входа в систему попадают к вредоносной библиотеке, проходя от Winlogon к msgina.dll. Вредоносу (fsgina.dll) удается перехватить всю учетную информацию, которую пользователь вводит во время аутентификации. Он может записать ее на диск или передать по сети.

Рис. 11.2. Вредоносная библиотека fsgina.dll притаилась между системными файлами Windows, чтобы перехватывать данные

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Глава 11. Поведение вредоносных программ  263

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Поскольку библиотека fsgina.dll перехватывает поток взаимодействия между Winlogon и GINA, она должна передать его дальше в msgina.dll, чтобы система продолжила нормально функционировать. Для этого вредоносу приходится экспортировать все функции, которые требуются системе GINA, — их насчитывается больше 15, и большинство из них имеют префикс Wlx. Очевидно, что при обнаружении в DLL множества экспортных функций, которые начинаются с Wlx, можно с большой долей вероятности предположить, что это перехватчик GINA.

Большинство этих экспортных вызовов обращаются к реальным функциям внутри msgina.dll. В случае с fsgina.dll это относится ко всем функциям, кроме

WlxLoggedOutSAS. В листинге 11.1 показан экспорт WlxLoggedOutSAS в fsgina.dll.

Листинг 11.1. Экспортная функция WlxLoggedOutSAS в GINA DLL, с помощью которой записываются похищенные учетные данные

100014A0

WlxLoggedOutSAS

100014A0

push

esi

100014A1

push

edi

100014A2

push

offset aWlxloggedout_0 ; "WlxLoggedOutSAS"

100014A7

call

Call_msgina_dll_function

...

 

 

100014FB

push

eax ; Args

100014FC

push

offset aUSDSPSOpS ;"U: %s D: %s P: %s OP: %s"

10001501

push

offset aDRIVERS ; "drivers\tcpudp.sys"

10001503

call

Log_To_File

Учетная информация сразу же передается в файл msgina.dll с помощью вызова, обозначенного как Call_msgina_dll_function . Эта функция динамически находит и запускает вызов WlxLoggedOutSAS из msgina.dll, который указывается в виде аргумента. Вызов в строке выполняет запись данных. В качестве аргументов он принимает учетную информацию, строку форматирования, с помощью которой эта информация будет выводиться, и имя файла для записи. В итоге сведения о любом успешном входе в систему сохраняются в файл %SystemRoot%\system32\drivers\ tcpudp.sys. Этот файл содержит имя пользователя, домен и два пароля — текущий и старый.

Сохранение хешей

Вредоносное ПО в Windows часто сохраняет системные хеши, чтобы получить доступ к учетным данным. После сохранения злоумышленники пытаются расшифровать эти хеши в автономном режиме или использовать их для атаки типа pass-the-hash. В ходе этой атаки хеши LM и NTLM применяются для удаленной NTLM-аутентификации, что не требует их расшифровки и получения соответствующего пароля.

Для сохранения хешей существуют программные пакеты Pwdump и Pass-the- Hash (PSH), которые распространяются бесплатно. Поскольку оба этих инструмента имеют открытый исходный код, на их основе создано множество вредоносного ПО.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

264  Часть IV  •  Возможности вредоносного ПО

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

Pwdump — это набор программ, которые выводят из диспетчера учетных записей безопасности (security account manager, SAM) хеши в формате LM i NTLM, принадлежащие локальным пользователям. Pwdump внедряет DLL внутрь процесса LSASS (local security authority subsystem service — сервер проверки подлинности локальной системы безопасности), более известного как lsass.exe. О внедрении DLL мы поговорим в главе 12, а пока что вам стоит знать лишь о том, что это прием, посредством которого вредоносное ПО выполняет библиотеки внутри других процессов, пользуясь всеми их привилегиями. Инструменты для сохранения хешей часто атакуют процесс lsass.exe, потому что он обладает достаточными привилегия­ми и доступом ко многим полезным API-функциям.

Стандартная версия Pwdump использует библиотеку lsaext.dll. При внедрении ее в lsass.exe она вызывает функцию GetHash, которая экспортируется из lsaext.dll, чтобы выполнить извлечение хешей. При этом используются недокументированные функции Windows, которые позволят получить порядковые номера всех пользователей в системе и незашифрованные хеши паролей каждого из них.

Столкнувшись с вариацией Pwdump, нужно проанализировать ее библиотеки, чтобы понять, как происходит сохранение хешей. Первым делом следует обратить внимание на экспортные функции. Из Pwdump по умолчанию экспортируется вызов GetHash, но злоумышленники могут легко поменять его имя, чтобы сделать его менее узнаваемым. Затем стоит попытаться определить функции, которые применяются в экспортных вызовах. Многие из них могут находиться динамически, поэтому в экспортных вызовах часто встречается многократное использование операции GetProcAddress.

В листинге 11.2 показан код экспортной функции GrabHash из DLL одной из версий Pwdump. Поскольку библиотека внедряется в lsass.exe, перед использованием многих символов ей сначала приходится находить их в ручном режиме.

Листинг 11.2. Уникальные АPI-вызовы, которые используются экспортной функцией GrabHash в одном из вариантов Pwdump

1000123F

push

offset LibFileName

; "samsrv.dll"

10001244

call

esi ; LoadLibraryA

 

10001248

push

offset aAdvapi32_dll_0

; "advapi32.dll"

...

 

 

 

10001251

call

esi ; LoadLibraryA

 

...

 

 

 

1000125B

push

offset ProcName

; "SamIConnect"

10001260

push

ebx

; hModule

10001265

call

esi ; GetProcAddress

 

...

 

 

 

10001281

push

offset aSamrqu ; "SamrQueryInformationUser"

10001286

push

ebx

; hModule

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Глава 11. Поведение вредоносных программ  265

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

1000128C

call

esi ; GetProcAddress

 

...

 

 

 

100012C2

push

offset aSamigetpriv ; "SamIGetPrivateData"

100012C7

push

ebx

; hModule

100012CD

call

esi ; GetProcAddress

 

...

 

 

 

100012CF

push

offset aSystemfuncti ; "SystemFunction025"

100012D4

push

edi

; hModule

100012DA

call

esi ; GetProcAddress

 

100012DC

push

offset aSystemfuni_0 ; "SystemFunction027"

100012E1

push

edi

; hModule

100012E7

call

esi ; GetProcAddress

 

Влистинге 11.2 показан код получения дескрипторов библиотек samsrv.dll

иadvapi32.dll с помощью вызова LoadLibrary. Файл samsrv.dll содержит API для простого доступа к SAM, а файл advapi32.dll был найден для доступа к функциям, которые не импортированы в lsass.exe. Динамическая библиотека данной вариации Pwdump использует дескрипторы этих библиотек для поиска множества функций. Пять самых важных из них показаны в листинге (обратите внимание на вызовы GetProcAddress и их аргументы).

Из samsrv.dll импортируются такие интересные вызовы, как SamIConnect,

SamrQueryInformationUser и SamIGetPrivateData. Вызов SamIConnect впоследствии используется для подключения к SAM, после чего для каждого пользователя в системе вызывается функция SamrQueryInformationUser.

Хеши извлекаются с использованием вызова SamIGetPrivateData, а затем расшифровываются с помощью функций SystemFunction025 и SystemFunction027,

импортированных из advapi32.dll (строки и ). Ни одна из API-функций в этом листинге не описана в официальной документации.

PSH Toolkit содержит программы, которые создают дампы хешей. Самый популярный из этих дампов известен под названием whosthere-alt. В нем хранится содержимое SAM, полученное путем внедрения DLL в lsass.exe. При этом, если сравнивать с Pwdump, используется совершенно другой набор API-функций. В листинге 11.3 показан код версии whosthere-alt, которая экспортирует функцию с именем TestDump.

Листинг 11.3. Уникальные API-вызовы, которые используются экспортной функцией TestDump

версии whosthere-alt

10001119

push

offset LibFileName ; "secur32.dll"

1000111E

call

ds:LoadLibraryA

 

10001130

push

offset ProcName ; "LsaEnumerateLogonSessions"

10001135

push

esi

; hModule

10001136

call

ds:GetProcAddress

...

 

 

 

10001670

call

ds:GetSystemDirectoryA

10001676

mov

edi, offset aMsv1_0_dll ; \\msv1_0.dll

...

 

 

 

100016A6

push

eax

; path to msv1_0.dll

100016A9

call

ds:GetModuleHandleA

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

266  Часть IV  •  Возможности вредоносного ПО

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Поскольку данная библиотека внедряется в lsass.exe, ее функция TestDump создает дамп хеша. Она динамически загружает файл secur32.dll и находит в нем вызов LsaEnumerateLogonSessions , чтобы получить список локальных уникальных идентификаторов (locally unique identifiers, LUID). В этом списке содержатся имена и домены, которые указывались при каждом входе в систему. Библиотека перебирает их, чтобы получить доступ к учетной информации. Для этого с помощью вызова GetModuleHandle она ищет внутри msv1_0.dll неэкспортированную функцию, NlpGetPrimaryCredential, которая позволяет создавать дампы хешей NT и LM.

ПРИМЕЧАНИЕ

Понимать, как вредонос добывает хеши, очень важно, но еще важнее определить, что он с этими хешами делает: сохраняет на диск, загружает на сайт или использует в атаке типа pass-the-hash? Эти подробности могут быть очень важны, поэтому, прежде чем браться за идентификацию низкоуровневых методик создания дампов, следует определить общую функциональность кода.

Кейлогеры

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

Кейлогеры в пространстве ядра

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

Кейлогеры в пользовательском режиме

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

и GetForegroundWindow из Windows API, чтобы постоянно опрашивать состояние клавиш.

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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Глава 11. Поведение вредоносных программ  267

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

нажатий, которую можно автоматически внедрить во множество системных процессов. Мы еще вернемся к функции SetWindowsHookEx в главе 12.

Прежде всего нас интересуют опрашивающие кейлогеры, которые используют вызовы GetAsyncKeyState и GetForegroundWindow. Функция GetAsyncKeyState

определяет, является ли клавиша нажатой, и если да, то нажимали ли ее после последнего вызова GetAsyncKeyState. Функция GetForegroundWindow определяет активное окно — то, которое находится в фокусе: так кейлогер может узнать, какое приложение использует ввод с клавиатуры (например, Блокнот или Internet Explorer).

На рис. 11.3 проиллюстрирована типичная циклическая структура, которую можно найти в опрашивающих кейлогерах. Сначала делается вызов GetForegroundWindow, который записывает активное окно. Затем внутренний цикл перебирает список клавиш, определяя состояние каждой из них с помощью функции GetAsyncKeyState. Если клавиша нажата, программа проверяет состояние Shift и Caps Lock, чтобы узнать, как правильно записать нажатие. По завершении внутреннего цикла опять вызывается функция GetForegroundWindow, чтобы проверить, находится ли пользователь в том же окне. Этот процесс повторяется достаточно быстро, успевая за пользовательским вводом (кейлогер может использовать вызов Sleep, чтобы не потреблять слишком много ресурсов).

Рис. 11.3. Циклическая структура кейлогера

на основе функций GetAsyncKeyState и GetForegroundWindow

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

268  Часть IV  •  Возможности вредоносного ПО

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

В листинге 11.4 показана та же циклическая структура в дизассемблированном виде.

Листинг 11.4. Ассемблерный код кейлогера на основе функций GetAsyncKeyState

и GetForegroundWindow

00401162

call

ds:GetForegroundWindow

...

 

 

 

00401272

push

10h

; nVirtKey Shift

00401274

call

ds:GetKeyState

 

0040127A

mov

esi, dword_403308[ebx]

00401280

push

esi

; vKey

00401281

movsx

edi, ax

 

00401284

call

ds:GetAsyncKeyState

 

0040128A

test

ah, 80h

 

0040128D

jz

short loc_40130A

 

0040128F

push

14h

; nVirtKey Caps Lock

00401291

call

ds:GetKeyState

 

...

 

 

 

004013EF

add

ebx, 4

 

004013F2

cmp

ebx, 368

 

004013F8

jl

loc_401272

 

Перед входом во внутренний цикл программа вызывает GetForegroundWindow. Цикл начинается в строке , сразу же проверяя состояние клавиши Shift с помощью GetKeyState. Эта функция позволяет быстро проверить, нажата ли клавиша, но, в отличие от GetAsyncKeyState, она не помнит, была ли та нажата с момента предыдущего вызова. Затем в строке кейлогер индексирует массив клавиш на клавиатуре, используя регистр EBX. Нажатие новой клавиши записывается, но перед этим вызов GetKeyState проверяет, активизирован ли режим Caps Lock. В конце EBX инкрементируется , чтобы можно было проверить следующую клавишу в списке. После проверки 92 клавиш (368 / 4) внутренний цикл завершается, но только для того, чтобы начаться вновь после очередного вызова GetForegroundWindow.

Идентификация кейлогеров по их строкам

Чтобы распознать возможности кейлогера внутри вредоноса, можно проверить импортируемые им API-функции, но вы также можете поискать индикаторы среди его строк. Второй способ может оказаться особенно полезным, если вредонос обфусцирует свой импорт или использует разновидность кейлогера, с которой вы ранее не сталкивались. Например, ниже приводится список строк из кейлогера, описанного в предыдущем разделе:

[Up]

[Num Lock] [Down] [Right] [UP] [Left] [PageDown]