Тестирование эвристических анализаторов современных антивирусов
Средства модификации машинного кода
Введение
дной из составных частей современного антивирусного пакета является эвристический анализатор, представляющий собой подсистему антивируса, отвечающую за детектирование новых разновидностей вредоносных программ до внесения их сигнатур в базу данных антивируса. Работа эвристического анализатора всегда является балансом между детектированием новых разновидностей вредоносных программ и ложными срабатываниями. Целью данного тестирования было изучение реагирования антивирусов на ряд тестовых примеров, имитирующих вредоносные программы двух распространенных типов Trojan-Downloader и Drojan-Dropper. Данные категории программ выбраны не случайно, поскольку они имеют характерный программный код, а поражение компьютера зачастую начинается именно с запуска на нем программ данного типа.
Trojan-Downloader
rojan-Downloader это программа, предназначенная для скрытной несанкционированной загрузки на компьютер пользователя постороннего программного обеспечения с его последующим запуском или регистрацией в системе. Сам по себе Trojan-Downloader не несет большой опасности для системы опасен не он, а загружаемые им программы. Статистическое исследование 1300 образцов показало, что 855 из них построены по типовым схемам.
Из построенных по типовой схеме 855 образцов для дальнейшего изучения отобрано 440 (отбор проводился путем отбрасывания незначительно различающихся вариантов вредоносных программ), для которых было проверено, как они ведут себя после несанкционированной загрузки программы.
Было обнаружено, что 190 образцов Trojan-Downloader запускают загруженные программы при помощи API-функции ShellExecute, 138 при помощи CreateProcess. Остальные не запускают загруженные файлы в явном виде вместо этого они регистрируют загруженные программы как запускаемые автоматически их как расширения Internet Explorer. Кроме того, было установлено, что более 70% изученных образцов написано на языках высокого уровня (C, Delphi, Visual Basic).
Таким образом, можно сформировать портрет типового Trojan-Downloader: он написан на языке высокого уровня, загружает файлы и запускает их через стандартные API-функции. Сразу оговоримся, что под данные приметы могут попасть многие утилиты, предназначенные, например, для обновления версий программных продуктов. На основании этого портрета был подготовлен ряд тестовых примеров:
- GUI-приложение, написанное на Delphi 7. Выполняет загрузку исполняемого файла из Интернета, его сохранение в файл c:\troj_test.exe и его запуск. Загрузка производится при помощи API-функций InternetOpen, InternetOpenURL, InternetReadFile библиотеки wininet.dll, запуск через ShellExecute.
- GUI-приложение, написанное на Delphi 7. Выполняет загрузку исполняемого файла из Интернета, его сохранение в файл c:\troj_test.exe. Загрузка производится при помощи API-функции URLDownloadToFile библиотеки urlmon.dll.
- Delphi 7, аналог примера 2 без GUI. Наиболее похож на реальный TrojanDownloader, построенный с помощью Delphi.
- Пример 3 отличается тем, что urlmon.dll загружается динамически, имя DLL и имя функции подвергнуты простейшей шифровке.
- Аналог примера 1, но без GUI.
- Аналог примера 3 с применением антиотладочных приемов.
- Microsoft C, InternetOpenURL+InternetReadFile аналог примера 1.
- Microsoft C, URLDownloadToFile аналог примера 2.
Таким образом, получается, что перечисленные примеры соответствуют наиболее распространенным, согласно статистике, разновидностям Trojan-Downloader.
Таблица 1
Столбцы:
1. GUI, Delphi 7, InternetOpenURL+InternetReadFile.
2. GUI, Delphi 7, URLDownloadToFile.
3. Без GUI, Delphi 7, URLDownloadToFile; 3’ с динамической загрузкой DLL и шифровкой имен.
4. Без GUI, Delphi 7, InternetOpenURL+InternetReadFile.
5. Без GUI, Delphi 7, URLDownloadToFile, антиотладочные приемы.
6. Microsoft C, InternetOpenURL+InternetReadFile.
7. Microsoft C, URLDownloadToFile.
Результаты тестов приведены в табл. 1. По ним видно, что на пример 3 среагировало наибольшее количество антивирусов. Кроме того, видно, что применение антиотладочных приемов нейтрализовало анализаторы всех антивирусов, что является безусловным минусом этих анализаторов. Реагирование антивирусов BitDefender и NOD32 на образцы с GUI может приводить к ложным срабатываниям на утилиты автоматического обновления через Интернет. Антивирус VBA на тестах показывал не только подозрение на TrojanDownloader, но и корректно указывал в протоколе URL, с которого предположительно загружается файл, это, несомненно, полезно для анализа и принятия решения о том, ложное это срабатывание или нет. Антивирус Norman в расширенном протоколе системы Sandbox выдавал подробную информацию, в которой было отмечено минимум два события: загрузка файла (с указанием URL загрузки и имени, под которым сохраняется файл) и запуск загруженного файла.
Trojan-Dropper
rojan-Dropper это, по сути, инсталлятор вредоносной программы. Он хранит вредоносную программу (или программы их может быть несколько) внутри своего исполняемого файла и в момент запуска устанавливает ее в систему и запускает. В простейшем случае инсталляция сводится к сохранению вредоносной программы на диске и ее запуску. Перед подготовкой примера было изучено около 200 наиболее типовых образцов и установлено, что существует несколько распространенных методик хранения вредоносных программ в теле Trojan-Dropper:
- Размещение вредоносных программ в ресурсах. В этом случае у исполняемого файла имеется несколько именованных ресурсов, в которых находятся вредоносные программы. В момент запуска эти программы извлекаются из ресурсов, сохраняются на диске и запускаются. Для системы это наиболее корректный путь хранения больших объемов данных в теле программы, и для работы с ресурсом применяются стандартные функции API.
- Приписывание вредоносного кода в «хвост» тела Trojan-Dropper. В этом случае Trojan-Dropper должен выделить их из своего тела собственными методами.
- Хранение вредоносной программы непосредственно в коде Trojan-Dropper.
Часто вредоносная программа хранится в зашифрованном или заархивированном виде и Trojan-Dropper расшифровывает/разархивирует ее в момент извлечения. В качестве «подопытного кролика» для тестов был выбран Trojan.Win32.LowZones.ad особой причины для его выбора не было, просто он хорошо известен большинству изученных антивирусов.
Итак, тестовые примеры:
- Приложение без GUI, содержащие единственный ресурс с именем TROJAN и типом EXEFILE в этом ресурсе находится имитатор троянской программы. Данный имитатор совершенно безвреден он просто выводит сообщение на экран. Логика работы примера состоит в том, что он извлекает файл из ресурса, сохраняет его на диске под именем c:\troj_test.exe и запускает его (все эти операции, естественно, ведутся скрытно, без запросов и иных видимых проявлений работы дроппера).
- Trojan.Win32.LowZones.ad в чистом виде как оказалось, некоторые антивирусы его не детектируют.
- Аналог примера 1, но вместо безвредной программы в ресурс помещается Trojan.Win32.LowZones.ad.
- Аналог примера 3, но Trojan.Win32.LowZones.ad в ресурсе зашифрован простейшим алгоритмом при помощи операции xor с числом 55 для каждого байта.
- Приложение без GUI, к которому приписан безопасный тестовый файл. Логика работы примера состоит в том, что он сохраняет приписанный к нему файл на диске под именем c:\troj_test.exe и запускает.
- Приложение без GUI, к которому приписан Trojan.Win32.LowZones.ad. Вредоносная программа сохраняется на диске под именем c:\troj_test.exe и запускается.
Результаты тестирования, приведенные в табл. 2, показали интересную картину: на примеры 1 и 5 антивирусы не реагируют, что вполне корректно, поскольку размещение исполняемого файла в ресурсах или в конце другого исполняемого файла является распространенной практикой. На размещенный в ресурсах вредоносный объект отреагировали не все антивирусы отсутствие реакции в данном случае является минусом их анализатора. А вот на зашифрованный вредоносный объект отреагировал только BitDefender.
Таблица 2
Столбцы:
1. Тестовый Trojan-Dropper, в его ресурсе безопасный файл.
2. Реакция антивирусов на применяемый в тестах Trojan.Win32.LowZones.ad.
3. Тестовый Trojan-Dropper, в его ресурсе Trojan.Win32.LowZones.ad.
4. Тестовый Trojan-Dropper, в его ресурсе зашифрованный Trojan.Win32.LowZones.ad.
5. Тестовый Trojan-Dropper, в конце его приписан безопасный файл.
6. Тестовый Trojan-Dropper, в конце его приписан Trojan.Win32.LowZones.ad.
Средства модификации машинного кода
данном тестировании рассмотрим самую простую методику модификации машинного кода, которая может применяться для маскировки файла от обнаружения антивирусом, это модификация команд в области точки входа. Тестовый пример построен на основе Trojan.Win32.LowZones.ad, первые две машинные команды которого перемещены в конец секции кода, а в точке входа размещена команда JMP на перемещенный код.
В конце перемещенного кода размещен JMP на третью машинную команду программы. В плане работы троянской программы, естественно, ничего не изменилось, более того она соответствует исходному варианту с точностью до команды, но к машинному коду добавилось два JMP.
Проверка полученного таким образом тестового примера показала очень интересные результаты: модифицированный образец опознали только BitDefender, DrWeb и Kaspersky AVP. Все остальные антивирусы не только пропустили данный образец, но и не выдали никаких предупреждений и подозрений.
Заключение
роведенные эксперименты и тесты затронули достаточно узкую область вредоносных программ, поэтому проведенные тесты ни в коей мере не могут применяться в качестве критериев оценки работоспособности эвристических анализаторов антивирусов в целом. Однако тесты продемонстрировали, что для защиты компьютера от не известных заранее вредоносных программ или от модифицированных вариантов известных одного сканера недостаточно необходим монитор с элементами проактивной защиты. Использование монитора повышает вероятность обнаружения внедрения в систему троянских программ при помощи Trojan-Dropper и Trojan-Downloader, поскольку, пропустив, скажем, Trojan-Dropper, монитор может отреагировать на устанавливаемую им вредоносную программу и заблокировать ее установку и запуск. Элементы проактивной защиты нужны для обнаружения неизвестных разновидностей вредоносных программ на основании анализа их поведения.