27.06.2011

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

image

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

Автор: 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, указывающий на неиспользуемую область данных. В этой области хакер может разместить собственный код, не изменяя при этом размер исходного файла.

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

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

или введите имя

CAPTCHA
Страницы: 1  2  
123
27-06-2011 20:02:14
Бредовый пример обхода сигнатур. Авторы забыли про checksum'ы, поэтому возможно что изменение содержимого файла привело к изменению checksum'а, по которому он "ловился", а не к "обходу сигнатуры"(которая вероятно даже и не использовалась для обнаружения файла как вируса).
0 |
VKraft
27-06-2011 22:12:54
похоже что кому-то надоело что есть бесплатные антивирусы. жаль проверить вышеизложенное в статье нет времени.
0 |
noname
28-06-2011 11:23:39
Опкоды – это команды на языке программирования Ассемблер, используемые на самом нижнем уровне программирования для настройки взаимодействия приложений с ЦП. Приложения, как правило, разрабатываются на языках более высокого уровня, в которых не применяются опкоды, например в C или C++. производит чтение смещений и им присвоенных значений. Смещение следует рассматривать как адрес в памяти, а значение, как опкод, который рассматривается сканером в шестнадцатеричной кодировкеИ далее в том же духе... Или автор, или переводчик (или оба) слабо понимают предмет.
0 |
Andrey
28-06-2011 17:05:18
1) Нормальные антивирусы используют проверку сигнатур с чексамами, иначе любой файл, в котором на данном отступе окажется сигнатура будет счетаться вирусом. А это совсем не так! Допустим у меня есть программа, которая проверяет именно эту сигнатуру, и так вышло в команде memcmp(*p1, *p2,......) p1 указывает как раз на тот отступ (вероятность стремится к нулю, но всё же она есть). Тогда антивирус без чексама скажет что мой файл - вирус, хотя это совсем не так. 2) Проверка чексама используется только в превентивных мерах, тоесть для уже известных вирусов. На практике большенство вирусов без сигнатур (его можно отнести к категории вирусов нулевого дня) ловятся эвристическими методами, тоесть проверкой поведения файла. Как раз такие алгоритмы отличают хороший антивирус от плохого. Короче, если тебе повезло обойти проверку сигнатуры, это ещё ничего не значит. Скорее всего файл спалится на эвристической проверке. ПС: Сына, подучи теорию. Это статья не уровня секлаба....
0 |
29-06-2011 07:16:58
Напишите свою статью. На своем уровне. Заодно поднимете уровень секлаба. Да и собственное ЧСВ поднимете. До невиданных вершин.
0 |
прохожий
03-07-2011 00:30:28
Учите русский язык. Это поможет Вам в будующем.
0 |
кусок идеота
04-07-2011 08:05:43
Ты только что написал предложение с ошибкой
0 |
Serious
01-07-2011 10:44:48
Спасибо секалбу за статью. Узнал много нового. Сейчас пойду применять полученные знания на практике.
0 |
Страницы: 1  2