Обход антивирусной защиты (Часть I)


В данном руководстве будут описаны методы и техники, которые позволят осуществить обход антивирусной защиты.

Автор: InterNOT Security Team
Перевод: SecurityLab.ru

Глава 1. Вступление

На протяжении последних 10 лет простые антивирусы, использующие для проверки уже существующие сигнатуры угроз, постоянно приобретают новые и все более современные эвристические функции. Большинство антивирусов способно проверять как файлы на локальных дисках, таки и опкоды (opcodes) в памяти.

Опкоды - это команды на языке программирования Ассемблер, используемые на самом нижнем уровне программирования для настройки взаимодействия приложений с ЦП. Приложения, как правило, разрабатываются на языках более высокого уровня, в которых не применяются опкоды, например в C или C++. Компилятор, в свою очередь, переводит высокоуровневый код в опкоды, руководствуясь требуемой архитектурой и пр.

Когда обычный антивирус сканирует файл, он производит чтение смещений и им присвоенных значений. Смещение следует рассматривать как адрес в памяти, а значение, как опкод, который рассматривается сканером в шестнадцатеричной кодировке. Таким образом, сканер может производить поиск по сигнатурам. Если приложение успешно проходит проверку антивирусом без использования эвристических функций, этот файл либо не содержит вредоносный код, либо он обошел проверку сигнатур.

В данном руководстве будут описаны методы и техники, которые позволят осуществить обход антивирусной защиты.

Глава 2 Структура PE файлов

Формат файла PE (Portable Executable) используется Windows для обработки бинарных файлов по умолчанию (Рис. 2.1). Стоит отметить, что не все бинарные файлы состоят из 5 секций. Они также могут состоять из 4, 6 или 7 секций, в зависимости от их построения.

Сигнатура, которая приводит в действие антивирусное приложение, может быть размещена где угодно, однако обычно ее стоит искать в одной из основных секций, а не в заголовках таблиц секций, заголовках DOS и пр.


Рис. 2.1: Структура PE файла

2.1 - Антивирусные сигнатуры и PE формат

Процесс поиска сигнатур антивирусом не сложный, если он выполняется классическим способом путем разделения сложных файлов на простые, и последующего поиска сигнатур в простых файлах.

Иногда сигнатуры находятся очень просто, например, при использовании ncx99.exe. ncx99.exe - это простой netcat listener, привязывающий cmd.exe к 99 порту на внешнем сетевом интерфейсе. На рис. 2.1.1 показана основная сигнатура между смещениями E77E и E78F.


Рис 2.1.1 Просмотр бинарного файла в шестнадцатеричной кодировке

Более того, в данном примере сигнатура обнаружена в секции idata. Это означает, что при попытке шифрования всей секции idata, исполняемый файл, который получиться в результате, может оказаться неработоспособным.

Мы можем отредактировать часть данного файла, или зашифровать только сигнатуру, и таким образом обойти обнаружение антивирусом.
Отметим, что антивирусные приложения будут также просматривать список PE заголовков файла, чтобы определить, является ли запускаемый нами файл вредоносным.

Иногда даже индикатор даты и времени создания файла входит в состав сигнатуры. Можно просто изменить или обнулить эти данные для успешного обхода проверки сигнатур. Если списки заголовков, таблицы, или флаги не проходят проверку, антивирус может пометить программу, как вредоносную или потенциально вредоносную, предполагая, что данная программа не может считаться надежной, или не может выполниться корректно.


Рис 2.1.2 - Обзор части списка PE заголовков в Ollydbg

2.2 - Изменение сигнатур антивируса в PE файлах

После вероятного обнаружения сигнатуры в одной из секций, ее можно изменить, либо путем редактирования прямо в hex-редакторе, либо путем изменения опкодов в дисассемблере, а также в некоторых случаях, с помощью отладчика (применимо для Ollydbg).

В случае с ncx99.exe, есть возможность изменения, как слушающего порта, так и программы, которая будет выполняться. Конечно, если заменить его, например на calc.exe, при взломе это не поможет, а вот замена номера порта с 99, например, на 81 может оказаться полезной. Таким образом, можно успешно обойти механизмы обнаружения некоторых антивирусов.


Рис. 2.2.1 - проверка исходного файла ncx99.exe


Рис. 2.2.2 - проверка ncx99.exe с п ривязкой к 81 порту

Как показано на рис 2.2.2, антивирусы Avast и Ikarus удалось успешно обойти. При атаке компьютеров, которые используют один из этих антивирусов, нам достаточно будет всего лишь изменить один из слушающих портов.

2.3 - Полиморфные техники и взломы

Полиморфные методы

Некоторые полиморфные вирусы имеют одинаковый функционал, но различные опкоды. В этом заключается очередной прием, применяемый опытными хакерами. Например, вместо инструкции PUSH -1, хакер может использовать DEC ESI, PUSH ESI, INC ESI, если регистр ESI равен 0. Если он не равен нулю, злоумышленнику придется сохранить значение ESI путем перемещения его в стек, и обнулить его с помощью оператора XOR (XOR ESI, ESI). Затем его можно использовать для записи в стек вместо PUSH -1.

После этого необходимо восстановить исходное значение ESI, с помощью оператора POP.

Это только один из примеров, большинство антивирусов не считают инструкцию PUSH -1 вредоносной. Но в случае с сигнатурой, являющей собой исполняемый код, нам не обойтись простой заменой данных пустыми командами (NOP), нам придется использовать методы шифрования, или «полиморфные методы».

Взломы

Если мы хотим зашифровать файл, нам придется зашифровать точку входа бинарного файла, отредактировав заголовки PE, либо заменить первую инструкцию на jump, указывающий на неиспользуемую область данных. В этой области хакер может разместить собственный код, не изменяя при этом размер исходного файла.

Обратим внимание, что некоторые антивирусы проверяют также и размер файлов.

При необходимости можно перезаписать инструкции также и внутри бинарного файла. Если целевая программа полностью сохраняет свою функциональность, не имеет значения, какая именно область файла была изменена.