- •Внимание!
- •Об авторах
- •О техническом редакторе
- •О соавторах
- •Предисловие
- •Благодарности
- •Отдельное спасибо
- •Введение
- •Необходимая квалификация
- •Изучение на примерах
- •Структура книги
- •Глава 0. Анализ вредоносных программ для начинающих
- •Цель анализа вредоносных программ
- •Методики анализа вредоносного ПО
- •Общие правила анализа вредоносного ПО
- •Глава 1. Основные статические методики
- •Сканирование антивирусом: первый шаг
- •Хеширование: отпечатки пальцев злоумышленника
- •Поиск строк
- •Упакованное и обфусцированное вредоносное ПО
- •Формат переносимых исполняемых файлов
- •Компонуемые библиотеки и функции
- •Статический анализ на практике
- •Заголовки и разделы PE-файла
- •Итоги главы
- •Глава 2. Анализ вредоносных программ в виртуальных машинах
- •Структура виртуальной машины
- •Запуск виртуальной машины для анализа вредоносного ПО
- •Использование виртуальной машины для анализа безопасности
- •Риски при использовании VMware для анализа безопасности
- •Запись/воспроизведение работы компьютера
- •Итоги главы
- •Глава 3. Основы динамического анализа
- •Песочницы: решение на скорую руку
- •Запуск вредоносных программ
- •Мониторинг с помощью Process Monitor
- •Сравнение снимков реестра с помощью Regshot
- •Симуляция сети
- •Перехват пакетов с помощью Wireshark
- •Использование INetSim
- •Применение основных инструментов для динамического анализа
- •Итоги главы
- •Уровни абстракции
- •Архитектура x86
- •Итоги главы
- •Глава 5. IDA Pro
- •Загрузка исполняемого файла
- •Интерфейс IDA Pro
- •Использование перекрестных ссылок
- •Анализ функций
- •Схематическое представление
- •Повышение эффективности дизассемблирования
- •Плагины к IDA Pro
- •Итоги главы
- •Глава 6. Распознавание конструкций языка C в ассемблере
- •Переменные: локальные и глобальные
- •Дизассемблирование арифметических операций
- •Распознавание выражений if
- •Распознавание циклов
- •Соглашения, касающиеся вызова функций
- •Анализ выражений switch
- •Дизассемблирование массивов
- •Распознавание структур
- •Анализ обхода связного списка
- •Итоги главы
- •Глава 7. Анализ вредоносных программ для Windows
- •Windows API
- •Реестр Windows
- •API для работы с сетью
- •Отслеживание запущенной вредоносной программы
- •Сравнение режимов ядра и пользователя
- •Native API
- •Итоги главы
- •Глава 8. Отладка
- •Сравнение отладки на уровне исходного и дизассемблированного кода
- •Отладка на уровне ядра и пользователя
- •Использование отладчика
- •Исключения
- •Управление выполнением с помощью отладчика
- •Изменение хода выполнения программы на практике
- •Итоги главы
- •Глава 9. OllyDbg
- •Загрузка вредоносного ПО
- •Пользовательский интерфейс OllyDbg
- •Карта памяти
- •Просмотр потоков и стеков
- •Выполнение кода
- •Точки останова
- •Трассировка
- •Обработка исключений
- •Редактирование кода
- •Анализ кода командной оболочки
- •Вспомогательные возможности
- •Подключаемые модули
- •Отладка с использованием скриптов
- •Итоги главы
- •Драйверы и код ядра
- •Подготовка к отладке ядра
- •Использование WinDbg
- •Отладочные символы Microsoft
- •Отладка ядра на практике
- •Руткиты
- •Загрузка драйверов
- •Итоги главы
- •Глава 11. Поведение вредоносных программ
- •Программы для загрузки и запуска ПО
- •Бэкдоры
- •Похищение учетных данных
- •Механизм постоянного присутствия
- •Повышение привилегий
- •Заметая следы: руткиты, работающие в пользовательском режиме
- •Итоги главы
- •Глава 12. Скрытый запуск вредоносного ПО
- •Загрузчики
- •Внедрение в процесс
- •Подмена процесса
- •Внедрение перехватчиков
- •Detours
- •Внедрение асинхронных процедур
- •Итоги главы
- •Глава 13. Кодирование данных
- •Простые шифры
- •Распространенные криптографические алгоритмы
- •Нестандартное кодирование
- •Декодирование
- •Итоги главы
- •Глава 14. Сетевые сигнатуры, нацеленные на вредоносное ПО
- •Сетевые контрмеры
- •Безопасное расследование вредоносной деятельности в Интернете
- •Контрмеры, основанные на сетевом трафике
- •Углубленный анализ
- •Сочетание динамических и статических методик анализа
- •Понимание психологии злоумышленника
- •Итоги главы
- •Искажение алгоритмов дизассемблирования
- •Срыв анализа слоя стека
- •Итоги главы
- •Глава 16. Антиотладка
- •Обнаружение отладчика в Windows
- •Распознавание поведения отладчика
- •Искажение работы отладчика
- •Уязвимости отладчиков
- •Итоги главы
- •Глава 17. Методы противодействия виртуальным машинам
- •Признаки присутствия VMware
- •Уязвимые инструкции
- •Изменение настроек
- •Побег из виртуальной машины
- •Итоги главы
- •Глава 18. Упаковщики и распаковка
- •Анатомия упаковщика
- •Распознавание упакованных программ
- •Способы распаковки
- •Автоматизированная распаковка
- •Ручная распаковка
- •Советы и приемы для работы с распространенными упаковщиками
- •Анализ без полной распаковки
- •Итоги главы
- •Глава 19. Анализ кода командной оболочки
- •Загрузка кода командной оболочки для анализа
- •Позиционно-независимый код
- •Определение адреса выполнения
- •Поиск символов вручную
- •Окончательная версия программы Hello World
- •Кодировки кода командной оболочки
- •NOP-цепочки
- •Поиск кода командной оболочки
- •Итоги главы
- •Глава 20. Анализ кода на C++
- •Объектно-ориентированное программирование
- •Обычные и виртуальные функции
- •Создание и уничтожение объектов
- •Итоги главы
- •Какой смысл в 64-битном вредоносном ПО?
- •Особенности архитектуры x64
- •Признаки вредоносного кода на платформе x64
- •Итоги главы
- •Приложения
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
3 |
|||
|
|
|
|
|
|
.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 |
|
|
|
|
Динамический анализ выполняется после запуска вредоносной программы. Это второй этап исследования вредоносного кода, и его обычно проводят после того, как базовый статический анализ зашел в тупик — либо из-за обфускации/упаковки, либо ввиду исчерпания имеющихся статических методик. Динамический подход может подразумевать как мониторинг самого вредоноса, так и исследование системы после его выполнения.
В отличие от статического динамический анализ позволяет наблюдать за реальным поведением вредоносной программы, поскольку наличие, скажем, строки с действием внутри двоичного файла вовсе не означает, что это действие будет выполнено. Динамический анализ также является эффективным способом определения функциональности вредоноса. Например, если мы имеем дело с кейлогером, динамические методики позволят нам найти его журнальный файл, исследовать записи, которые в нем хранятся, узнать, куда он отправляет информацию, и т. д. Получить такие сведения с помощью статического подхода было бы намного сложнее.
Динамические методики являются чрезвычайно действенными. В то же время они могут подвергнуть риску ваши сеть и систему, поэтому их следует применять только после завершения базового статического анализа. Динамический подход также имеет ограничения из-за того, что при работе вредоносного кода могут выполниться не все программные ответвления. Например, это может быть утилита командной строки, принимающая аргументы, каждый из которых выполняет определенную функцию; если заранее не знать поддерживаемые параметры, мы не сможем динамически исследовать все возможности программы. Лучше всего в такой ситуации применить более сложные динамические или статические методики, которые позволят понять, как заставить вредоносный код выполнить все свои функции. Эта глава посвящена базовым методикам динамического анализа.
Песочницы: решение на скорую руку
Для проведения базового динамического анализа доступно несколько универсальных программных продуктов, самые популярные из которых используют технологию песочницы. Песочница — это механизм безопасности, предназначенный для выполнения подозрительных программ в защищенной среде без риска нанести вред
|
|
|
|
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 |
|
|
|
|
Глава 3. Основы динамического анализа
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w63 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
«реальной» системе. К песочницам относят виртуализованные среды, которые часто тем или иным образом эмулируют сетевые службы, обеспечивая нормальную работу исследуемого ПО.
Использование песочниц
Многие песочницы, такие как Norman SandBox, GFI Sandbox, Anubis, Joe Sandbox, ThreatExpert, BitBlaze и Comodo Instant Malware Analysis, являются бесплатными. В настоящее время среди экспертов по компьютерной безопасности наибольшей популярностью пользуются Norman SandBox и GFI Sandbox (бывший CWSandbox).
Эти песочницы предоставляют простые для понимания отчеты и отлично подходят для начального анализа, правда, только если вы готовы загрузить программу на соответствующий сайт. Хотя песочницы автоматизированы, вы все же можете не разрешить загрузку на публичный ресурс вредоносов, которые содержат информацию о вашей компании.
ПРИМЕЧАНИЕ
Вы можете приобрести песочницу для индивидуального использования, но это очень дорого. Ктому же все, что они позволяют найти, можно обнаружить и с помощью базовых методик, рассматриваемых в этой главе. Конечно, если вам необходимо быстро проанализировать большое количество вредоносного кода, покупка программного обеспечения для создания песочниц может быть оправданной.
Большинство песочниц работают схожим образом, поэтому мы сосредоточим наше внимание на одном примере, GFI Sandbox. На рис. 3.1 показано содержание отчета в формате PDF, который этот пакет генерирует автоматически. Отчет включает в себя множество подробностей о вредоносе, таких как предпринимаемая им сетевая активность, результаты сканирования утилитой VirusTotal и т. д.
Отчет, сгенерированный GFI Sandbox, может содержать разное количество разделов в зависимости от результатов анализа. На рис. 3.1 показано шесть разделов.
Раздел Analysis Summary (Краткий анализ) содержит результаты статического исследования и краткие итоги динамического анализа.
В разделе File Activity (Файловая активность) перечисляются файлы, открытые, созданные или удаленные каждым процессом, на который повлияла вредоносная программа.
Раздел Created Mutexes (Созданные мьютексы) перечисляет мьютексы, созданные вредоносом.
В разделе Registry Activity (Действия с реестром) указаны изменения, внесенные в реестр.
Раздел Network Activity (Сетевая активность) описывает сетевую активность вредоносной программы, включая открытие и прослушивание портов или выполнение DNS-запросов.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
64 Часть I • Базовый анализ |
||||
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 |
|
|
|
|
Рис. 3.1. Результаты анализа файла win32XYZ.exe с помощью GFI Sandbox
В разделе VirusTotal Results (Отчет VirusTotal) содержатся результаты сканирования вредоносного кода программой VirusTotal.
Недостатки песочниц
Песочницы для анализа вредоносного ПО имеют несколько существенных недостатков. Так, песочница выполняет вредоносную программу как есть, без аргументов командной строки. Поэтому код, который требует этих аргументов, не будет выполнен при их отсутствии. Кроме того, если для запуска бэкдора исследуемая программа должна получить управляющую инструкцию, этот бэкдор не будет запущен в песочнице.
Песочница может записать не все события, если было выбрано слишком короткое время ожидания. Например, вы можете пропустить вредоносную активность, если перед выполнением каких-либо действий программа засыпает на сутки (большинство песочниц перехватывают функцию Sleep и минимизируют время сна, однако существуют и другие способы отложить работу, и все они не могут быть учтены).
Есть и другие потенциальные недостатки.
Многие вредоносные программы способны определить тот факт, что они выполняются в виртуальной машине. В таких случаях они могут прервать или изменить свою работу. Не все песочницы это учитывают.
Отдельное вредоносное ПО требует наличия в системе определенных ключей реестра или файлов, которых может не оказаться в песочнице. Иногда данные
|
|
|
|
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 |
|
|
|
|
Глава 3. Основы динамического анализа
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w65 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
должны быть реальными, например системные команды или ключи шифрования.
Если вредоносный код заключен в DLL, некоторые экспортные функции не будут вызваны надлежащим образом, поскольку по сравнению с исполняемым файлом запустить динамическую библиотеку не так просто.
Песочница может иметь неподходящую среду выполнения. Например, вредонос может работать в Windows 7, но не в Windows XP.
Песочница не может вам сказать, чем именно занимается вредонос. Она может сообщить о его базовых функциях, но неспособна идентифицировать, к примеру, нестандартную утилиту для копирования хешей из диспетчера учетных записей безопасности (Security Accounts Manager, SAM) или зашифрованный бэкдор с возможностями кейлогера. С этим вам придется разбираться самостоятельно.
Запуск вредоносных программ
Базовые методики динамического анализа окажутся бесполезными, если вам не удастся запустить вредоносное ПО. Здесь мы рассмотрим запуск большинства вредоносов, с которыми вы будете сталкиваться (EXE и DLL). И хотя обычно самым простым способом запуска является двойной щелчок на исполняемом файле или ввод его имени в командной строке, с библиотеками все может оказаться сложнее, поскольку Windows не выполняет их автоматически.
Посмотрим, как запустить DLL-файл, чтобы успешно провести динамический анализ.
Во всех современных версиях Windows присутствует программа rundll32.exe. Она предоставляет контейнер для выполнения DLL и имеет следующий синтаксис:
C:\>rundll32.exe имяDLL, экспорт
Аргумент экспорт должен быть именем или порядковым номером функции, выбранной из таблицы экспорта DLL. Как вы помните из главы 1, для просмотра этой таблицы можно использовать такие инструменты, как PEview или PE Explorer. Например, файл rip.dll имеет такой экспорт:
Install
Uninstall
Install может быть той функцией, которая запускает rip.dll, поэтому выполним следующую команду:
C:\>rundll32.exe rip.dll, Install
У вредоноса также могут быть функции, которые экспортируются только по порядковому номеру (в главе 1 мы подробно на этом останавливались). В таком случае функцию тоже можно вызвать с помощью rundll32.exe, воспользовавшись приведенной ниже командой. Перед порядковым номером (в данном случае 5) нужно указать символ #:
C:\>rundll32.exe xyzzy.dll, #5