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

 

 

 

 

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

 

 

Глава 12. Скрытый запуск вредоносного ПО  291

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

В конце атакуемому процессу передается сообщение WH_CBT, чтобы тот загрузил библиотеку hook.dll. Это позволит hook.dll работать в адресном пространстве notepad.exe.

После внедрения hook.dll может выполнить от имени процесса notepad.exe весь вредоносный код, хранящийся внутри DllMain. Поскольку функция MalwareProc вызывает лишь процедуру CallNextHookEx, она не должна влиять на входящие сообщения, но, чтобы это гарантировать, вредоносные программы часто вызывают вслед за ней LoadLibrary и UnhookWindowsHookEx.

Detours

Detours — это библиотека, разработанная подразделением Microsoft Research

в1999 году. Изначально ее целью было упростить управление и расширение возможностей ОС и приложений. Она позволяет разработчикам легко вносить изменения в программы.

Библиотека Detours пользуется популярностью среди авторов вредоносного ПО, которые с ее помощью импортируют модификации таблиц, подключают динамические библиотеки к существующим программным файлам и добавляют перехватчики

вактивные процессы.

Чаще всего злоумышленники используют Detours для добавления новых DLL к двоичным файлам, хранящимся на диске. Вредонос модифицирует структуру PE-заголовка и создает раздел под названием .detour, которая обычно помещается между таблицей экспорта и какими-либо отладочными символами. Она содержит исходный PE-заголовок с новой таблицей адресов импорта. После внесения изменений с использованием утилиты setdll, которая поставляется вместе с Detours, заголовок начинает ссылаться на эту таблицу.

На рис. 12.4 показано окно программы PEview с открытым процессом notepad.exe, который был заражен с помощью библиотеки Detours. Обратите внимание, что новая таблица импорта в разделе .detour содержит запись evil.dll . Благодаря этому evil.dll будет загружаться вместе с Блокнотом. Блокнот будет работать как обычно, и большинство пользователей даже не заметит выполнения вредоносной библиотеки.

Рис. 12.4. Демонстрация внедрения evil.dll с помощью Detours в окне PEview

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

292  Часть 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

 

 

 

 

Как известно, вместо официальной версии Detours от компании Microsoft авторы вредоносного ПО используют альтернативные и нестандартные методы добавления раздела .detour. Но это не должно помешать вам проанализировать зараженный код.

Внедрение асинхронных процедур

Ранее в этой главе мы показали, что если создать поток с помощью вызова Cre­ ateRemoteThread, то из внешнего процесса можно вызвать нужные вам функции. Однако создание потока требует дополнительных ресурсов — гораздо эффективнее было бы вызывать функцию из существующего потока. В Windows эта возможность предоставляется с помощью асинхронного вызова процедур (asynchronous procedure call, APC).

APC может заставить поток выполнить какой-то другой код, прежде чем начинать работу в штатном режиме. У каждого потока есть своя очередь асинхронных про­ цедур, которые выполняются, когда тот находится в ожидающем состоянии, например при вызове таких функций, как WaitForSingleObjectEx, WaitForMultipleObjectsEx

или Sleep. Эти функции, в сущности, дают потоку возможность выполнить накопи­ вшиеся APC.

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

APC бывают двух видов:

процедуры, сгенерированные для системы или драйвера, работают в режиме ядра;

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

Вредоносное ПО генерирует процедуры в обоих режимах, используя внедрение APC. Рассмотрим каждый из этих методов.

Внедрение APC из пользовательского пространства

Находясь в пользовательском пространстве, поток может поместить в очередь функцию, которая будет вызвана из внешнего потока. Для этого предусмотрена операция QueueUserAPC. Поскольку для выполнения пользовательских APC поток должен быть ожидающим, злоумышленников интересуют программы, которые с большой долей вероятности входят в это состояние. К счастью для аналитиков безопасности, вызов WaitForSingleObjectEx является самым популярным в Windows API и ожидающих потоков обычно довольно много.

Рассмотрим аргументы функции QueueUserAPC: pfnAPC, hThread и dwData. Вызов QueueUserAPC просит поток с дескриптором hThread запустить процедуру pfnAPC с па-

 

 

 

 

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

 

 

Глава 12. Скрытый запуск вредоносного ПО  293

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

раметром dwData. В листинге 12.5 показано, как вредоносное ПО может использовать QueueUserAPC для принудительной загрузки DLL в контексте другого процесса, хотя перед этим для атаки уже был выбран подходящий поток.

ПРИМЕЧАНИЕ

Чтобы распознать код, атакующий отдельные потоки, ищите API-вызовы на-

подобие CreateToolhelp32Snapshot, Process32First и Process32Next, с помощью которых вредонос находит нужный процесс. Вслед за ними часто следуют вызовы Thread32First и Thread32Next, которые находятся внутри цикла иищут в процессе поток для атаки. Как вариант, для поиска процесса вредонос может использовать вызов Nt/ZwQuerySystemInformation с информационным классом SYSTEM_PROCESS_INFORMATION.

Листинг 12.5. Внедрение APC из пользовательского приложения

00401DA9

push

[esp+4+dwThreadId]

; dwThreadId

00401DAD

push

0

; bInheritHandle

00401DAF

push

10h

; dwDesiredAccess

00401DB1

call

ds:OpenThread

 

00401DB7

mov

esi, eax

 

00401DB9

test

esi, esi

 

00401DBB

jz

short loc_401DCE

 

00401DBD

push

[esp+4+dwData]

; dwData = dbnet.dll

00401DC1

push

esi

; hThread

00401DC2

push

ds:LoadLibraryA

; pfnAPC

00401DC8

call

ds:QueueUserAPC

 

