Как стать автором
Обновить

Об особенностях сканирования исполняемых файлов антивирусами и доверии результатам VirusTotal

Время на прочтение7 мин
Количество просмотров51K


Всем привет. Ниже будет много глупого текста, ностальгических воспоминаний и школотного кода. Кроме того будет рассмотрена эффективность сервиса VirusTotal, а также антивирусных движков в отношении исполняемых файлов.

Часть 1. Бредово-ностальгическое вступление


В моей жизни многое поменялось. Мне стала интересна (местами — до недосыпов) моя текущая работа, в моём регионе четвёртый год идёт война, многое изменилось и переосмыслилось в личной жизни.

Многие взгляды и мнения изменились.

Лет 15-20 назад мне была интересна тема взлома и написания вредоносного кода, потом интересы сменились на прямо противоположные — защиту от этого дела, а потом я понял, что всем правят деньги и личные интересы, а вовсе не альтруизм и желание помочь.

Но то такое. В любом случае ИТ оказалось частью даже моей настоящей работы, хотя вовсе не относится к исходной специализации.

Лет 10 назад я написал в очень узком кругу про возможность снятия детекта антивируса с помощью самораспаковывающихся архивов. Тогда это было, кажется, на Virusinfo, потом кое-кто это перепостил под своим ником на DrWeb — так сказать, без копирайтов и со своим авторством, потом даже скандал был — но то тоже давно и неправда.

А недавно я вспомнил старое. Многое прошло, многие вещи обновились и угнаться за прогрессом, не варясь в теме, оказалось сложно.

Но суть осталась та же: сенсации, деньги и личные интересы. И игра на незнаниях — которые доходят иногда до того, что уязвимости Meltdown/Spectre ищут в телевизорах и бортовых компьютерах автомобилей )))

Но довольно этого неинтересного бреда. Итак, я решил вспомнить старое, а поскольку вспомнилось мало — то решил по старинке снять детекты с нескольких вирусов.

Нам потребуется:

  1. знания командных bat-скриптов Windows на уровне школьника.
  2. Quick Batch File Compiler (далее — QBC)
  3. 7za.exe из пакета 7z1800-extra.7z (далее — 7Z)
  4. upx.exe из пакета upx394w.zip (далее — UPX)
  5. файл eicar.com, скачать можно, например, тут (далее — Eicar)
  6. cамый базовый компьютер с выходом в интернет под управлением любой ОС Windows

Часть 2. Совсем немного теории


Для того, чтобы двигаться дальше, давайте разберёмся, о чём пойдёт речь. В настоящий момент, как, впрочем, и ранее, активно продвигается тема антивирусов. Дескать, антивирусы помогают не допустить потери важных данных, антивирусы спасают от уязвимостей, антивирусы — то, антивирусы — сё и так далее.

При этом зачастую рядовой пользователь даже не понимает, что антивирус — это не просто сканер, это и резидентная защита, и эвристик, а зачастую — и проактивная защита, файервол и песочница.

Каждому из этих компонентов мы можем посвятить не то что статью — книгу, но остановимся на самом базовом: сканере.

Этот компонент не позволит предотвращать соединения с вредоносными сайтами, он не будет ловить вредоносный код на лету, но он позволяет проверить файл и дать ответ: стоит его хранить — или лучше удалить сразу и навсегда.

Ниже мы протестируем разные движки антивирусов и посмотрим, насколько они справляются с этой задачей хорошо.

Отдельно хотелось бы отметить ресурс VirusTotal — он позволяет не только проверить файл различными движками антивирусов, но и представляет собой некую песочницу по тестированию вредоносного (и вообще любого) кода. Плюс платформы — бесплатность, минус — все образцы, которые высылаются на VirusTotal впоследствии передаются всем антивирусным лабораториям.

Именно по этой причине ниже я не буду давать ссылки на страницы с результатами сканирования, а предоставлю скриншоты с этими результатами, полученными в ходе работы. Очевидно (и я хочу в это верить!) после этой статьи результаты улучшатся.

