Основы защиты компьютера. Как работает эвристический анализатор кода .

В рамках данного раздела мы попытаемся выяснить, действительно ли даже три антивируса могут дать сбой в поимке «хитрого» кода, и как с этим связано такое качество антивирусного продукта, как эвристика. В роли испытуемых антивирусов были выбраны следующие популярные продукты:

? "Антивирус Касперского";

? ESET NOD32;

? Vba32 ("ВирусБлокАда").

ПРИМЕЧАНИЕ

В данном тесте мы акцентируем особое внимание на антивирусном продукте Vba32. Это белорусский антивирус, включающий в себя достаточно оригинальный эвристический модуль, в основе которого стоит запатентованная технология "MalwareScopeTM".

Методология проведения теста

Напомним, что качество эвристики определяется способностью антивируса распознавать модифицированный вредоносный код. Фактически, эвристика предполагает обнаружение вируса, которого нет в базах: по специальным алгоритмам и некоторым признакам антивирус сам должен «домыслить», что проверяемый код является вирусным. Как вы уже поняли, задача не из легких.

Для наибольшей объективности теста мы возьмем максимально широкий перечень инструментов, применяемых в подобных случаях. Помимо упаковщиков, генераторов вирусов и утилит для обфускации, мы включим в наш тест самописный вирус, а также воспользуемся полиморфным образцом Virus.Win32.Zombie, который известен оригинальной технологией декриптования для обхода эвристических анализаторов.

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

"Свежесть" баз всех трех антивирусов одинакова. Уровень настроек эвристики во всех трех случаях аналогичен и приравнен к средним.

Итак, пожалуй, начнем.

Тест № 1

Для проведения первого теста были использованы случайным образом отобранные из коллекции (579 штук) четыре экземпляра вредоносного кода:

? TrojanDownloader.13547;

? Backdoor. Win32Optix.b;

? Trojan-Win32PSW.QQRob.16;

? Trojan-Win32PSW.QQShou.EH.

Каждый экземпляр был пропущен через PeStubOEP (программа предназначена для защиты EXE-файлов от определения их компилятора/упаковщика). Результаты проверки следующие ("+" – распознан; "-" – не распознан). Итак (результаты на рис. 5.3).

? Nod32 2.7 "+";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+".

Рис. 5.3. TrojanDownloader.13547 был успешно найден

? Nod32 2.7 "+";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+" (рис. 5.4).

Рис. 5.4. Backdoor.Win32Optix.b – «крепкие орешки» еще впереди!

? Nod32 2.7 "+";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+" (рис. 5.5).

Рис. 5.5. Наш антивирус пока на высоте

Trojan-Win32PSW.QQShou.EH оказался крепким орешком, и Vba32 определил его, только после того как были установлены максимальные настройки:

? Nod32 2.7 "+";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+" (рис. 5.6, 5.7).

ПРИМЕЧАНИЕ

Один из экземпляров вредоносного кода (Trojan-Win32PSW.QQShou.EH) Vba32 был определен как Trojan-Spy.Delf.13.

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

Рис. 5.6. Экспертный анализ – максимален!

Рис. 5.7. Похож на Spy-Delf…

Используем следующую партию экземпляров, случайно отобранных из коллекции:

? Trojan.Spambot;

? OS.cope.Worm.UK.Nuwar;

? Trojan-Proxy.WIN32.Lager.aq.

Два троянских коня и червь были запакованы Tibs. Проверяем:

? Nod32 2.7 "-";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+" (рис. 5.8).

Рис. 5.8. Результат проверки – Trojan.Spambot!

ПРИМЕЧАНИЕ

Как видите, здесь нас немного огорчил NOD32. Но не будем забывать, что даже качественно проработанный движок несовершенен.

? Nod32 2.7 "+";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+" (рис. 5.9).

Рис. 5.9. Самый настоящий червь!

? Nod32 2.7 "+";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+" (рис. 5.10).

Рис. 5.10. Прокси-троян у нас под колпаком

Продолжаем наши эксперименты. Теперь возьмем три различных вируса и наобум запакуем их тремя различными упаковщиками. Троянского коня упаковываем NsAnti. Результаты:

? Nod32 2.7 "+";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+" (рис. 5.11).

Рис. 5.11. На ловца и зверь бежит!

Теперь Trojan-Spy.Win32.AimSpy запакуем SkD Undetectabler Pro 2 SkDPRO. Результаты:

? Nod32 2.7 "-";

? "Антивирус Касперского 6.0" "-";

? Vba32 "-".

ПРИМЕЧАНИЕ

Ну вот, собственно, и настал момент истины. Заметьте, что ни один из наших антивирусных продуктов не смог обнаружить запакованный SkD Undetectabler Pro 2 SkDPRO троянский конь – SkD Undetectabler Pro 2 SkDPRO!