Получив идентификатор нужного потока, вредонос открывает с его помощью соответствующий дескриптор . В данном примере вредонос хочет заставить поток загрузить DLL во внешний процесс, поэтому мы можем наблюдать вызов QueueUserAPC, аргумент pfnAPC которого равен LoadLibraryA . Параметр, который будет передан функции LoadLibraryA, содержится в аргументе dwData (здесь ему предварительно присваивается имя библиотеки dbnet.dll). Когда внешний поток войдет в ожидающее состояние, он вызовет LoadLibraryA, заставляя атакуемый процесс загрузить dbnet.dll (при условии, что процедура находится в очереди).

В этом примере вредоносная программа атакует процесс svchost.exe. Это распространенный вариант, поскольку потоки этого процесса часто находятся в ожидающем состоянии. Вредонос может внедрить APC во все потоки svchost.exe, чтобы зараженный код выполнился как можно быстрее.

Внедрение APC из пространства ядра

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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

294  Часть 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

 

 

 

 

выполнения в пользовательском режиме (чаще всего это делается внутри svchost.exe). Процедуры этого типа часто содержат код командной оболочки.

Для эксплуатации APC драйверы устройств используют две основные функции: KeInitializeApc и KeInsertQueueApc. Пример того, как эти функции применяются в рутките, показан в листинге 12.6.

Листинг 12.6. Внедрение пользовательских APC из пространства ядра

000119BD

push

ebx

 

000119BE

push

1

 

000119C0

push

[ebp+arg_4]

 

000119C3

push

ebx

 

000119C4

push

offset sub_11964

000119C9

push

2

 

000119CB

push

[ebp+arg_0]

 

000119CE

push

esi

 

000119CF

call

ds:KeInitializeApc

000119D5

cmp

edi, ebx

 

000119D7

jz

short loc_119EA

000119D9

push

ebx

 

000119DA

push

[ebp+arg_C]

 

000119DD

push

[ebp+arg_8]

 

000119E0

push

esi

 

000119E1

call

edi

;KeInsertQueueApc

Асинхронную процедуру нужно сначала инициализировать с помощью вызова KeInitializeApc. Если шестой аргумент, NormalRoutine , не равен нулю, а седьмой аргумент, ApcMode , равен 1, это означает, что процедура работает в пользовательском режиме. Таким образом, исследовав эти два параметра, вы можете определить, использует ли руткит внедрение APC для запуска кода в пространстве пользователя.

KeInitializeAPC инициализирует структуру KAPC, которая должна быть передана функции KeInsertQueueApc, чтобы объект APC был помещен в очередь атакуемого потока. В листинге 12.6 структура KAPC будет содержаться в регистре ESI.

Врезультате успешного выполнения KeInsertQueueApc асинхронная процедура попадет в очередь и будет готова к запуску.

Вданном примере вредонос ведет атаку на процесс svchost.exe, но, чтобы в этом убедиться, нам необходимо исследовать предпоследний аргумент, который помещается в стек для вызова KeInitializeApc. Он содержит поток, который будет внедрен.

Вданном случае это arg_0 . Следовательно, нам нужно вернуться назад по коду и посмотреть, какое значение присваивается этому аргументу: это позволит нам понять, что атака направлена на потоки процесса svchost.exe.

Итоги главы

В этой главе мы изучили распространенные методы скрытого запуска вредоносного ПО — от простых до продвинутых. Многие из них требуют модификации оперативной памяти в системе, как в случае с внедрением DLL, подменой процессов и уста-

 

 

 

 

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

 

 

Глава 12. Скрытый запуск вредоносного ПО  295

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

новкой перехватчиков. Другие методики подразумевают изменение двоичных файлов на диске, как мы видели на примере добавления раздела .detour в PE-заголовок. И хотя эти приемы сильно разнятся, цель у них одна и та же.

Аналитик безопасности должен уметь распознавать разные способы запуска: это позволяет находить вредоносный код в работающей системе. Но определение

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

Вследующих двух главах рассказывается, как вредоносы кодируют свои данные

ивзаимодействуют по сети.

Лабораторные работы

Лабораторная работа 12.1

Проанализируйте зараженные файлы Lab12-01.exe и Lab12-01.dll. Убедитесь, что во время анализа они находятся в одном и том же каталоге.

Вопросы

1.Что произойдет, если запустить вредоносный исполняемый файл?

2.В какой процесс выполняется внедрение?

3.Как заставить вредоносную программу прекратить открывать всплыва­ ющие окна?

4.Как этот вредонос работает?

Лабораторная работа 12.2

Проанализируйте зараженный файл Lab12-02.exe.

Вопросы

1.Каково назначение этой программы?

2.Как загрузчик скрывает выполнение?

3.Где хранится вредоносный код?

4.Как защищен вредоносный код?

5.Как защищены строки?

Лабораторная работа 12.3

Проанализируйте вредонос, извлеченный в лабораторной работе 12.2, или воспользуйтесь файлом Lab12-03.exe.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

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

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Вопросы

1.Каково назначение этого вредоносного кода?

2.Как вредоносный код себя внедряет?

3.Какие файлы эта программа оставляет после себя на диске?

Лабораторная работа 12.4

Проанализируйте зараженный файл Lab12-04.exe.

Вопросы

 

 

 

 

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

 

 

 

 

1.Что делает код по адресу 0x401000?

2.В какой процесс внедряется код?

3.Какая библиотека загружается с помощью функции LoadLibraryA?

4.Что передается вызову CreateRemoteThread в качестве четвертого аргумента?

5.Какой вредоносный код внедряется основным исполняемым файлом?

6.Каково назначение этого и внедряемого вредоносного кода?