Авторы вредоносного кода чрезвычайно часто используют упаковщики и протекторы, которые не только сжимают вредоносный файл, но и затрудняют его детектирование по сигнатурам, а также его последующий анализ. При использовании ворованных лицензий протекторов типа WinLicense и Themida обычно антивирусные лаборатории не затрудняют себя распаковкой, а просто добавляют сигнатуры протектора с ворованным ключом в детект (знаменитые детекты типа Trojan:​W32/Black.A). Это приводит к появлению ложных срабатываний — аналогичными ворованными лицензиями пользуются авторы генераторов ключей, патчеров и некоторых программ, которые по сути вредоносными не являются, но тем не менее защищаются от реверсинга.

Поскольку всё, описанное в этой статье, ниже будет предоставлено читателю для ознакомления, я не работал с реальным вредоносным кодом (хотя ниже предоставлю и его результаты сканирования), а использовал файл Eicar, популярный при тестировании антивирусов: это — своеобразная заглушка, на которую любой антивирус должен давать стойкий детект.

Итак, приступим.

Часть 3. Практика


Итак, как сейчас детектируется Eicar на VirusTotal


Признаться честно, увиденное меня несколько поразило, потому что два антивирусных движка — Comodo и Malwarebytes почему-то решили не следовать общим стандартам и проигнорировать детект. Тем не менее результат очевиден — файл имеет детект, близкий к 100%.

Как мы договаривались в самом начале, мы — полная школота, а потому не будем изобретать свои методы упаковки, а просто упакуем файл в архив с помощью 7Z:

7za a eicar.7z eicar.com

Проверим полученный файл на VirusTotal


Да, детектов стало поменьше, поскольку не все антивирусные движки включают распаковщик архивов 7Z (ну либо это настройка не включена в VirusTotal по умолчанию) — но всё равно детект высок.

Усложняем задачу: пакуем файл в архив с паролем. Пусть пароль будет fun:

7za a -mhe=on -pfun eicar-fun.7z eicar.com

Итог проверки очевиден


Файл — чист, поскольку даже имея процедуру распаковки антивирус не знает пароль на файл.

Детект снят — но мы не получили исполняемый файл.

В реальных пакерах решение бывает достаточно сложным и мы не будем вдаваться в эти подробности. Воспользуемся услугами QBC и напишем простейший скрипт:

7za e -pfun eicar-fun.7z
start eicar.com

Скрипт просто распаковывает архив и запускает полученный файл. QBC позволяет не только сформировать простейший исполняемый файл на основе этого скрипта, но и включить в этот файл необходимое (7za.exe и архив eicar-fun.7z), доступ к которому выполняется через переменную %myfiles%.

Полученный выполняемый файл может быть без открытия окна терминала (так называемый «Ghost»), а это нам как раз и надо:



Итоговый код выглядит следующим образом:

cd %myfiles%
7za e -pfun eicar-fun.7z
start eicar.com

После компиляции полученный файл dumb_bat.exe распаковывает Eicar и запускает его.

Смотрим итог проверки этого файла на VirusTotal


Забавно, детект уменьшился с 60 для неупакованного файла и 41 для архива до 17 — при этом ни один из антивирусных движков не обнаружил Eicar, детекты явно имеют эвристический характер, а в ряде случаев напоминают ложное срабатывание (DrWeb, Baidu и др.)

Пойдём дальше — добавим в наш скрипт защиту от исполнения в тестовой среде — простейшую проверку, что файл выполняется в реальной системе. Для этого запустим распаковку только при условии, что в системе есть диск D и на нём есть хотя бы один файл:

