Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Майкл_Сикорски,_Эндрю_Хониг_Вскрытие_покажет!_Практический_анализ.pdf
Скачиваний:
15
Добавлен:
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

 

 

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

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Если кейлогер записывает все нажатия, он должен каким-то образом обозначать такие клавиши, как Page Down. Следовательно, у него должен быть доступ к соответствующим строкам. Чтобы их отследить, можно начать с перекрестных ссылок, продвигаясь в обратном направлении. Так вы сможете распознать во вредоносной программе возможности кейлогера.

Механизм постоянного присутствия

Получив доступ к системе, вредоносная программа часто пытается остаться там надолго. Такое поведение называется постоянным присутствием. И если механизм, который для этого используется, является достаточно уникальным, он может послужить идентификатором данного вредоносного кода.

Этот раздел начинается с наиболее распространенного способа достижения постоянного присутствия — изменения системного реестра. Дальше мы покажем, как вредонос пытается закрепиться в системе путем заражения двоичных файлов. В конце будет рассмотрен метод, который не требует редактирования файлов или реестра, — изменение порядка загрузки DLL.

Реестр Windows

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

В реестре есть много других мест для обеспечения постоянного присутствия, но мы не станем перечислять каждое из них, поскольку их запоминание и последующий­ ручной поиск будут слишком хлопотными и неэффективными. Лучше делать это с помощью специальных инструментов, таких как программа Autoruns от компании Sysinternals: она выводит все приложения, которые запускаются автоматически вместе с системой. А такие утилиты, как ProcMon, позволяют отслеживать изменения реестра в рамках базового динамического анализа.

Обсуждая исследование реестра ранее, мы не упомянули несколько популярных ключей, которые заслуживают более пристального внимания: AppInit_DLLs, Winlogon и библиотеки SvcHost.

AppInit_DLLs

Для постоянного хранения своих динамических библиотек авторы вредоносного ПО используют специальное место в реестре под названием AppInit_DLLs. Библио­ теки, которые в нем указаны, загружаются во все процессы, которые обращаются

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

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

 

 

 

 

к User32.dll. Так простое добавление в реестр позволяет держать библиотеку постоянно загруженной.

Значение AppInit_DLLs хранится в следующем ключе реестра Windows:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows

Значение AppInit_DLLs имеет тип REG_SZ и состоит из названий библиотек, разделенных пробелами. Все процессы, которые используют User32.dll (а таких большинство), загружают AppInit_DLLs. Авторов вредоносного ПО обычно интересуют отдельные процессы, поэтому, прежде чем выполнять вредоносный код, они вынуждены проверять, в каком процессе работает их библиотека. Эту проверку часто производят в функции DllMain зараженной библиотеки.

Winlogon Notify

Вредонос можно привязать к определенному событию Winlogon — например, ко входу или выходу из системы, включению или выключению компьютера, появлению экрана блокировки и т. д. Это даже может позволить вредоносу загружаться в безопасном режиме. В следующем ключе реестра находится значение Notify:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\

Когда процесс winlogon.exe генерирует событие, Windows ищет в значении Notify библиотеки, которые должны его обработать.

Динамические библиотеки SvcHost

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost

Сами службы объявляются в ключах следующего вида:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ИмяСлужбы

Службы Windows содержат множество значений реестра, большинство из которых включают сведения вида DisplayName (отображаемое имя) Description

 

 

 

 

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. Поведение вредоносных программ  271

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

(описание). Авторы вредоносного ПО часто указывают значения, которые помогают вредоносу оставаться незаметным — например, NetWareMan со строкой «Предоставляет доступ к файлам и принтерам в сетях NetWare». Можно также отметить значение реестра ImagePath, которое содержит путь к исполняемому файлу службы. Для библиотеки svchost.exe оно равно %SystemRoot%/System32/ svchost.exe –k GroupName.

Все DLL для svchost.exe содержат ключ Parameters со значением ServiceDLL, куда злоумышленники записывают путь к зараженному DLL-файлу. Там же находится значение Start, которое определяет момент запуска службы (вредоносы обычно загружаются вместе с системой).

В Windows есть ряд заранее определенных служебных групп, и вредоносные программы обычно используют одну из них, иногда перезаписывая второстепенные или редко используемые службы (например, из группы netsvcs), так как создание новой группы легко обнаружить. Чтобы узнать, применялась ли эта методика, проследите за реестром Windows посредством динамического анализа или поищите в ассемблерном коде службы такие функции, как CreateServiceA. Если вредонос модифицирует вышеперечисленные ключи, это означает, что он использует данную методику.

Заражение системных двоичных файлов

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

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

При изучении одной зараженной системы мы заметили, что системный двоичный файл rtutils.dll имеет не тот MD5-хеш, который мы ожидали, что заставило нас присмотреться к нему поближе. Мы загрузили в IDA Pro подозрительную и чистую версии rtutils.dll. В табл. 11.1 показано сравнение их функций DllEntryPoint. Разница очевидна: зараженная версия выполняет переход в другое место.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

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

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Таблица 11.1. Точка входа в rtutils.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

 

 

 

 

 

