С течением времени программные средства защиты становятся всё лучше и комплекснее: разрабатываются новые проактивные/эвристические алгоритмы обнаружения вредоносных программ, в контексте ИБ начинают применять методы машинного обучения и тд. Авторам вредоносного ПО в свою очередь приходится разрабатывать и применять различные техники защиты, чтобы добиться как можно более широкого распространения их программ до момента обнаружения и образования как можно большего промежутка времени после этого, в течение которого будет создана «сигнатура» в каком-либо виде, позволяющая защитным средствам обнаружить и устранить вредоносную программу.
Собственно защитные методы (кстати использующиеся далеко не только в ВПО) формируют два основных типа:
-
Антианализ (antianalysis)
- Антиобнаружение (antidetection)
Стоит отметить, что определённые antidetection-техники (полиморфизм, например) также являются antianalysis-техниками.
Антианализ
Antianalysis-техники применяются с целью усложнить обратную разработку программы. Широко применяются и в легитимном ПО.
Защитные методы этого типа делятся на следующие категории согласно их основной цели:
- Обнаружение инструментов анализа
- Нарушение нормальной работы/формирования корректного вывода инструментов анализа
- Обнаружение виртуальных сред/sandbox-ов/honeypot-ов
- Затруднение ручного анализа
Векторы воздействия антианализа
Посмотрим на каждую из них отдельно.
1. Обнаружение инструментов анализа
Техники этого типа «делают ставку» на то, что в ходе обратной разработки часто используются широко известные инструменты анализа, редко когда установленные в обычной системе: отладчики (WinDBG, KD, OllyDBG, ImmunityDebugger, x64DBG), анализаторы сетевого трафика (WireShark), средства контроля состояния системы (Process Explorer, Process Hacker). Вредонос может проверить, установлены ли какие-либо анализирующие средства, проверяя имена установленных программ, и если да, то аварийно завершиться, не давая возможности её дальнейшего анализа. Также возможно следить за тем, какие именно процессы/окна в данный момент запущены и нет ли среди них чего нибудь, относящегося к инструментам анализа.
Некоторые методы этой antianalysis-группы используют тот факт, что определённые средства анализа каким-либо образом изменяют состояние целевой программы/системы в целом. Например если в Windows usermode–отладчик подключен к процессу, то значение поля BeingDebugged в его PEB-блоке выставляется в 1, что можно проверить с помощью API IsDebuggerPresent, CheckRemoteDebuggerPresent. Также можно периодически замерять время выполнения критичексих участков кода (RDTSC, в Windows – GetTickCount, NtQueryPerformanceCounter). Если оно необычно большое для выполнения этого кода, то скорее всего к процессу подключён отладчик и где-то на этом участке был поставлен бряк.
Analysis tools detection |
||
Основная цель |
Метод |
Описание |
Обнаружение отладки |
Time controlling |
Вычисляется время исполнения определённого участка кода; если оно больше определённого значения — процесс отлаживается: время исполнения увеличивается за счет трассировки и точек останова. Для замера временного отрезка можно использовать RDTSC/GetTickCount/NtQueryPerformanceCounter. |
[Windows] PEB.BeingDebugged |
Значение PEB.BeingDebugged отражает, отлаживается ли программа. Если PEB.BeingDebugged==1 — процесс отлаживается. Значение поля можно считать как прямо из PEB-а, так и с помощью IsDebuggerPresent/CheckRemoteDebuggerPresent. |
|
[Windows] csrss.exe access |
Если возможно получить доступ к csrss.exe (OpenProcess c PROCESS_ALL_ACCESS), PID которого можно получить с помощью CsrGetProcessID, процесс отлаживается. Отлаживаемому процессу назначается привилегия SeDebugPriviledge, как раз и позволяющая проводить такого рода действия с csrss.exe. |
|
[Windows] EventPairHandles |
Для того, чтобы обрабатывать отладочные исключения, отладчик создаёт event-объект DebugEvent, изменяя состояние EventPair-объекта процесса, где хранится информация об event-объектах процесса. |
|
[Windows] OutputDebugString |
Эта WinAPI-функия дает указание отладчику вывести сообщение. Если она будет успешно выполнена (и GetLastError не изменит errCode) — процесс отлаживается. |
|
[Windows] NtQueryObject |
Вызвав эту WinAPI-функцию для класса объектов ObjectTypeInformation, можно получить информацию о том, находится ли в данный момент процесс под отладкой. |
|
[Windows] NtQueryInformationProcess/ZwQueryInformationProcess |
Вызвав эту WinAPI-функцию, можно получить информацию о том, находится ли в данный момент процесс под отладкой. |
|
[Windows] CloseHandle/NtClose |
При закрытии невалидного хендла отлаживаемый процесс выбросит исключение STATUS_INVALID_HANDLE. |
|
[Windows] PEB.ProcessHeap |
С помощью значения поля ProcessHeap можно получить информацию, был ли heap процесса создан подключённым к нему отладчиком. |
|
[Windows] PEB.NtGlobalFlag |
Содержит информацию о том, как хранятся heap-объекты. Если PEB.NtGlobalFlag==0x70 – процесс отлаживается. |
|
Обнаружение инструментов анализа |
Проверка запущенных процессов |
Проверяются названия запущенных процессов и созданных ими окон/классов окон. В Windows для этого используются API FindWindow/FindProcess. |
Проверка установленных программ |
Проверяются названия/возможные следы(например в реестре) установленных в системе программ для анализа |
2. Нарушение нормальной работы/формирования корректного вывода инструментов анализа
Методы этого класса используют различные приемы для того чтобы инструменты анализа выдавали неверные результаты, либо вследствие эксплуатации уязвимостей и недоработок конкретных продуктов происходило их аварийно е завершение.
Analysis tools fooling |
||
Основная цель |
Метод |
Описание |
Нарушение формирования корректного вывода инструмента анализирования |
Анти-дизассемблирование |
Различные приёмы «обмана» дизассемблеров:
|
Создание помех в работе инструмента анализирования |
[Windows] BadStringFormat |
Используется против отладчика OllyDBG, аварийно завершающегося при обработке определённым образом составленных форматных строк. |
3. Обнаружение виртуальных сред/sandbox-ов/honeypot-ов
Часто, исследуя вредоносные объекты, вирусные аналитики применяют для их изоляции различные виртуальные программные среды. Но есть нюанс в том, что они отличаются по определённым признакам от обычных систем, что и эксплуатируют некоторые antianalysis-техники, позволяя вредоносу определить, что он запущен “в матрице”. Другое дело, что на сегодняшний день виртуализация настолько широко распространена, что некоторые вирмейкеры уже не спешат ограничивать зону действия своих детищ только невиртуальными системами.
Matrix detection |
|
Метод |
Описание |
Проверка параметров системы |
В виртуальных средах определённые параметры существенно отличаются от обычных систем. Характерные признаки виртуальных систем:
|
Использование специфических процессорных инструкций |
Большинство виртуальных систем не в состоянии обработать корректно весь набор инструкций стандартного процессора. Команды такие как RDTSC, SIDT, SGDT, SLDT могут вызвать нарушение нормального функционирования таких сред. |
Проверка наличия следов супервизора в системе |
Средства виртуализации могут оставлять явные следы своего присутствия:
|
4. Противодействие ручному анализу
Субъективно, техники этого типа являются лучшими по эффективности и универсальности — методы этой группы «направлены» уже на самих аналитиков, а не на недостатки (с точки зрения вирусного анализа) инструментов, которые они используют; приемы антианализа других типов можно сравнительно легко обойти, либо использовав другие инструменты для анализа либо (получше) скрыв следы их присутствия.
Analyst fooling |
|
Метод |
Описание |
Шифрование |
Отдельные участки программы расшифровываются в процессе работы программы, причем расшифровка/зашифровка может происходить только блоков, которые нужны на текущий момент исполнения работы программы, по истечении надобности в них, они зашифровываются обратно. |
Морфизм (олиго-, поли-, мета-) |
Каждый свой цикл исполнения происходит перестановка участков своего тела без нарушения логики работы кода с последующим сохранением в исполняемый файл; таким образом получается перманентно изменяющаяся программа. |
Использование упаковщиков/протекторов |
Современные упаковщики/протекторы (UPX, Themida, VMProtect, Armadillo, ASPack, …) комплексно подходят к программной защите: при установке протектора в программу как правило встраивается сразу несколько реализаций antianalysis-техник (набор конкретных техник зачастую можно настраивать). |
«Спагетти» код |
Организация кода таким образом, чтобы он содержал большое количество JMP-инструкций, часто выбрасывающихся исключений. Такой подход крайне усложняет разбор аналитиком логики работы программы. |
Вставка мертвого кода |
Встраивание в программу большого количества участков кода, которые заведомо никогда не будут выполнены, вынуждает разрешать огромное количество условных переходов на такие участки и исключать их из анализа. |
Вставка бессмысленного кода |
Код программы разбавляется инструкциями/последовательностью инструкций, никак не влияющих на логику работы программы, но усложняющих разбор вирусному аналитику. |
Динамически вычисляемые адреса |
Применяется против статического анализа. Какой-либо адрес , значение которого заранее известно, прямо не указывается. Вместо этого нужное значение вычисляется динамически по определённому алгоритму. |
Обфускация импорта |
По подключаемым динамическим библиотекам и набору импортируемых из них функций порой можно очень многое предположить о природе исследуемой программы. Для того, чтобы скрыть свои намерения, вредоносная программа может определённым образом исказить свою таблицу импорта, или банально использовать возможность импортирования по ординалу(индексу) функции, а не по её имени (в Windows-системах). |
Виртуализация кода |
Для затруднения понимания принципов работы программы, может быть применена виртуализация кода. В контексте программы создаётся виртуальная машина со своим набором инструкций, и на исполнение ей подаётся поток таких инструкций. Обратная разработка таких случаев зачастую заключается в разборе набора инструкций виртуальной машины, и постижению назначения отдельных команд с последующим разбором «виртуального кода». В отдельных случаях (VMProtect) в рамках одной виртуальной машины может действовать вложенная виртуальная машина уже с совершенно другим принципом действия и набором команд; таких уровней вложенности потенциально может быть произвольно много. |
Антиобнаружение
Основное предназначение antidetection-техник — предотвратить срабатывание антивирусов/файрволов/сетевых фильтров/IPS/IDS и тд. Стоит отметить, что здесь речь идет о преодолении автоматизированных средств, что много лучше встречи «лицом к лицу» с вирусным аналитиком.
Вектор воздействия evasion-техник
Напомню, некоторые antianalysis-техники (шифрование, морфизм, использование упаковщиков/протекторов), также эффективны и против обнаружения.
Antidetection |
|
Метод |
Описание |
Шифрование |
Описание см. в Analyst fooling. В контексте средств скрытия от обнаружения позволяют успешно пройти сигнатурное сопоставление ввиду того, что эти методы единоразово либо постоянно изменяют тело исполняемого файла. |
Морфизм |
|
Использование упаковщиков/протекторов |
|
Process hacking |
Запускается дочерний процесс, который фактически не имеет исполняемого файла, тк. его тело полностью содержится в теле родительского процесса. Такой трюк позволяет обойти некоторые средства обнаружения. |
DLL-injection |
Вредоносная динамическая библиотека определённым образом загружается в посторонний процесс (отлично, если это будет стандартный системный процесс, чтобы вызывать меньше подозрений) и содержащийся в библиотеке код исполняется от его имени. |
P.S.
Увлекательная гонка вооружений черных и белых шляп не думает сбавлять обороты и только набирает скорость. На данный момент история дошла до того, что троянская программа может кардинально преобразовывать свое тело и логику работы, подгружая дополнительные обфусцированные/зашифрованные модули по анонимной P2P-сети, не требуя никаких C&C серверов, в то время как по другую сторону в антивирусные продукты интенсивно встраиваются машинное обучение и искусственный интеллект, способный обнаруживать и обезвреживать безо всяких сигнатур новые троянские программы, о которых толком ничего не было известно.
Ставьте попкорн в микроволновку, самое интересное только начинается ;)