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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

164  Часть II  •  Продвинутый статический анализ

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

 

 

 

 

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

Так, червь Witty, замеченный несколько лет назад, обращался к \Device\ PhysicalDisk1 через пространство имен NT, чтобы повредить файловую систему жертвы. Он открывал это устройство и записывал в него отрезки данных случайно выбранного размера, чем рано или поздно выводил из строя операционную систему и делал невозможной ее загрузку. Этот червь просуществовал недолго, поскольку зараженные компьютеры часто давали сбой до того, как он успевал распространиться. Однако пострадавшим системам был причинен немалый вред.

Еще одним примером может служить злонамеренное использование устройства \Device\PhysicalMemory для прямого доступа к оперативной памяти, что позволяет программам в пользовательском пространстве производить запись в пространство ядра. С помощью этой методики вредоносы модифицировали ядро и прятали программы в пространстве пользователя.

ПРИМЕЧАНИЕ

Начиная с Windows 2003 SP1 устройство \Device\PhysicalMemory недоступно из пользовательского пространства. Но вы по-прежнему можете обращаться к нему из пространства ядра, извлекая такую низкоуровневую информацию, как код и конфигурация BIOS.

Альтернативные потоки данных

Альтернативные потоки данных (alternate data streams, ADS) — это технология

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

влистинге каталога или при просмотре содержимого файла — ее можно увидеть только при доступе к потоку.

Данные в ADS подчиняются соглашению об именовании вида обычныйФайл.txt:По­ ток:$DATA, что позволяет программе выполнять чтение и запись в заданном потоке. Авторы вредоносного ПО любят эту технологию, так как она позволяет прятать данные.

Реестр Windows

Реестр 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

 

 

Глава 7. Анализ вредоносных программ для Windows  165

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

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

Но прежде, чем углубляться в эту тему, рассмотрим несколько важных терминов, которые необходимо понимать при чтении официальной документации.

Корневой ключ. Реестр состоит из пяти разделов высшего уровня, которые называются корневыми ключами. Иногда их обозначают как HKEY, в англоязычной литературе также используется термин hive (улей). Каждый корневой ключ имеет определенное назначение, о чем мы поговорим чуть ниже.

Дочерний ключ. Это как подкаталог внутри каталога.

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

Параметр. Упорядоченная пара с именем и значением.

Значение или данные. Данные, которые хранятся в параметре реестра.

Корневые ключи реестра

Реестр разделен на пять корневых ключей.

HKEY_LOCAL_MACHINE (HKLM). Хранит глобальные настройки локальной системы.HKEY_CURRENT_USER (HKCU). Хранит настройки текущего пользователя.HKEY_CLASSES_ROOT. Хранит типы информации.

HKEY_CURRENT_CONFIG. Хранит настройки текущей аппаратной конфигурации, а точнее разницу между текущей и стандартной конфигурациями.

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

Чаще других используются ключи HKLM и HKCU (обычно обозначаются аббревиа­ турами).

Некоторые ключи на самом деле являются виртуальными и лишь ссылаются на имеющуюся информацию. Например, ключ HKEY_CURRENT_USER в действительности хранится внутри HKEY_USERS\SID, где SID — идентификатор безопасности текущего пользователя. Еще один популярный дочерний ключ, HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows\CurrentVersion\Run, содержит список исполняемых файлов,

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

166  Часть II  •  Продвинутый статический анализ

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

 

 

 

 

которые автоматически запускаются при входе пользователя в систему. Корневым здесь является ключ HKEY_LOCAL_MACHINE, который хранит дочерние ключи SOFTWARE,

Microsoft, Windows, CurrentVersion и Run.

Regedit

На рис. 7.1 показан встроенный в Windows редактор реестра Registry Editor (Regedit). На левой панели выводятся открытые дочерние ключи. Справа отображаются соответствующие параметры. Каждый параметр имеет имя, тип и значение. Полный путь к текущему дочернему ключу выводится в нижней части окна.

Программы, которые стартуют автоматически

Запись параметров в дочерний ключ Run (выделенный на рис. 7.1) — это широко известный способ автоматически запускать программное обеспечение. И хотя этот подход не очень скрытный, вредоносные программы часто используют его, чтобы стартовать вместе с системой.

Microsoft предоставляет бесплатную утилиту Autoruns, которая перечисляет код, запускаемый при загрузке системы. Это касается исполняемых файлов, динамических библиотек, загружаемых в Internet Explorer, и других программ, а также драйверов, которые выполняются ядром. Autoruns проверяет примерно 25–30 мест в реестре, которые предназначены для автоматического запуска кода, но этот список может оказаться неполным.

