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