Всем привет.
Ниже будет много глупого текста, ностальгических воспоминаний и школотного кода. Кроме того будет рассмотрена эффективность сервиса VirusTotal, а также антивирусных движков в отношении исполняемых файлов.
Часть 1. Бредово-ностальгическое вступление
В моей жизни многое поменялось.
Мне стала интересна (местами — до недосыпов) моя текущая работа, в моём регионе четвёртый год идёт война, многое изменилось и переосмыслилось в личной жизни.
Многие взгляды и мнения изменились.
Лет 15-20 назад мне была интересна тема взлома и написания вредоносного кода, потом интересы сменились на прямо противоположные — защиту от этого дела, а потом я понял, что всем правят деньги и личные интересы, а вовсе не альтруизм и желание помочь.
Но то такое. В любом случае ИТ оказалось частью даже моей настоящей работы, хотя вовсе не относится к исходной специализации.
Лет 10 назад я написал в очень узком кругу про возможность снятия детекта антивируса с помощью самораспаковывающихся архивов. Тогда это было, кажется, на Virusinfo, потом кое-кто это перепостил под своим ником на DrWeb — так сказать, без копирайтов и со своим авторством, потом даже скандал был — но то тоже давно и неправда.
А недавно я вспомнил старое. Многое прошло, многие вещи обновились и угнаться за прогрессом, не варясь в теме, оказалось сложно.
Но суть осталась та же: сенсации, деньги и личные интересы. И игра на незнаниях — которые доходят иногда до того, что уязвимости Meltdown/Spectre ищут в телевизорах и бортовых компьютерах автомобилей )))
Но довольно этого неинтересного бреда. Итак, я решил вспомнить старое, а поскольку вспомнилось мало — то решил по старинке снять детекты с нескольких вирусов.
Нам потребуется:
- знания командных bat-скриптов Windows на уровне школьника.
- Quick Batch File Compiler (далее — QBC)
- 7za.exe из пакета 7z1800-extra.7z (далее — 7Z)
- upx.exe из пакета upx394w.zip (далее — UPX)
- файл eicar.com, скачать можно, например, тут (далее — Eicar)
- cамый базовый компьютер с выходом в интернет под управлением любой ОС Windows
Часть 2. Совсем немного теории
Для того, чтобы двигаться дальше, давайте разберёмся, о чём пойдёт речь.
В настоящий момент, как, впрочем, и ранее, активно продвигается тема антивирусов. Дескать, антивирусы помогают не допустить потери важных данных, антивирусы спасают от уязвимостей, антивирусы — то, антивирусы — сё и так далее.
При этом зачастую рядовой пользователь даже не понимает, что антивирус — это не просто сканер, это и резидентная защита, и эвристик, а зачастую — и проактивная защита, файервол и песочница.
Каждому из этих компонентов мы можем посвятить не то что статью — книгу, но остановимся на самом базовом: сканере.
Этот компонент не позволит предотвращать соединения с вредоносными сайтами, он не будет ловить вредоносный код на лету, но он позволяет проверить файл и дать ответ: стоит его хранить — или лучше удалить сразу и навсегда.
Ниже мы протестируем разные движки антивирусов и посмотрим, насколько они справляются с этой задачей хорошо.
Отдельно хотелось бы отметить ресурс VirusTotal — он позволяет не только проверить файл различными движками антивирусов, но и представляет собой некую песочницу по тестированию вредоносного (и вообще любого) кода. Плюс платформы — бесплатность, минус — все образцы, которые высылаются на VirusTotal впоследствии передаются всем антивирусным лабораториям.
Именно по этой причине ниже я не буду давать ссылки на страницы с результатами сканирования, а предоставлю скриншоты с этими результатами, полученными в ходе работы. Очевидно (и я хочу в это верить!) после этой статьи результаты улучшатся.
Авторы вредоносного кода чрезвычайно часто используют упаковщики и протекторы, которые не только сжимают вредоносный файл, но и затрудняют его детектирование по сигнатурам, а также его последующий анализ. При использовании ворованных лицензий протекторов типа WinLicense и Themida обычно антивирусные лаборатории не затрудняют себя распаковкой, а просто добавляют сигнатуры протектора с ворованным ключом в детект (знаменитые детекты типа Trojan:W32/Black.A). Это приводит к появлению ложных срабатываний — аналогичными ворованными лицензиями пользуются авторы генераторов ключей, патчеров и некоторых программ, которые по сути вредоносными не являются, но тем не менее защищаются от реверсинга.
Поскольку всё, описанное в этой статье, ниже будет предоставлено читателю для ознакомления, я не работал с реальным вредоносным кодом (хотя ниже предоставлю и его результаты сканирования), а использовал файл Eicar, популярный при тестировании антивирусов: это — своеобразная заглушка, на которую любой антивирус должен давать стойкий детект.
Итак, приступим.
Часть 3. Практика
Признаться честно, увиденное меня несколько поразило, потому что два антивирусных движка — Comodo и Malwarebytes почему-то решили не следовать общим стандартам и проигнорировать детект. Тем не менее результат очевиден — файл имеет детект, близкий к 100%.
Как мы договаривались в самом начале, мы — полная школота, а потому не будем изобретать свои методы упаковки, а просто упакуем файл в архив с помощью 7Z:
7za a eicar.7z eicar.com
Да, детектов стало поменьше, поскольку не все антивирусные движки включают распаковщик архивов 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 и запускает его.
Забавно, детект уменьшился с 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 not 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
Детекты добавили китайцы, а вот украинский Zillya благополучно провалил тест.
Часть 4. Выводы
А можно без них? ;) Ну ладно.
Безусловно, описанное выше — это примитивно, просто и в жизни всё не так. Хотя бы потому, что в реальности выполнение нашего файла сначала вызовет срабатывания проактивки, а потом будет заблокировано резидентным модулем, который увидит итоговый файл Eicar.
Но дело не в том.
Дело в том, что современные антивирусные сканеры так и остались барахлом, которым были десяток-два лет назад, абсолютно пасующим перед простейшими видами упаковки кода. Решения в виде тестовых сред — «песочниц», эвристических анализаторов и т.д. только добавили неразберихи, ложных срабатываний, но по сути не защищают от реальной угрозы. Со старым, открытым и разжёванным до потрохов UPX как был бардак — так он и остался. А ведь я вполне мог упаковать не файл, вызывающий вредоносную активность, а непосредственно код, работать не с файлами на диске в %temp%, а в памяти, использовать не свободно доступные утилиты, а собственные или закрытые разработки — и таким образом обойти срабатывание резидентной защиты. Я вполне мог добавить интересные элементы интерфейса или скопировать таковой из распространённой программы — и обойти проактивку у неискушённого пользователя, который просто будет соглашаться с любыми запросами, доверяя тому, что запустил.
То, что мы сделали выше — примитивный способ обмануть антивирус, который может понять и реализовать практически любой. И он сработал. Что говорить про искушённых специалистов!
Архив с файлами, скриптами и результатами можно скачать здесь.
В архив не вошло следующее (не войдёт и не будет предоставлено по любой просьбе по понятным причинам): файлы, обработанные по выше изложенному механизму и содержащие:
Комментариев нет:
Отправить комментарий