Едем дальше. Trojan.Mezzia пакуем Zipworx SecureEXE. Результаты:

? Nod32 2.7 "+";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+" (рис. 5.12).

Рис. 5.12.Vba не спит

Тест № 2

Тест включает в себя упаковку одного вируса несколькими упаковщиками. В качестве «зло-кода» был использован известный Virus.Win32.Neshta.b. Итак, результаты.

Пропускаем нашего "нечто" через WinUpack:

? Nod32 2.7 "-";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+" (рис. 5.13).

Рис. 5.13. Neshta – не уйдет! Пропускаем Neshta через Arm Protector ver.01:

? Nod32 2.7 "+";

? "Антивирус Касперского 6.0" "+";

? Vba32 "-" (рис. 5.14).

Рис. 5.14. Vba32 не видит наше «нечто»

Пропускаем "нечто" через FSG. Результаты:

? Nod32 2.7 "+";

? "Антивирус Касперского 6.0" "+";

? Vba32 "+" (рис. 5.15).

Рис. 5.15. И опять наш антивирус на высоте

ПРИМЕЧАНИЕ

Как видите, в этом тесте Vba32 не смог обнаружить "нечто", запакованного Arm Protector ver.01. Nod32 совсем не распознал Neshta, запакованного WinUpack. Вывод: совершенной эвристики нет – к ней лишь можно стремиться.

Тест № 3

В данном тесте был использован генератор вирусов APOKALIPSES. Из десяти сгенерированных экземпляров Vba32 обнаружил 8, Nod32 2.7 – 9, «Антивирус Касперского 6.0» обнаружил все.

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

Итак, посмотрим на результаты. Vba32 не обнаружил вирусный код (рис. 5.16).

Тест № 4

Рис. 5.16. «В порядке!»

"Антивирус Касперского 6.0" также ничего не обнаружил (рис. 5.17).

Рис. 5.17. «Опасных объектов не обнаружено!»

Лишь Nod32 обнаружил самописный вирус, классифицировав его как модификацию (рис. 5.18).

Рис. 5.18. Здесь NOD32 показал себя с самой лучшей стороны

Тест № 5

Тест на противодействие обфускации. Подправим наш экземпляр (Trojan. Downloader.Win32.Zlob) вручную. Для этого внедрим пару неизвестных инструкций в оригинальный код. Зачем? Чтобы усложнить задачу по эмулированию новых инструкций эвристическим анализатором тестируемого антивируса: говоря простым языком, эмулятору будет более чем сложно узнать, откуда продолжать разбор кода.

Полученную таким образом модификацию вирусного кода последовательно пропустим через ARM Protector, TeLock и Afx!AVSpoffer. Настоящий "biohazard"! Посмотрим, как с этим справятся наши антивирусы. Результаты:

? Nod32 2.7 "-";

? "Антивирус Касперского 6.0" "-";

? Vba32 "-".

ПРИМЕЧАНИЕ

Как вы можете видеть, ни одна из антивирусных программ не смогла вынести такой "biohazard".

Тест № 6

Eicar Test. Именно этот тест используется для проверки работоспособности антивирусных программ. Обоснованность проведения подобного теста при анализе эвристики особенно очевидна: стандартизованность EICAR позволяет получать результаты с минимальными погрешностями при определении способности антивируса работать с упаковщиками.

Фактически, имитация вируса представляет собой такую последовательность: X5O!P%@AP[4\PZX54(P")7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

ПРИМЕЧАНИЕ

Для проверки внесите данный текст в Блокнот, после чего попробуйте проверить ваш TXT антивирусом.

Здесь тестовый текст был упакован десятью различными упаковщиками. Итак, результаты антивирусной проверки:

? Nod32 2.7 – обнаружил восемь экземпляров;

? "Антивирус Касперского 6.0" – обнаружил девять экземпляров;

? Vba32 – обнаружил восемь экземпляров.

Тест № 7

Тест на обнаружение полиморфных вариантов. Напомню нашим читателям, что в основе полиморфизма стоит способность вируса к изменению своего кода, так называемой «мутации» – образованию неузнаваемых антивирусом форм, что, к слову будет сказано, является идеальным вариантом для нашего теста.

В качестве исследуемого мы используем Virus.Win32.Zombi, который представляет собой сложный полиморфный вирус. Вирус использует уникальную технологию встраивания в файлы: вначале он дизассемблирует исполняемый файл на составные части, встраивает свой код, после чего собирает файл, так чтобы вирусный код и код зараженного файла смешались. Для обхода эвристических анализаторов Virus.Win32.Zombie использует уникальную технологию декриптования своего тела.

Итак, результаты:

? Nod32 2.7 – обнаружил;

? "Антивирус Касперского 6.0" – не обнаружил;

? Vba32 – обнаружил.

Для "Антивируса Касперского 6.0" Virus.Win32.Zombi оказался не по зубам.