cd %myfiles%
if exist d:/* (7za e -pfun eicar-fun.7z)
start eicar.com

Смотрим детекты


Особое внимание — на низ таблицы, я его выделил отдельно, потому что на одну картинку всё не влезало:


Итак, проверка диска D «отломала» детекты китайцев, россиян и украинцев: Baidu, DrWeb, Zillya. При этом указанные движки, как и ряд других, были остановлены по таймауту (!)

Справедливости ради стоит отметить, что повторный запуск всё-таки довёл сканирование до конца


Однако в этом случае эксперимент нельзя считать «чистым», поскольку прошло значительное время после первой проверки.

Мне эта ситуация показалась любопытной — и я изменил строчку в коде на следующую:

...
if <b>not</b> exist d:/* (7za e -pfun eicar-fun.7z)
...

Итог проверки впечатляющий


Однако опять повторный скан всё-таки состоялся.


Налицо разница в работе эвристиков ряда антивирусов (AegisLab и Baidu почему-то не обнаружили ничего во втором случае), а также налицо проблема в сканировании в случае проверки на наличие диска D. Впрочем, возможно это совпадение, хотя в ходе всего исследования я больше ни разу не наблюдал «отвала» такого количества движков сразу.

Движемся дальше — добавим нашему файлу интерактивности, которой точно не будет ни в одной тестовой среде. Изменим скрипт — сделаем его полноценным консольным (не «Ghost»), а также добавим команду pause:

@cd %myfiles%
@pause
@if exist d:/* (7za e -pfun eicar-fun.7z) > nul
@start eicar.com

Вот как выглядит итог выполнения такого файла:



Я не хочу наговаривать на пользователей, но кажется мне, что практически каждый нажмёт клавишу в этом случае :) В любом случае перед нами простой пример, который может быть завернут куда в более яркую обёртку социального инжениринга.

Детект такого файла


6 детектов из 67. Шесть, Карл! Все — эвристические. И скорее всего ничего не подозревающий пользователь посчитает файл безопасным.

Интересный итог я получил после сжатия итогового файла с помощью UPX командой:

upx --best --ultra-brute --8086 --backup --compress-icons=3 dumb_bat3.exe

Если делать это для самого первого нашего кода - который был вообще без проверок, то по детектам отвалился Antiy-AVL


Для последней же версии файл уменьшился, суть не изменилась, а вот детектов прибавилось


Детекты добавили китайцы, а вот украинский Zillya благополучно провалил тест.

Часть 4. Выводы


А можно без них? ;) Ну ладно.

Безусловно, описанное выше — это примитивно, просто и в жизни всё не так. Хотя бы потому, что в реальности выполнение нашего файла сначала вызовет срабатывания проактивки, а потом будет заблокировано резидентным модулем, который увидит итоговый файл Eicar.

Но дело не в том.

Дело в том, что современные антивирусные сканеры так и остались барахлом, которым были десяток-два лет назад, абсолютно пасующим перед простейшими видами упаковки кода. Решения в виде тестовых сред — «песочниц», эвристических анализаторов и т.д. только добавили неразберихи, ложных срабатываний, но по сути не защищают от реальной угрозы. Со старым, открытым и разжёванным до потрохов UPX как был бардак — так он и остался. А ведь я вполне мог упаковать не файл, вызывающий вредоносную активность, а непосредственно код, работать не с файлами на диске в %temp%, а в памяти, использовать не свободно доступные утилиты, а собственные или закрытые разработки — и таким образом обойти срабатывание резидентной защиты. Я вполне мог добавить интересные элементы интерфейса или скопировать таковой из распространённой программы — и обойти проактивку у неискушённого пользователя, который просто будет соглашаться с любыми запросами, доверяя тому, что запустил.

То, что мы сделали выше — примитивный способ обмануть антивирус, который может понять и реализовать практически любой. И он сработал. Что говорить про искушённых специалистов!



Архив с файлами, скриптами и результатами можно скачать здесь.

В архив не вошло следующее (не войдёт и не будет предоставлено по любой просьбе по понятным причинам): файлы, обработанные по выше изложенному механизму и содержащие:

  • Файловый инфектор Sality.aa

    Результаты сканирования самого инфектора


    Позор джунглям


    Результаты сканирования 'упаковки'

  • Довольно громко нашумевший совсем недавно локер Petya

    Результаты сканирования самого инфектора


    Дважды позор джунглям


    Результаты сканирования 'упаковки'



Если Вы дочитали всё это до конца - нажмите здесь


Искренне надеюсь, что я был не скучен и ещё могу ясно излагать мысли по теме, как было когда-то раньше.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 60: ↑57 и ↓3+54
Комментарии127

Публикации

Истории

Работа

Ближайшие события

28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань