Как работает эвристический анализатор кода и почему даже два антивируса в системе могут стать бесполезными
🕛 20.09.2009, 23:59
В рамках данного раздела мы попытаемся выяснить, действительно ли даже три антивируса могут дать сбой в поимке «хитрого» кода, и как с этим связано такое качество антивирусного продукта, как эвристика. В роли испытуемых антивирусов были выбраны следующие популярные продукты:- "Антивирус Касперского";
- 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 оказался не по зубам.