- •Внимание!
- •Об авторах
- •О техническом редакторе
- •О соавторах
- •Предисловие
- •Благодарности
- •Отдельное спасибо
- •Введение
- •Необходимая квалификация
- •Изучение на примерах
- •Структура книги
- •Глава 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 |
|
|
|||
w |
|
|
to |
|
|
74 Часть 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 |
|
|
|
|
после запуска процесса, вы можете сравнить список DLL в Process Explorer с перечнем функций импорта, представленных в программе Dependency Walker.
Анализ зараженных документов
С помощью Process Explorer можно также анализировать зараженные документы, такие как PDF и Word. Чтобы быстро определить, является ли документ вредоносным, откройте его параллельно с Process Explorer. Вам должны быть видны все процессы, которые при этом запускаются, и вы сможете обнаружить вредоносный файл на диске, используя вкладку Image (Образ) в окне Properties (Свойства).
ПРИМЕЧАНИЕ
Открытие зараженных документов при использовании средств мониторинга может позволить быстро определить их вредоносность, но, чтобы добиться успеха, необходимо задействовать уязвимый вариант программы для просмотра документов. На практике лучше всего прибегнуть к старой версии без последних заплаток, чтобы вредонос мог воспользоваться уязвимостью. Проще всего этого достичь с помощью нескольких снимков виртуальной машины, в каждом из которых будет отдельная старая версия программы для просмотра, например Adobe Reader или Microsoft Word.
Сравнение снимков реестра с помощью Regshot
Regshot (рис. 3.8) — это открытый инстру- |
|
мент, который позволяет сравнить два сним- |
|
ка реестра. |
|
Чтобы использовать Regshot для анали- |
|
за безопасности, сделайте начальный сни- |
|
мок, нажав кнопку 1st Shot (1-й снимок), |
|
а затем запустите вредоносную программу |
|
и подождите, пока она не закончит вносить |
|
изменения в систему. После этого нажмите |
|
кнопку 2nd Shot (2-й снимок), чтобы сделать |
|
второй снимок. В конце нажмите кнопку |
|
Compare (Сравнить), чтобы сравнить два |
|
снимка. |
|
В листинге 3.1 приводится выдержка из |
|
результатов, сгенерированных утилитой |
|
Regshot во время анализа вредоноса. Сним- |
|
ки реестра были сделаны до и после работы |
|
шпионской программы ckr.exe. |
Рис. 3.8. Окно Regshot |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
w |
|
|
to |
|
|
|
|
|
Глава 3. Основы динамического анализа |
||
w Click |
|
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
Листинг 3.1. Сравнение результатов работы утилиты Regshot
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w75 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Regshot
Comments:
Datetime: <date>
Computer: MALWAREANALYSIS
Username: username
----------------------------------
Keys added: 0
----------------------------------
----------------------------------
Values added:3
----------------------------------
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ckr:C:\WINDOWS\system32\ckr.exe
...
...
----------------------------------
Values modified:2
----------------------------------
HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed: 00 43 7C 25 9C 68 DE 59 C6 C8 9D C3 1D E6 DC 87 1C 3A C4 E4 D9 0A B1 BA C1 FB 80 EB 83 25 74 C4 C5 E2 2F CE 4E E8 AC C8 49 E8 E8 10 3F 13 F6 A1 72 92 28 8A 01 3A 16 52 86 36 12 3C C7 EB 5F 99 19 1D 80 8C 8E BD 58 3A DB 18 06 3D 14 8F 22 A4
...
----------------------------------
Total changes:5
----------------------------------
Процесс ckr.exe использует ключ HKLM\SOFTWARE\Microsoft\Windows\Cur rentVersion\Run для постоянного хранения данных . Результаты обычно содержат некоторое количество бессмыслицы , поскольку в реестре постоянно обновляется начальное значение генератора случайных чисел.
Как и в случае с procmon, анализ этих результатов заключается в терпеливом сборе крупиц полезной информации.
Симуляция сети
Часто вредоносному ПО удается прорваться вовне и связаться с управляющим сервером (подробнее об этом — в главе 14 «Сетевые сигнатуры, нацеленные на вредоносное ПО»). Вы можете создать поддельную сеть и быстро получить сетевые индикаторы, не подключаясь при этом к Интернету. Эти индикаторы могут включать в себя имена DNS, IP-адреса и сигнатуры пакетов.
Чтобы успешно симулировать сеть, вы должны не дать вредоносу понять, что он выполняется в виртуализованной среде (настройка виртуальных сетей в VMware обсуждалась в главе 2). С инструментами, приведенными здесь, и с надежной конфигурацией сети в виртуальной машине вы сможете значительно повысить свои шансы на успех.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
76 Часть I • Базовый анализ |
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
Использование ApateDNS
|
|
|
|
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 |
|
|
|
|
ApateDNS, бесплатная утилита от компании Mandiant (www.mandiant.com/products/ research/mandiant_apatedns/download), — это самый быстрый способ просмотреть DNSзапросы, выполненные вредоносом. ApateDNS подделывает DNS-ответы для IPадресов, относящихся к определенному пользователю, прослушивая при этом локальный UDP-порт под номером 53. Эта утилита ловит DNS-запросы и отправляет DNS-ответы на IP-адреса, которые задаете вы. Результаты всех полученных запросов могут выводиться в одном из двух форматов: шестнадцатеричном и ASCII.
Перед использованием ApateDNS укажите IP-адрес, который вы хотите возвращать в своих ответах , и выберите интерфейс . После этого нажмите кнопку Start Server (Запустить сервер): этим вы автоматически запустите локальный DNS-сервер
ипропишете его в конфигурации системы. Затем запустите вредоносную программу
ипроследите за DNS-запросами, появляющимися в окне ApateDNS. К примеру, на рис. 3.9 перенаправляются DNS-запросы, сделанные вредоносом под названием RShell. В 13:22:08 запрашивается IP-адрес домена evil.malwar3.com.
Рис. 3.9. ApateDNS отвечает на запросы для домена evil.malwar3.com
В примере, показанном выше, мы перенаправляем DNS-запросы на адрес 127.0.0.1 (localhost), но вы можете выбрать внешний адрес, который указывает на веб-сервер, запущенный в Linux внутри виртуальной машины. Прежде чем запускать сервер, убе дитесь в том, что вы ввели правильный адрес. По умолчанию ApateDNS вставляет в DNS-ответы текущий шлюз или адрес, указанный в системных настройках DNS.
Вы можете отследить дополнительные домены, к которым обращается вредоносный код, воспользовавшись параметром NXDOMAIN . Вредонос часто перебирает имеющийся у него список доменов, если первое или второе доменное имя не было найдено. Параметр NXDOMAIN может его обмануть и получить дополнительные домены, хранящиеся в его конфигурации.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
w |
|
|
to |
|
|
|
|
|
Глава 3. Основы динамического анализа |
||
w Click |
|
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
Мониторинг сети с помощью Netcat
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w77 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Netcat иногда называют «швейцарским ножом для TCP/IP». Эту утилиту можно использовать как для входящих, так и для исходящих соединений, а также для сканирования и пробрасывания портов, создания туннелей, проксирования и многого другого. В прослушивающем режиме программа Netcat ведет себя как сервер, а в режиме подключения — как клиент. Она берет данные из стандартного ввода, предназначенного для передачи по сети, и отображает их на экране посредством стандартного вывода.
Посмотрим, как с помощью Netcat проанализировать вредоносную программу RShell, представленную на рис. 3.9. Воспользовавшись ApateDNS, мы перенаправляем DNS-запросы к домену evil.malwar3.com на локальный компьютер. Если предположить, что вредонос общается с внешним миром через порт 80 (типичная ситуация), мы можем применить Netcat для прослушивания соединений до запуска RShell.
Вредоносные программы часто используют порты 80 или 443 (HTTP и соответственно HTTPS), поскольку они обычно не блокируются и не отслеживаются на предмет исходящего трафика. Пример показан в листинге 3.2.
Листинг 3.2. Пример прослушивания порта 80 с помощью Netcat
C:\> nc --l --p 80
POST /cq/frame.htm HTTP/1.1 Host: www.google.com
User-Agent: Mozilla/5.0 (Windows; Windows NT 5.1; TWFsd2FyZUh1bnRlcg==; rv:1.38) Accept: text/html, application
Accept-Language: en-US, en:q= Accept-Encoding: gzip, deflate Keep-Alive: 300
Content-Type: application/x-form-urlencoded Content-Length
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
Z:\Malware>
Команда Netcat (nc) выводит параметры, необходимые для прослушивания порта. Флаг -l означает «слушать», а -p (с номером в конце) определяет номер нужного порта. Вредонос подключается к нашему экземпляру Netcat, потому что мы используем ApateDNS для перенаправления. Программа RShell является командной оболочкой с обратным входом , но она не дает сразу выполнять команды. Сначала через сетевое соединение проходит HTTP-запрос типа POST, направленный по адресу www.google.com ; вероятно, это поддельные данные, которые вставляются для маскировки, так как сетевые аналитики часто смотрят только на начало сессии.