
2015_лекции / Лекция №7_2015
.pdf
Федеральное агентство по образованию
Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»
Стратегии самозащиты вредоносного ПО. Эмуляция ПО и техники, затрудняющие эмуляцию Часть 2

Эмуляция
Эмуляторы используются для отслеживания выполнения программы путем выполнения программы вне ОС
По определению не изменяет код программы
Запуск исследуемой программы на эмулированном аппаратном обеспечение безопаснее отладки

Типы эмуляторов
Аппаратные
Эмуляторы разделяют аппаратные ресурсы хоста
Инструкции ЦПУ выполняются прямо на реальном ЦПУ
Высокая производительность
Примеры: VMWare, VirtualBox, Xen
Программные
Эмуляторы полностью реализованы с помощью ПО
Инструкции ЦПУ интерпретируются и транслируются динамически
Могут работать медленно
Примеры: Bochs, Qemu, FSSandbox

Пример программного эмулятора Bochs
Bochs: эмулятор процессора (x86/amd64) с открытым кодом
Интерпретирует инструкции для эмулирования
Портируемый, т.к. он использует среду C++.
Поддерживает обработку прерываний и исключений ЦПУ, функции обращения к памяти

Эмуляция: обобщенный
алгоритм
Инициализация анализатора кода. Начало цикла эмуляции программы.
1.Запуск процедур, входящих в состав анализатора кода.
2.Разбор инструкции дизассемблером. В том случае, если во время работы была допущена ошибка (например, встретилась неизвестная команда), эмулятор завершает работу.
3.Разбор эмулятором параметров инструкции (размер инструкции, используемые регистры, тип имитации исполнения) полученной от дизассемблера. В зависимости от действий, необходимых для имитации исполнения инструкции (параметр, который определяет дизассемблер), переход к пункту 4 или 5.
4.Запуск инструкции в специальных условиях ("карантине"). Переход к пункту 6.
5.Полная имитация выполнения инструкции.
6.Перевод указателя на следующую инструкцию.
Перейдем к началу цикла, если в ходе эмуляции инструкции:
Не произошло ошибок.
Требуемый участок кода не был исследован до конца (недостаточная глубина анализа).
Время, отведенное на эмуляцию программы, не было превышено.

Основные виды атак на
эмуляторы
Основные категории атак
Временные атаки
Особенности реализации эмулируемой ОС
Особенности аппаратной реализации
Наличие инструментов, связанных с эмуляцией,
например, VMWare tools
Атаки типа DDoS:
Большое количество исполняемых инструкций (например, подбор ключа простым перебором)
Антивирусные песочницы не могут выделить большое число временных тактов для эмуляции
Атаки, направленные на выход из эмулированной среды

Обнаружение эмуляторов: эмуляция ОС
Если эмуляторы не имитирует полноценную ОС, то эмуляция API легко может быть выявлена:
У Windows большое количество как документированного так и недокументированного API
Эмуляторы всегда стараются вернуть какое-либо значение даже при выполнении неподдерживаемого
API
Примеры:
Вызов API c неподдерживаемыми параметрами, проверка возвращаемых значений
Отслеживание изменение значений регистров, стека

Обнаружение эмуляторов:
аппаратная реализация
Эмуляция инструкций ЦПУ крайне сложная задача
Набор инструкций для Intel x86/amd64 состоит из приблизительно ~500 инструкций
Обработка исключений и страничную организацию памяти
Полноценный эмулятор процессоров должен реализовать достаточно большое число устройств

Пример: обнаружение VmWare
Анализ запущенных процессов
VmWareService.exe, VmWareTray.exe, VMWareUser.exe
Анализ реестра
Информация о виртуальных жестких дисках, адаптерах, мышь
Анализ MAC адреса при виртуализации сет адаптера
Для VMWare 00:0c:29
Анализ памяти
Использование уязвимых инструкций:

Пример: обнаружение VmWare
Уязвимые инструкции
Почти все инструкции, обращающие к аппарат. обеспечению, генерируют прерывания, которые кешируются и обрабатываются VmWare
Кроме sidt, sgdt, sltd, cpuid, str
sidt, sgdt, sltd возвращают адреса на таблицы описания
дескрипторов IDT, GDT, LTD
Что такое техника RED PILL
Самостоятельная работа!