- •Внимание!
- •Об авторах
- •О техническом редакторе
- •О соавторах
- •Предисловие
- •Благодарности
- •Отдельное спасибо
- •Введение
- •Необходимая квалификация
- •Изучение на примерах
- •Структура книги
- •Глава 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 |
|
|
. |
|
|
|
|
|
17 |
||||
|
|
|
|
|
|
.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, далее мы сосредоточимся именно на этом программном продукте. Будут рассмотрены самые популярные методы, а также способы защиты от них, основанные на изменении некоторых настроек, удалении ПО и редактировании исполняемого файла.
Признаки присутствия VMware
Среда VMware оставляет множество следов в системе, особенно после установки VMware Tools. Эти следы присутствуют в файловой системе, реестре и списке процессов, чем может воспользоваться злоумышленник.
Например, на рис. 17.1 показан список процессов в стандартном образе VMware после установки VMware Tools. Обратите внимание на три процесса: VMwareService.exe,
|
|
|
|
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 |
|
|
|||
Глава 17. Методы противодействия виртуальным машинам 401 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
VMwareTray.exe и VMwareUser.exe. Вредонос может легко их выявить, выполнив поиск по строке VMware.
Рис. 17.1. Список процессов в образе VMware с запущенным пакетом VMware Tools
Процесс VMwareService.exe представляет собой службу VMware Tools Service и является потомком процесса services.exe. Его можно найти в реестре среди установленных в системе служб или в списке, который можно получить с помощью следующей команды:
C:\> net start | findstr VMware
VMware Physical Disk Helper Service
VMware Tools Service
Следы можно найти как в реестре, так и в установочном каталоге C:\Program Files\VMware\VMware Tools. Быстрый поиск в реестре виртуальной машины по слову VMware вернет ключи, представленные ниже. Они содержат сведения о виртуальном жестком диске, адаптерах и мыши.
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\ Logical Unit Id 0]
"Identifier"="VMware Virtual IDE Hard Drive" "Type"="DiskPeripheral"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Reinstall\0000] "DeviceDesc"="VMware Accelerated AMD PCNet Adapter"
"DisplayName"="VMware Accelerated AMD PCNet Adapter"
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
402 Часть V • Противодействие обратному проектированию |
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
"Mfg"="VMware, Inc."
"ProviderName"="VMware, Inc."
|
|
|
|
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\SYSTEM\ControlSet001\Control\Class\{4D36E96F-E325-11CE-BFC1- 08002BE10318}\0000]
"LocationInformationOverride"="plugged into PS/2 mouse port" "InfPath"="oem13.inf"
"InfSection"="VMMouse" "ProviderName"="VMware, Inc.
Как уже говорилось в главе 2, есть несколько способов подключения виртуальной машины к сети, и все они позволяют использовать отдельный виртуальный сетевой интерфейс (NIC). Поскольку программе VMware пригодится виртуализировать NIC, она должна создать MAC-адрес для виртуальной машины, что, в зависимости от конфигурации, может выдать факт ее использования.
Первые три байта MAC-адреса обычно принадлежат изготовителю адаптера, и значение 00:0C:29 закреплено за VMware. Остальные байты часто меняются от версии к версии, но автору вредоносного ПО достаточно проверить только первые три.
Вредонос может обнаружить VMware и по другому оборудованию, такому как материнская плата. Если вы видите в зараженном коде проверку версии аппаратного обеспечения, это может быть попыткой обнаружения VMware. Ищите код, который проверяет MAC-адреса и версии устройств, и модифицируйте его таким образом, чтобы избежать этих проверок.
От самых базовых признаков наличия VMware можно избавиться, если удалить из системы VMware Tools или же остановить службу VMware Tools Service, используя следующую команду:
net stop "VMware Tools Service"
Вы также можете предотвратить поиск признаков. Например, если во вредоносном коде содержатся строки, связанные с VMware (такие как net start | findstr VMware, VMMouse, VMwareTray.exe или VMware Virtual IDE Hard Drive), можете быть уверены, что он пытается обнаружить виртуальную машину. IDA Pro позволяет легко найти такие участки, используя ссылки на строки, и избежать обнаружения, обеспечив тем самым корректную работу вредоносной программы.
Защита от поиска следов VMware
Противодействие вредоносному ПО, которое ищет признаки наличия VMware, часто представляет собой простую двухэтапную процедуру: обнаружение проверки и ее модификация. Представьте, что при сканировании файла vmt.exe с помощью утилиты strings была найдена строка "VMwareTray.exe" и перекрестная ссылка на нее. Следуя по этой ссылке, мы переходим к адресу 0x401098, как показано в дизассемблированном коде в листинге 17.1 .
|
|
|
|
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 |
|
|
|||
Глава 17. Методы противодействия виртуальным машинам 403 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Листинг 17.1. Дизассемблированный фрагмент vmt.exe содержит код для выявления следов VMware
0040102D |
call |
ds:CreateToolhelp32Snapshot |
|
00401033 |
lea ecx, |
[ebp+processentry32] |
|
00401039 |
mov ebx, |
eax |
|
0040103B |
push ecx |
; lppe |
|
0040103C |
push ebx |
; hSnapshot |
|
0040103D |
mov [ebp+processentry32.dwSize], 22Ch |
||
00401047 |
call ds:Process32FirstW |
||
0040104D |
mov esi, |
ds:WideCharToMultiByte |
|
00401053 |
mov edi, |
ds:strncmp |
|
00401059 |
lea esp, |
[esp+0] |
|
00401060 |
loc_401060: |
|
; CODE XREF: sub_401000+B7j |
00401060 |
push |
0 |
; lpUsedDefaultChar |
00401062 |
push |
0 |
; lpDefaultChar |
00401064 |
push |
104h |
; cbMultiByte |
00401069 |
lea edx, |
[ebp+Str1] |
|
0040106F |
push edx |
; lpMultiByteStr |
|
00401070 |
push 0FFFFFFFFh ; cchWideChar |
||
00401072 |
lea eax, |
[ebp+processentry32.szExeFile] |
|
00401078 |
push eax |
; lpWideCharStr |
|
00401079 |
push |
0 |
; dwFlags |
0040107B |
push |
3 |
; CodePage |
0040107D |
call |
esi |
; WideCharToMultiByte |
0040107F |
lea eax, |
[ebp+Str1] |
|
00401085 |
lea edx, |
[eax+1] |
|
00401088 |
loc_401088: |
|
; CODE XREF: sub_401000+8Dj |
00401088 |
mov cl, [eax] |
||
0040108A |
inc eax |
|
|
0040108B |
test cl, |
cl |
|
0040108D |
jnz short loc_401088 |
||
0040108F |
sub eax, |
edx |
|
00401091 |
push eax |
; MaxCount |
|
00401092 |
lea ecx, |
[ebp+Str1] |
|
00401098 |
push offset Str2 ; "VMwareTray.exe" |
||
0040109D |
push ecx |
; Str1 |
|
0040109E |
call edi |
; strncmp |
|
004010A0 |
add esp, |
0Ch |
|
004010A3 |
test eax, eax |
||
004010A5 |
jz short |
loc_4010C0 |
|
004010A7 |
lea edx, |
[ebp+processentry32] |
|
004010AD |
push edx |
; lppe |
|
004010AE |
push ebx |
; hSnapshot |
|
004010AF |
call ds:Process32NextW |
||
004010B5 |
test eax, eax |
||
004010B7 |
jnz short loc_401060 |
||
... |
|
|
|
004010C0 |
loc_4010C0: |
|
; CODE XREF: sub_401000+A5j |
004010C0 |
push 0 |
; Code |
|
004010C2 |
call ds:exit |