- •Внимание!
- •Об авторах
- •О техническом редакторе
- •О соавторах
- •Предисловие
- •Благодарности
- •Отдельное спасибо
- •Введение
- •Необходимая квалификация
- •Изучение на примерах
- •Структура книги
- •Глава 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 |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Глава 2. Анализ вредоносных программ в виртуальных машинах
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w57 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
сетевому коммутатору VMNet. В нашем примере основная машина все еще подключена к внешней сети, но не к системе, в которой запускается вредонос.
Если для анализа используется несколько виртуальных машин, имеет смысл объединять их в группы: так вы сможете одновременно управлять их питанием или сетевой конфигурацией. Чтобы создать новую группу виртуальных машин, выберите пункт меню File New Team (Файл Создать Группа).
Использование виртуальной машины для анализа безопасности
Чтобы как можно лучше изучить возможности подопытного вредоноса, вы должны симулировать работу всех сетевых служб, на которые он полагается. Например, вредоносные программы часто подключаются к HTTP-серверу для загрузки дополнительного зараженного кода. Чтобы отследить эту активность, вредоносу следует открыть доступ к DNS (domain name system — система доменных имен), с помощью которой он сможет получить IP-адрес сервера, и HTTP-сервер, который будет отвечать на его запросы. В нашей сетевой конфигурации работа служб, к которым будет обращаться вредонос, происходит во второй виртуальной машине. Разнообразные инструменты, помогающие симулировать сетевые службы, будут рассмотрены в следующей главе.
Подключение вредоноса к Интернету
Несмотря на очевидные риски, иногда, чтобы создать более реалистичную среду для анализа, виртуальную машину с вредоносным кодом приходится подключать к Интернету. Основная опасность состоит в том, что ваш компьютер может проявить вредоносную активность и заразить другие узлы, участвуя в распределенной атаке или просто рассылая спам. Еще один риск — автор вредоноса может заметить, что вы подключаетесь к его серверу и пытаетесь анализировать зараженный код.
Давать интернет-доступ вредоносной программе следует лишь после предварительного анализа, который позволяет установить, чем она будет заниматься после установления соединения. Подключение должно выполняться только в случае, если вы готовы пойти на риск.
В VMware самым распространенным способом подключения виртуальной машины к Интернету является сетевой мост, открывающий доступ к тому же сетевому интерфейсу, с которым соединена физическая машина. Еще одним вариантом является режим преобразования сетевых адресов (network address translation, NAT).
Режим NAT позволяет разделять IP-соединение компьютера с Интернетом. Основная система играет роль маршрутизатора и транслирует все запросы виртуальной машины от своего имени, используя свой IP-aдрес. Этот режим может пригодиться, если компьютер подключен к сети, но сетевая конфигурация усложняет или делает невозможным подключение к той же сети адаптера виртуальной машины.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
58 Часть 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 |
|
|
|
|
Например, если в основной системе установлено беспроводное соединение, виртуальную машину можно легко подключить к сети с помощью режима NAT, даже если это соединение защищено технологиями Wi-Fi Protected Access (WPA) или Wired Equivalent Privacy (WEP). Точно так же можно будет обойти параметры доступа и подключиться к сети, которая допускает только определенные сетевые адаптеры.
Подключение и отключение периферийных устройств
Периферийные устройства, такие как CD-ROM или внешние USB-накопители, представляют определенную проблему для виртуальных машин, так как большинство из них может быть подключено либо к основной, либо к виртуальной системе, но не к обеим сразу.
Интерфейс VMware делает виртуальную машину доступной для подключения и отключения внешних устройств. Если подключить к компьютеру USB-устройство, VMware соединит его с виртуальной, а не с основной средой, что может быть нежелательно, учитывая растущую популярность червей, которые распространяются через USB-накопители. Чтобы изменить этот параметр, выберите пункт VM Settings USB Controller (VM Настройки Контроллер USB) и снимите флажок Automatically connect new USB devices (Автоматически подключать USB-устройства). Это предотвратит подключение USB-устройств к виртуальной машине.
Создание снимков
Концепция создания снимков является уникальной для виртуальных машин. VMware позволяет сохранять текущее состояние компьютера и возвращаться к нему позже. Это чем-то похоже на точки восстановления в Windows.
Процесс создания снимков представлен в виде временной шкалы на рис. 2.5. В 8:00 вы создаете снимок машины. Вскоре после этого вы запускаете вредоносную программу. В 10:00 вы возвращаетесь к снимку. Операционная система, программное обеспечение и другие компоненты виртуальной машины вернулись к состоянию, в котором они находились в 8:00, а все, что произошло между 8:00 и 10:00, исчезло, как будто ничего этого не было. Создание снимков — чрезвычайно мощный инструмент. Это своеобразная функция отмены, которая экономит вам время на переустановку ОС.
Рис. 2.5. Временная шкала использования снимка
|
|
|
|
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 |
|
|
|
|
Глава 2. Анализ вредоносных программ в виртуальных машинах
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w59 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Установив ОС и инструменты для анализа безопасности, а также настроив сеть, сделайте снимок. Он будет вашей точкой отсчета. Затем запустите вредоносную программу, проанализируйте ее, сохраните полученные сведения и вернитесь к базовому снимку. Вы можете повторять эту процедуру снова и снова.
Но что, если в процессе анализа вредоноса вам захочется сделать что-то другое со своей виртуальной машиной, не теряя весь прогресс? VMware Snapshot Manager позволяет вернуться к любому снимку в любой момент, независимо от того, сколько снимков было сделано или что произошло с машиной с тех пор. Кроме того, снимки могут расходиться в разные направления. Рассмотрим следующий рабочий процесс.
1.Во время анализа образца 1 вы сдаетесь и решаете попробовать другой образец.
2.Вы делаете снимок анализа образца 1.
3.Вы возвращаетесь к базовому снимку.
4.Начинается анализ образца 2.
5.Вы делаете снимок, чтобы передохнуть.
Вернувшись к виртуальной машине, вы можете открыть любой снимок, сделанный в любой момент, как показано на рис. 2.6. Оба состояния машины никак не зависят друг от друга. Вы можете сохранить столько снимков, сколько поместится на ваш диск.
Рис. 2.6. VMware Snapshot Manager
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
60 Часть 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 |
|
|
|
|
Один из недостатков использования снимков заключается в том, что при возврате к более раннему состоянию вся проделанная работа исчезает. Но, прежде чем загружать снимок, вы можете воспользоваться функцией перетаскивания и перенести любые рабочие файлы в основную систему. Для работы этой функции в гостевой ОС должен быть установлен пакет VMware Tools. Это самый простой способ переноса файлов.
Еще одним вариантом является перемещение данных с помощью общих папок. Общая папка доступна как из основной, так и из гостевой ОС и подобна общей папке Windows.
Риски при использовании VMware для анализа безопасности
Некоторое вредоносное ПО может заметить, что оно выполняется внутри виртуальной машины: существует множество методик, созданных специально для этого. VMware не считает это уязвимостью и не предпринимает никаких отдельных шагов, чтобы избежать обнаружения. Однако некоторые вредоносы способны менять свое поведение в зависимости от того, в какой среде они запущены — в реальной или виртуальной. Это делается для того, чтобы затруднить их анализ (более подробно такие методики, направленные против VMware, рассматриваются в главе 17).
Как в любом программном обеспечении, в VMware иногда встречаются уязвимости. Их могут использовать для нарушения работы основной ОС или даже для запуска в ней произвольного кода. И хотя в открытом доступе существует всего несколько инструментов и хорошо задокументированных методик для проведения атак на VMware, в подсистеме общих папок уже были обнаружены уязвимости, а для взлома функции перетаскивания были выпущены специальные утилиты. Поэтому следите за тем, чтобы ваша версия VMware имела все последние заплатки.
Но даже после принятия всех мыслимых мер предосторожности при анализе вредоносных программ всегда остается определенный риск. Даже если вы выполняете анализ в виртуальной машине, не используйте для этого компьютеры, которые играют важную роль или хранят конфиденциальные данные.
Запись/воспроизведение работы компьютера
Одной из самых интересных возможностей VMware является запись/воспроизведение. VMware Workstation может записать все происходящее и затем воспроизвести. Гарантируется стопроцентная точность: во время воспроизведения выполняется каждая инструкция, выполнявшаяся при записи. Даже если вы столкнулись с состоянием гонки, которое возникает в одном случае из миллиона, оно тоже будет записано.