- •Внимание!
- •Об авторах
- •О техническом редакторе
- •О соавторах
- •Предисловие
- •Благодарности
- •Отдельное спасибо
- •Введение
- •Необходимая квалификация
- •Изучение на примерах
- •Структура книги
- •Глава 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 |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
Глава 17. Методы противодействия виртуальным машинам 411 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Пятая и шестая проверки используют бэкдоры на основе портов ввода/вывода 0xa и соответственно 0x14.
Седьмая проверка основана на ошибке в старых версиях VMware, которые работают в режиме эмуляции.
Выше, на рис. 17.2, представлена дизассемблированная версия четвертой проверки в ScoopyNG.
Изменение настроек
В этой главе мы обсудили множество способов предотвращения обнаружения VMware, включая модификацию кода, удаление VMware Tools, изменение настроек VMware и использование многопроцессорных компьютеров.
Помимо этого, VMware поддерживает целый ряд возможностей, которые могут помочь нивелировать методики анти-ВМ. Например, если поместить следующие параметры в .vmx-файл виртуальной машины, это сделает ее менее заметной.
Листинг 17.5. Незадокументированные параметры .vmx-файла, направленные против методик анти-ВМ
isolation.tools.getPtrLocation.disable = "TRUE" isolation.tools.setPtrLocation.disable = "TRUE" isolation.tools.setVersion.disable = "TRUE" isolation.tools.getVersion.disable = "TRUE" monitor_control.disable_directexec = "TRUE" monitor_control.disable_chksimd = "TRUE" monitor_control.disable_ntreloc = "TRUE" monitor_control.disable_selfmod = "TRUE" monitor_control.disable_reloc = "TRUE" monitor_control.disable_btinout = "TRUE" monitor_control.disable_btmemspace = "TRUE" monitor_control.disable_btpriv = "TRUE" monitor_control.disable_btseg = "TRUE"
Параметр directexec делает так, что код в пользовательском режиме не выполняется непосредственно на процессоре, а эмулируется, — это нивелирует некоторые методы обнаружения виртуальных машин. Первые четыре параметра используются управляющими командами VMware, чтобы пакет VMware Tools, запущенный в гостевой среде, не мог получить информацию об основной системе.
При использовании многопроцессорного компьютера эти изменения позволят защититься от всех проверок в ScoopyNG, за исключением шестой. Однако мы не рекомендуем применять эти параметры в VMware, поскольку они делают бесполезным пакет инструментов VMware Tools и могут серьезно ухудшить производительность вашей виртуальной машины. Используйте их только в случае, когда ни один из других подходов не принес результата. Этот способ был упомянут лишь для полноты изложения: он позволяет уберечься от десяти из сотен возможных приемов обнаружения VMware, и редактировать .vmx-файл только для этого — все равно что стрелять из пушки по воробьям.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
412 Часть V • Противодействие обратному проектированию |
||||
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 есть уязвимости, которые позволяют вывести из строя основную ОС или даже выполнить в ней код.
Многие известные уязвимости были найдены в коде VMware Tools, отвечающем за общие папки и функцию перетаскивания. Одна хорошо изученная ошибка, основанная на общих папках, подвергает риску основную операционную систему, давая возможность выполнить запись в любой ее файл из гостевой среды. И хотя этот конкретный подход не работает в текущей версии VMware, в коде общих папок было обнаружено несколько других недостатков. Отключите эту функцию в настройках виртуальной машины, чтобы избежать подобного рода атак.
Еще одна хорошо изученная уязвимость VMware была найдена в функции отображения виртуальной машины. Эксплойт для нее известен под названием Cloudburst: он находится в свободном доступе и является частью пакета Canvas, предназначенного для проверки на проникновение (эта уязвимость тоже была исправлена в VMware).
Для эксплуатации VMware в уже зараженной системе существуют публично доступные инструменты, такие как VMchat, VMcat, VMftp, VMdrag-n-hack и VMdrag- n-sploit. Реальную опасность они представляют только в случае, если вы можете выбраться из виртуальной машины; не беспокойтесь о них, если они работают в гостевой системе.
Итоги главы
В этой главе вы познакомились с наиболее популярными методиками противодействия виртуальным машинам. С их помощью авторы вредоносного ПО пытаются замедлить процесс анализа, поэтому вы должны уметь их распознавать. Мы подробно описали эти методы, чтобы вы могли обнаружить их при дизассемблировании или отладке. Мы также рассмотрели способы борьбы с ними, которые не требуют модификации вредоносных файлов на ассемблерном уровне.
При выполнении базового динамического анализа всегда следует использовать виртуальную машину. Но если изучаемый вами вредонос не запускается, попробуйте воспользоваться другой виртуальной средой без VMware Tools, прежде чем искать в его коде признаки обнаружения VMware. Вы также можете прибегнуть к другим средствам виртуализации (VirtualBox или Parallels) или даже запустить вредоносный файл на реальном компьютере.
Как и в случае с антиотладкой, методики анти-ВМ можно распознать в ходе медленной отладки процесса, руководствуясь здравым смыслом. Например, если вы видите, что код преждевременно завершает свою работу при условном переходе, это может быть результатом противодействия виртуальной машине. Как всегда, помните о подобного рода проблемах и заглядывайте в код, чтобы определиться с дальнейшими действиями.
|
|
|
|
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. Методы противодействия виртуальным машинам 413 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Лабораторные работы
Лабораторная работа 17.1
Проанализируйте внутри VMware зараженный файл Lab17-01.exe. Это тот же вредонос, что и Lab07-01.exe, но с добавлением приемов анти-ВМ.
ПРИМЕЧАНИЕ
Приемы анти-ВМ из этой лабораторной могут не работать в вашей среде.
Вопросы
1.Какие методики анти-ВМ применяются в этом вредоносе?
2.Если у вас есть коммерческая версия IDA Pro, запустите скрипт IDA Python из листинга 17.4, представленный здесь в файле findAntiVM.py. Что он находит?
3.Что произойдет при успешном срабатывании каждой из методик анти-ВМ?
4.Какие из этих методик работают в вашей виртуальной машине?
5.Почему срабатывает или завершается неудачей та или иная методика?
6.Как обезвредить эти методики и заставить вредоносную программу запуститься?
Лабораторная работа 17.2
Проанализируйте внутри VMware зараженный файл Lab17-02.dll. Ответив на первый вопрос, попытайтесь запустить установочные экспортные функции с помощью rundll32.exe и проследите за их работой, используя инструмент наподобие procmon. Ниже показан пример командной строки для запуска DLL:
rundll32.exe Lab17-02.dll,InstallRT (или InstallSA/InstallSB)
Вопросы
1.Какие функции экспортирует эта библиотека?
2.Что произойдет, если попытаться установить ее с помощью rundll32.exe?
3.Какие файлы при этом создаются и что они содержат?
4.Какой метод анти-ВМ здесь использован?
5.Как заставить вредоносную программу установиться во время ее выполнения?
6.Как можно насовсем обезвредить методики анти-ВМ?
7.Опишите принцип работы каждой установочной функции, которая экс-
портируется.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
414 Часть V • Противодействие обратному проектированию |
||||
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 |
|
|
|
|
Лабораторная работа 17.3
Проанализируйте внутри VMware зараженный файл Lab17-03.dll. Он похож на вредонос Lab12-02.exe, но с добавлением приемов анти-ВМ.
Вопросы
1.Что произойдет, если запустить вредонос в виртуальной машине?
2.Как заставить этот вредонос запуститься и использовать функции кейлогера?
3.Какие методики анти-ВМ применяются в этом вредоносе?
4.Какие системные изменения можно внести, чтобы полностью обезвредить методики анти-ВМ, используемые в этом вредоносе?
5.Как бы вы модифицировали двоичный файл в OllyDbg, чтобы методики
анти-ВМ больше не имели шанса на успех?