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

 

.

 

 

 

 

 

7

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Анализ вредоносных программ для 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

 

 

 

 

 

-x cha

 

 

 

 

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

Эта глава охватывает широкий спектр концепций, знакомых Windows-разра­ ботчикам, но, даже если вы один из них, вам все равно стоит ее прочитать. Безвредные программы обычно корректно компилируются и следуют методическим рекомендациям от компании Microsoft, однако вредоносное ПО может иметь необычную структуру и выполнять неожиданные действия. В этой главе будут рассмотрены уникальные приемы, с помощью которых вредоносная программа использует возможности Windows.

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

Windows API

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

ВWindows API используются определенные термины, названия и соглашения,

скоторыми необходимо познакомиться, прежде чем приступать к отдельным функ-

циям.

 

 

 

 

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  161

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Типы и венгерская нотация

Windows API в основном использует свои собственные названия для представления типов в языке C. Например, типы DWORD и WORD представляют 32-битные и 16-битные целые беззнаковые числа. Стандартные для C типы, такие как int, short и unsigned int, обычно игнорируются.

ВWindows для обозначения функций, как правило, используется венгерская нотация. Это соглашение об именовании, которое упрощает определение типов переменных с помощью префиксов. Переменные, содержащие 32-битное целое беззнаковое число (DWORD), начинаются с dw. Например, если третий аргумент функции VirtualAllocEx называется dwSize, вы будете знать, что это DWORD. Венгерская нотация помогает определить тип переменной и упрощает чтение кода, но иногда она становится довольно громоздкой.

Втабл. 7.1 перечислены некоторые популярные типы в Windows API (далеко не все). В скобках указаны соответствующие префиксы.

Таблица 7.1. Распространенные типы в Windows API

Тип и префикс

Описание

 

 

WORD (w)

16-битное беззнаковое значение

 

 

DWORD (dw)

32-битное беззнаковое значение (двойной WORD)

 

 

Дескрипторы (H)

Ссылка на объект. Информация, хранящаяся в дескрипторе, не доку-

 

ментируется. Работа с дескриптором должна выполняться только через

 

Windows API. Примеры: HModule, HInstance и HKey

 

 

Длинные указа-

Указатель на другой тип. Например, LPByte является указателем на byte,

тели (LP)

а LPCSTR указывает на строку символов. Строки обычно имеют префикс

 

LP, так как они на самом деле представляют собой указатели. Иногда вме-

 

сто LP вам будет встречаться префикс P (Pointer). В 32-битных системах он

 

ничем не отличается от LP. Изначально он предназначался для 16-битных

 

систем, где и видна разница

 

 

Callback

Представляет функцию, которая вызывается из Windows API. Например,

 

InternetSetStatusCallback передает указатель на функцию, которая вызыва-

 

ется всякий раз, когда меняется состояние интернет-соединения в системе

 

 

Дескрипторы

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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

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

 

 

 

 

В качестве примера можно привести функцию CreateWindowEx, которая возвращает дескриптор окна HWND. Для любых последующих операций с этим окном, таких как DestroyWindow, вам придется использовать этот дескриптор.

ПРИМЕЧАНИЕ

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

Функции файловой системы

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

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

Компания Microsoft предоставляет несколько функций для доступа к файловой системе.

CreateFile. Эта функция используется для открытия существующих и создания новых файлов. Кроме того, она способна открывать каналы, потоки и устройства ввода/вывода. Параметр dwCreationDisposition определяет, будет ли файл открыт или создан заново.

ReadFile и WriteFile. Эти функции используются для чтения и записи файлов. Обе они работают в поточном режиме. При первом вызове ReadFile из файла считывается несколько байтов; при следующем вызове будут прочитаны байты, которые следуют дальше. Например, если открыть файл и вызвать ReadFile размером 40, следующий вызов начнет чтение с 41-го байта. Но, как вы можете догадаться, ни одна из этих функций не позволяет легко перемещаться по файлу.

CreateFileMapping и MapViewOfFile. Отображение файлов часто используется авторами вредоносного ПО, так как оно позволяет легко манипулировать файлами, предварительно загружая их в память. Функция CreateFileMapping загружает файл с диска в RAM. Функция MapViewOfFile возвращает указатель на начальный адрес отображения, который можно использовать для доступа к отображенному файлу. С помощью этих функций и указателя программа может выполнять чтение и запись в любом месте файла. Эта возможность чрезвычайно полезна для определения файловых форматов, так как она позволяет легко переходить по разным адресам в памяти.

 

 

 

 

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  163

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

Специальные файлы

В Windows имеется много типов файлов, с которыми можно работать обычным способом, но доступ к которым невозможен через букву их диска или папку (например, c:\docs). Такие файлы часто используются вредоносными программами.

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

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

Общие файлы

Общие файлы являются подвидом специальных файлов. Их имена начинаются с \serverName\share или \\?\serverName\share. Они позволяют получить доступ к содержимому общей папки, которая хранится в сети. Префикс \\?\ вынуждает систему полностью отключить разбор строк, делая возможным доступ к более длинным именам файлов.

Файлы, доступные через пространства имен

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

ПРИМЕЧАНИЕ

Для просмотра пространства имен NT в вашей системе можно воспользоваться бесплатной утилитой WinObj Object Manager от компании Microsoft.

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