Рис. 7.1. Утилита Regedit

 

 

 

 

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

 

 

Глава 7. Анализ вредоносных программ для Windows  167

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Распространенные функции для работы с реестром

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

RegOpenKeyEx. Открывает реестр для записи и чтения. Существуют функции, которые позволяют проделывать эти операции без предварительного открытия реестра, но большинство программ все рано используют RegOpenKeyEx.

RegSetValueEx. Добавляет в реестр новый параметр и устанавливает для него значение.

RegGetValue. Возвращает содержимое параметра реестра.

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

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

Практический анализ кода, работающего с реестром

В листинге 7.1 показан настоящий вредоносный код, который открывает в реестре ключ Run и добавляет в него значение, чтобы запускаться при каждой загрузке Windows. Функция RegSetValueEx принимает шесть аргументов и либо редактирует существующий параметр реестра, либо создает новый, если такового еще нет.

ПРИМЕЧАНИЕ

При поиске документации для таких функций, как RegOpenKeyEx иRegSetValuEx, не забудьте убрать в конце букву W или A.

Листинг 7.1. Код, изменяющий настройки реестра

0040286F

push

2

; samDesired

00402871

push

eax

; ulOptions

00402872

push

offset SubKey

; "Software\\Microsoft\\Windows\\

CurrentVersion\\Run"

 

 

 

00402877

push

HKEY_LOCAL_MACHINE

; hKey

0040287C

call

esi ; RegOpenKeyExW

 

0040287E

test

eax, eax

 

 

00402880

jnz

short loc_4028C5

 

 

00402882

 

 

 

 

00402882

loc_402882:

 

 

 

00402882

lea

ecx, [esp+424h+Data]

 

00402886

push

ecx

; lpString

00402887

mov

bl, 1

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

w

 

 

to

 

 

168   

Часть II  • 

Продвинутый статический анализ

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

o

m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

00402889

call

ds:lstrlenW

 

 

 

 

 

 

 

 

 

0040288F

lea

edx, [eax+eax+2]

 

 

 

 

 

 

 

 

 

00402893

push

edx

; cbData

 

 

 

 

 

 

 

 

00402894

mov

edx, [esp+428h+hKey]

 

 

 

 

 

 

 

 

00402898

lea

eax, [esp+428h+Data]

 

 

 

 

 

 

 

 

0040289C

push

eax

; lpData

 

 

 

 

 

 

 

 

0040289D

push

1

; dwType

 

 

 

 

 

 

 

 

0040289F

push

0

; Reserved

 

 

 

 

 

 

 

 

004028A1

lea

ecx, [esp+434h+ValueName]

 

 

 

 

 

 

 

 

004028A8

push

ecx

; lpValueName

 

 

 

 

 

 

 

 

004028A9

push

edx

; hKey

 

 

 

 

 

 

 

 

004028AA

call

ds:RegSetValueExW

 

 

 

 

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

 

 

 

 

В листинге 7.1 в большинстве строчек после точки с запятой указаны комментарии. Это в основном имена аргументов, которые добавляются в стек. Они были взяты из официальной документации для соответствующих функций. Например, в первых четырех строках содержатся комментарии samDesired, ulOptions, "Software\\ Microsoft\\Windows\\CurrentVersion\\Run" и hKey, которые дают нам представление о добавляемых значениях. Значение samDesired указывает на тип запрашиваемого доступа, поле ulOptions является беззнаковым длинным целым числом, которое представляет параметры вызова (не забывайте о венгерской нотации), а hKey — это дескриптор корневого ключа, к которому обращается функция.

Код вызывает функцию RegOpenKeyEx с аргументами, необходимыми для открытия дескриптора ключа HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. Имя и значение параметра хранятся в стеке в качестве аргументов функции — здесь они помечены с помощью IDA Pro. Вызов lstrlenW нужен, чтобы получить размер данных, которые передаются в виде аргумента функции RegSetValueEx .

Написание скриптов для реестра с помощью файлов .reg

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

Листинг 7.2. Пример файла .reg

Windows Registry Editor Version 5.00

[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

"MaliciousValue"="C:\Windows\evil.exe"

В первой строке листинга 7.2 указана версия редактора реестра (5.00 в данном случае обозначает Windows XP). Ключ, который нужно отредактировать, [HKLM\ SOFTWARE\Microsoft\Windows\CurrentVersion\Run], находится внутри квадратных