-x cha

 

 

 

 

Оригинальный код

Зараженный код

 

 

DllEntryPoint(HINSTANCE hinstDLL,

DllEntryPoint(HINSTANCE hinstDLL,

DWORD fdwReason, LPVOID lpReserved)

DWORD fdwReason, LPVOID lpReserved)

mov

edi, edi

jmp DllEntryPoint_0

push

ebp

 

mov

ebp, esp

 

push

ebx

 

mov

ebx, [ebp+8]

 

push

esi

 

mov

esi, [ebp+0Ch]

 

 

 

 

В листинге 11.5 показан вредоносный код, который был вставлен в зараженный файл rtutils.dll.

Листинг 11.5. Вредоносный участок кода, вставленный в системную библиотеку

76E8A660 DllEntryPoint_0

76E8A660

pusha

 

76E8A661

call

sub_76E8A667

76E8A666

nop

 

76E8A667

sub_76E8A667

76E8A667

pop

ecx

76E8A668

mov

eax, ecx

76E8A66A

add

eax, 24h

76E8A66D

push

eax

76E8A66E

add

ecx, 0FFFF69E2h

76E8A674

mov

eax, [ecx]

76E8A677

add

eax, 0FFF00D7Bh

76E8A67C

call

eax ; LoadLibraryA

76E8A67E

popa

 

76E8A67F

mov

edi, edi

76E8A681

push

ebp

76E8A682

mov

ebp, esp

76E8A684

jmp

loc_76E81BB2

...

 

 

76E8A68A

aMsconf32_dll db 'msconf32.dll',0

Функция с меткой DLLEntryPoint_0 выполняет инструкцию pusha, которая часто используется вредоносами для сохранения начального состояния регистра; по завершении своей работы они могут восстановить состояние с помощью операции popa. Дальше код вызывает sub_76E8A667 , после чего вызывается функция. Обратите внимание на то, что вначале выполняется инструкция pop ecx, которая помещает обратный адрес в регистр ECX (так как она происходит сразу же после вызова). Затем код прибавляет к этому адресу 0x24 (0x76E8A666 + 0x24 = 0x76E8A68A) и помещает его в стек. Участок по адресу 0x76E8A68A содержит строку 'msconf32.dll' . Вызов LoadLibraryA приводит к загрузке файла msconf32.dll. Это означает, что msconf32.dll будет загружаться всеми процессами, которые используют rtutils.dll в качестве модуля, в том числе svchost.exe, explorer.exe и winlogon.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

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

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

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

После вызова LoadLibraryA вредоносный код выполняет инструкцию popa, восстанавливая тем самым состояние системы, которое было сохранено с помощью исходной инструкции pusha. Вслед за popa идут три операции (начиная с ), идентичные тем, которые присутствовали в чистой версии функции DllEntryPoint из rtutils.dll (см. табл. 11.1). После этого выполняется переход обратно к оригинальной точке входа.

Изменение порядка загрузки DLL

Это простая методика, которая позволяет авторам вредоносного ПО создавать долгоживущие скрытые динамические библиотеки без использования реестра или заражения двоичных файлов. Ей не нужен даже отдельный вредоносный загрузчик, так как она использует механизм загрузки DLL в Windows.

По умолчанию Windows XP ищет библиотеки в таком порядке.

1.Каталог, из которого загружено приложение.

2.Текущий каталог.

3.Системный каталог (для получения пути вида …/Windows/System32/ используется функция GetSystemDirectory).

4.Шестнадцатибитный системный каталог (вида …/Windows/System/).

5.Каталог Windows (для получения пути вида …/Windows/ используется функция

GetWindowsDirectory).

6.Каталоги, перечисленные в переменной среды PATH.

ВWindows XP процесс загрузки DLL можно пропустить с помощью ключа реестра KnownDLLs, который содержит список определенных мест, обычно находящихся в …/Windows/System32/. Этот механизм создан для повышения безопасности (вредоносные библиотеки нельзя разместить выше в цепочке загрузки) и скорости (Windows не нужно выполнять стандартную процедуру поиска, описанную выше), но в нем содержится лишь небольшое количество наиболее важных DLL.

Изменение порядка загрузки можно применять к двоичным файлам, если они не находятся внутри /System32 и не защищены посредством KnownDLLs. Например, файл explorer.exe в /Windows загружает библиотеку ntshrui.dll, которая находится в /System32. Но, поскольку файл ntshrui.dll не входит в число известных DLL, для его поиска выполняется стандартная процедура, в ходе которой /Windows проверяется перед /System32. Если поместить в каталог /Windows зараженную библиотеку с именем ntshrui.dll, она будет загружена вместо настоящей библиотеки. После этого вредоносный код может загрузить оригинальный файл, чтобы не нарушить работу системы.

Этой атаке подвержен любой двоичный файл, который загружается во время запуска системы и не находится в каталоге /System32. Например, процесс explorer.exe имеет примерно 50 уязвимых библиотек. Но даже известные DLL не защищены полностью, поскольку многие из них загружают файлы, для которых выполняется

стандартная процедура поиска.