ZF

                 БЛЕСК И НИЩЕТА КОДОЭМУЛЯТОРОВ
                            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 прилагаются.


(C) NF, 1998-2004