БЛЕСК И НИЩЕТА КОДОЭМУЛЯТОРОВ
by DrMAD
Как известно, лечение полиморфиков и эвристический анализ
подозрительных файлов невозможны без эмуляции кода. Под эмуляцией кода
понимается "понарошечное" исполнение подозрительной программы.
Любой уважающий себя современный антивирус содержит эмулятор кода.
Идеальный кодоэмулятор должен в максимальной степени имитировать для
исследуемой программы внешнюю среду (память, порты и пр.), и в то же
время надежно блокировать "опасные" операции ( например, запись на диск
). Конечно, реализовано все это может быть различными способами.
Способ 1. Подозрительная программа загружается в память и
производится ее пошаговое исполнение при помощи механизма отладочного
прерывания номер 1. Примерно так же поступают популярные отладчики,
типа Debug, TD, SoftICE и пр. Данному способу свойственны все
преимущества и недостатки, присущие отладчикам. Основное преимущество:
большую часть трудов берет на себя процессор. Основной недостаток:
аппаратную трассировку очень легко обломить, и если кто и умеет
более-менее удачно противодействовать этому (например, SoftICE), то
слишком дорогой ценой!
Способ 2. Подозрительная программа загружается в буфер антивируса и
производится пошаговая имитация каждой команды средствами самого
антивируса. Такие отладчики также имеются... но, шорт поберьи, основной
недостаток очевиден: чтобы полностью проимитировать программно всю
персоналку, включая все фичи и баги процессора, память, внешние
устройства и т.д. - этим можно заниматься до пенсии, и все равно не
завершить работу.
Вероятно, авторы антивирусов используют некоторые комбинации
указанных способов. От того, какой подход превалирует, зависит качество
эмуляции кода. Вот это и захотелось мне протестировать.
Сравнивалось три антивируса:
- AVP by Kaspersky Lab;
- DrWeb by Sald;
- MultiScan by Валентин Колесников.
Командные строки:
- AVPLITE *.* /V /W
- DRWEB *.* /NM /HA /RP
- MSCAN *.* /T /CR /O /W
На основе вирусов семейства Tricks было разработано новое семейство
вирусов Tricks.EXPLORER. Зачем? Очень просто: вирусы Tricks, к
сожалению, уже известны антивирусам. Кроме того, семейство Tricks
создавалось безалаберно, антиэвристические трюки использовались
бессистемно; семейство же Tricks.EXPLORER упорядочено по группам
используемых трюков.
И самое главное: вирусы писать нехорошо! J Поэтому
Tricks.EXPLORER написаны так, что хотя они и являются полноценными
вирусами, но... короче, не удивляйтесь, если они откажутся заражать
Ваши дрозофилы. В половом отношении Tricks.EXPLORERы _ну_очень_
разборчивы. J))
Чтобы отделить "эвристический анализ" от "эмуляции кода",
собственно вирусный алгоритм (общий для всего семейства) зашифрован. В
чистом виде он легко распознается антивирусами как COM.Virus, или Type_
COM, или... гм... MultiScan почему-то отказывается признать в нем
заразу.K Впрочем, это и не нужно, ибо эвристический анализ нас не
интересует. А о качестве же эмуляции кода антивирус MultiScan может
сигнализировать хотя бы тем, что обнаружит ли он в вирусе цикл
расшифровки или нет. Поэтому все трюки применяются именно к алгоритму
расшифровки.
В данной статье исследуются только два показателя качества
кодоэмуляции: 1) корректность имитации внешней среды; 2) корректность
имитации передачи управления в программе. Остальные аспекты будут
протестированы позже.
Корректность имитации внешней среды
# Трюк AVP DrWeb MScan
1 - + + -
2 Константа из BIOS - - -
3 Константа из прерывания DOS - - -
4 Константа из прерывания BIOS - - -
5 Константа из таблицы векторов - - -
6 Константа из рабочей области BIOS - - -
7 Константа из PSP - + -
8 Константа из MCB - + -
9 Константа из порта (CMOS) + - -
Корректность имитации передачи управления
# Трюк AVP DrWeb MScan
10 retn + + +/-
11 retf + + +/-
12 iret + + +/-
13 Межсегментный jmp XXXX:XXXX + + +/-
14 Прерывание (перехват через int21h/f25h) + + +/-
15 Прерывание (прямой перехват) + + +/-
16 int 0 (деление на 0) + + -
17 int 4 (переполнение) - + -
18 int 6 (некорректная команда) + + -
19 int 1 (пошаговая трассировка) - + +/-
20 int 1Ch/8 (таймер) (не тестировалось)
Конечно, это все очень грубое и не слишком достоверное
тестирование. Например, тест TREXP08 показал, что DrWeb эмулирует
структуру PSP. В то же время известно (см. IV #13), что некоторые поля
PSP он эмулирует некорректно.
Исходные тексты тестовых вирусов и сами тестовые вирусы семейства
Tricks.EXPLORER прилагаются.
|