Как стать автором
Обновить
130.03
Солар
Безопасность за нами

Обход антивирусов в теории и на практике: краткий обзор способов и тестирование обфускаторов

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

Прошлой осенью я протестировала программное обеспечение для обхода антивирусов, которое применялось на различных тренировках у нас на киберполигоне. Для исследования я выбрала несколько инструментов обфускации и проверила, смогут ли общедоступные средства антивирусной защиты — Microsoft Defender, Kaspersky Total Security и VirusTotal — обнаружить вредоносную нагрузку в файлах после их обработки обфускаторами.

Исследование проводилось исключительно в образовательных целях для организации киберучений: на Национальном киберполигоне мы помогаем будущим специалистам по кибербезопасности и тем, кто уже работает в отрасли, без риска реального ущерба оттачивать на практике навыки defensive security. Участники учений тренируются на эмулированной инфраструктуре предприятий различных отраслей выявлять цепочки атак, сценарии которых повторяют действия реальных злоумышленников, в том числе и обход антивирусов.

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

Краткий обзор способов обхода антивирусов

Code signing

Суть этого способа заключается в подписании кода цифровыми сертификатами. Злоумышленники используют сертификаты, выдавая своё ПО за легитимное. Сертификаты могут попадать к ним как в результате supply chain атак, так и после приобретения в даркнете. Более того, одни и те же сертификаты могут использоваться разными хакерскими группировками. Один из самых ярких примеров: злоумышленники взломали сервер компании ASUS и распространяли под видом обновлений вредоносное ПО, подписанное её сертификатом.

Пример рекламы услуг по подписи ВПО легитимными сертификатами
Пример рекламы услуг по подписи ВПО легитимными сертификатами

DLL Hijacking

Под этим методом обхода антивирусов подразумевается выполнение вредоносного кода через доверенный файл путем подмены DLL. Для предотвращения обнаружения зараженные DLL-файлы имитируют цифровую подпись приложения.

Masquerading

Маскировка сетевого взаимодействия и легитимности запуска применяется повсеместно. C&C-серверы (Command and Control server), отличающиеся от доменов Microsoft на один-два символа, — обычная практика, а количество процессов svchost, подписанных издателем Microsoft Corporation, практически вдвое больше легитимных на зараженных системах и сайтах.

XOR

Этот метод скрывает данные путем изменения содержимого переменных внутри кода. Оператор XOR популярен для обфускации, поскольку он прост в использовании, хорошо выполняет свою работу и предлагает гибкие реализации.

Вставка мертвого кода

Этот способ подразумевает добавление к исходному коду неэффективных и бесполезных частей кода. Это могут быть различные инструкции: часть из них ничего не делают, другие изменяют состояние программы, но потом возвращают обратно предыдущее состояние. Могут быть и инструкции переходов, которые не позволяют вставленным инструкциям получить управление во время выполнения программы. Такими изменениями нельзя запутать человека, осуществляющего реверс, но вполне можно воспрепятствовать нормальной работе антивирусных сканеров.

Изменения в инструкции

Метод смены инструкций схож со способом, описанным выше. Разработчики вредоносных программ изменяют коды инструкций в исходном коде, что приводит к изменению его внешнего вида, в то время как поведение остается прежним. Таким образом, это затрудняет реверс-инженерам обратную разработку, когда они просматривают инструкции, чтобы понять логику, реализованную в коде.

Malware packers

Упаковщики сжимают исходный код, уменьшая таким образом размер кода. Затем сжатый исполняемый файл упаковывается в код, необходимый для распаковки во время выполнения. Процесс распаковки гарантирует, что исполняемый файл совсем не похож на исходный. Яркий пример упаковщиков — Rex3Packer. В 2020 году его использовала киберпреступная группировка RTM при распространении одноименного банковского трояна. Подробный алгоритм работы этого пакера можно прочитать по ссылке. Еще один упаковщик группы RTM HellowinPacker существует с 2014 года, он использовался в различном массовом вредоносном ПО. Особенности этого пакера подробно описаны по ссылке.

Крипторы

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

Использование известных веб-сервисов

Для сокрытия каналов управления и дополнительной маскировки могут использоваться известные веб-сервисы, как в случае с группировкой Carbanak, которая хранила свои скрипты на Google Docs и Pastebin.

Code injection

Этот метод включает различные техники, опишу их по порядку. Один из способов, process injection, подразумевает загрузку стороннего кода в память другого процесса и работу от имени запущенного приложения. Наиболее распространенными в этих случаях являются DLL-инъекции. Стоит обратить внимание на внедрение DLL через вызов WinAPI функций loadlibrary. Вредоносная программа записывает путь к своей библиотеке динамической компоновки (DLL) в виртуальном адресном пространстве другого процесса и обеспечивает ее загрузку удаленным процессом, создавая удаленный поток в целевом процессе.

Другой метод, process ghosting, позволяет записать на диск вредоносное ПО таким образом, чтобы его было сложно сканировать или удалить, после чего злоумышленник может удаленно запускать ВПО, как если бы это был обычный файл на диске. Реализация этого способа возможна, так как подделать исполняемый файл перед сканированием антивирусными продуктами можно в течение определенного периода времени между моментом создания процесса и моментом, когда продукты безопасности «узнают» о его создании. Метод подробно описан в статье.  

Еще один способ, process hollowing, дает возможность загружать в систему легитимный процесс, который действует как оболочка для враждебного кода. В качестве примера тут можно привести скрытие вредоносного процесса легитимным процессом svchost.exe. Этот метод хорошо изучен исследователями по кибербезопасности, и, по моему опыту, антивирусы с легкостью его идентифицируют.

Living off the land

Это класс техник, при которых злоумышленник для достижения своих целей использует легитимные средства и встроенные возможности ОС: загрузку файлов, сокрытие и выполнение кода. В качестве примера тут можно привести инструментарий Sysinternals (PSexec), встроенные в ОС утилиты rundll32.exe, regsvr32.exe, msbuild.exe, возможности PowerShell. Примеры техник доступны в репозитории.

Обход AMSI (Anti-Malware Scan Interface)

Механизмы AMSI используют сигнатурное детектирование угроз. Для обхода этой технологии могут использоваться различные методы. Например, метод function hooking позволяет получить управление над функцией до ее вызова. Еще один способ, патчинг памяти, заключается в возвращении в любом случае значения «Проверка пройдена успешно». Для его реализации используются инструменты NoAmci, AmsiScanBufferBypass и его модификация. Также для обхода AMSI применяется исправление счётчика буфера сканирования. Этот способ позволяет считывать нулевое количество входных символов вместо переданных в PowerShell. Еще один известный метод — PowerShell downgrade, он реализуется путем обращения к PowerShell версии 2.0.

Malware obfuscation

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

Обфускаторы vs. антивирусы: что показало тестирование на практике

В качестве объектов исследования я выбрала семь инструментов обфускации: Shellter, HanzoInjection.exe, FuckThatPacker, Chimera, LoGiC.NET, Invoke-Obfuscation и Simple-Loader. Используя MSFvenom, я сгенерировала полезную нагрузку reverce tcp meterpreter и проверила полученные вредоносные файлы с помощью средств антивирусной защиты в два этапа — до и после обфускации. Для проверок задействовала встроенный антивирус операционной системы Windows Microsoft Defender версии 4.18.2110.6, файловый антивирус для Windows Kaspersky Total Security версии 21.1.15.500, а также веб-сервис VirusTotal. При этом работоспособность бинарных файлов сохранялась после обфускации и с отключенным антивирусным ПО. Далее расскажу, как тестировала каждый из инструментов и приведу сравнительную таблицу с результатами исследования.

Shellter

Это инструмент динамического внедрения шелл-кода, также известный как динамический PE-инфектор. Shellter имеет возможность использовать легитимный файл Windows.exe и добавить к нему код-оболочку, а затем выполнить работу по модификации файла для обхода антивирусной защиты. В качестве файла, входящего в состав ОС Windows, я использовала plink.exe, который был передан на вход обфускатору. Был выбран автоматический режим «A». В приглашении PE Target я ввела «plink.exe», затем выбрала «L» и после — «1». Далее ввела IP Kali и порт, который собиралась слушать. Однако файл все равно обнаруживался Microsoft Defender и Kaspersky Total Security. VirusTotal выдал 18 из 69.

Полезные нагрузки, которые могут использоваться напрямую через Shellter
Полезные нагрузки, которые могут использоваться напрямую через Shellter

HanzoInjection.exe

Это инструмент, ориентированный на внедрение произвольного кода в память для обхода распространенных антивирусных решений. Для проверки обфускатора на вход был передан файл reverse_tcp.bin (type raw). Из исследуемых мной инструментов HanzoInjection был первым обфускатором, который не обнаружили ни Microsoft Defender, ни Kaspersky Total Security. Таким образом, можно предположить, что этот обфускатор позволяет обойти файловый антивирус. Однако в моем случае в процессе запуска модуля анализа поведения Kaspersky Total Security обнаруживал и приостанавливал действие программы. При этом VirusTotal выдал 0 из 58.

Пример использования обфускатора HanzoInjection.exe
Пример использования обфускатора HanzoInjection.exe

FuckThatPacker

Программа представляет собой простой упаковщик на Python для обхода Microsoft Defender, о других антивирусах речи не идёт. Для проверки я использовала, как и раньше, файл с полезной нагрузкой (reverse_tcp.ps1). Зараженный файл не обнаружили ни Microsoft Defender, ни файловый модуль Kaspersky Total Security, а VirusTotal выдал срабатывания сигнатур 9 из 58 антивирусов.

Обфускация файла с помощью FuckThatPacker
Обфускация файла с помощью FuckThatPacker

Chimera

Chimera — это сценарий обфускации PowerShell, разработанный для обхода AMSI и антивирусных решений. Он обфусцирует вредоносные файлы с расширением .ps1, которые запускают антивирус, используют подстановку строк и конкатенацию переменных для обхода обычных сигнатур обнаружения. На вход был принят reverse_tcp.ps1. Microsoft Defender и Kaspersky Total Security обнаружили зараженный файл, на VirusTotal после обфускациииз 59 антивирусов было только одно срабатывание ATK/ChimeraPS-A.

Результат выполнения обфускации файла
Результат выполнения обфускации файла

LoGiC.NET

LoGiC.NET — это бесплатный обфускатор файлов с расширением .NET с открытым исходным кодом, использующий dnlib. Исполняемый файл на скриншотах ниже был обфусцирован с помощью LoGiC.NET версии 1.5. На вход был передан VanillaRAT.exe, так как требовался .NET проект. Файл не перестал обнаруживаться ни Microsoft Defender, ни Kaspersky Total Security, при этом последний моментально поместил обфусцированный файл в карантин. VirusTotal при проверке файла до обфускации обнаружил 22 подходящие сигнатуры антивирусов, после обфускации – 20 сигнатур.

Обфускация VanilaRAT.exe
Обфускация VanilaRAT.exe
Проверка на VirusTotal до использования обфускатора
Проверка на VirusTotal до использования обфускатора
Проверка на VirusTotal после использования обфускатора
Проверка на VirusTotal после использования обфускатора
При проверке файла на VirusTotal ESET-NOD32 перестал обнаруживать файл после обфускации
При проверке файла на VirusTotal ESET-NOD32 перестал обнаруживать файл после обфускации

Invoke-Obfuscation

Invoke-Obfuscation — средство для обфускации каждого вида «токенов», обнаруженных в любой команде или скрипте PowerShell. Инструмент позволяет кодировать в форматах ASCII, HEX, Octal, Binary, SecureString (AES) или BXOR. После установки этого обфускатора на вход был передан файл reverse_tcp.ps1 (при создании полезной нагрузки указан флаг psh) с помощью команды SET SCRIPTPATH C:\Users\User\Desktop\reverse_tcp_psh.ps1, после чего требовалось выбрать необходимую опцию. В моём случае это была опция ENCODING. Затем я указала вариант кодировки (1), и далее обфускатор выдал зашифрованный результат. Полученный результат я скопировала в файл Invoke_reverse.ps1, после чего запустила его, и Kali получил сессию.

Результат выполнения обфускатора Invoke-Obfuscation
Результат выполнения обфускатора Invoke-Obfuscation

Файловый модуль Kaspersky Total Security поместил в карантин и начальный, и конечный файлы, а VirusTotal выдал 6 из 59 вредоносных сигнатур после обфускации.

Изначальный файл reverse_tcp.ps1 23 из 58
Изначальный файл reverse_tcp.ps1 23 из 58
Обфусцированный файл Invoke_reverse.ps1, 6 из 59 срабатываний
Обфусцированный файл Invoke_reverse.ps1, 6 из 59 срабатываний

Simple-Loader

Результат выполнения обфускатора Simple-Loader
Результат выполнения обфускатора Simple-Loader

Одним из самых действенных способов обхода Microsoft Defender считается использование загрузчика кода оболочки. Таким инструментом является Simple-Loader. Разработчики указывают, что для его применения необходимо создать полезную нагрузку с помощью MSFVenom, сохранить ее в текстовый файл, а затем закодировать с помощью двоичного файла Simple-Loader.exe, после чего заменить переменную hiphop закодированным значением. Однако в моем случае после выполнения перечисленных действий VirusTotal и антивирусы, на которых проводились исследования, успешно обнаружили обфусцированный файл.

Проверка на VirusTotal после использования обфускатора
Проверка на VirusTotal после использования обфускатора

Сравнительная таблица с результатами тестирования инструментов обфускации для обхода антивирусов

Примечание. В таблице приведены результаты проверок вредоносных файлов с помощью средств антивирусной защиты до и после обфускации. Для проверок использовались Microsoft Defender версии 4.18.2110.6, Kaspersky Total Security версии 21.1.15.500 и веб-сервис VirusTotal.

Инструменты

Microsoft Defender

Kaspersky Total Security

VirusTotal

Комментарии

Shellter

до

+

+

27/60

Если для примера использовать meterpreter reverse.tcp, то после обфускации с помощью Shellter файл обнаруживается. При помещении бэкдора с meterpreter reverse_tcp в легитимный файл Windows (plink.exe) зараженный файл все равно детектируется на VirusTotal 18/69.

после

+

+

18/69

HanzoInjection.exe

до

+

+

27/58

На вход необходимо передавать reverse_tcp.bin (type raw).

после

-

-

0/58

FuckThatPacker

до

+

+

22/59

На вход принимает PowerShell-скрипты, в данном случае была передана полезная нагрузка reverce tcp meterpreter с расширением файла ps1. После обфускации работоспособность файла сохранилась.

после

-

-

9/58

Chimera

до

+

+

20/58

На вход принимает PowerShell-скрипты. Имеет несколько уровней степени запутывания. Для проверки использовался файл Invoke-PowerShellTcp.ps1. Если использовать флаг Reverse, сценарий может подключаться к netcat, который слушает порт.

после

+

+

одно срабатывание ATK/ChimeraPS-A

LoGiC.NET

до

+

+

22/68

Если на вход передавать VanilaRAT.exe, то обфускатор срабатывает, если использовать reverse.exe, то выдает ошибку.

после

+

+

20/68

ESET-NOD32 перестает срабатывать

Invoke-Obfuscation

до

+

+

23/58

На вход передаем reverse_tcp.ps1 в формате psh с помощью команды SET SCRIPTPATH C:\Users\User\Desktop\reverse_tcp_psh.ps1, после чего выбираем опцию (я выбрала ENCODING), указываем вариант кодировки (1), далее обфускатор выдает зашифрованный результат. Результат я скопировала в файл Invoke_reverse.ps1, запустила его и получила пользовательскую сессию.

после

+

+

6/59

Simple-Loader

до

+

+

33/70

На вход подается reverse.txt в формате csharp. Разработчики рекомендуют создать полезную нагрузку с помощью MSFVenom, сохранить её в текстовый файл и зашифровать с помощью двоичного файла Simple-Loader.exe. Затем нужно взять вывод из Simple-Loader и заменить Sting hiphop на новую полезную нагрузку. После этого антивирус должен перестать детектировать зараженный файл. В результате выполнения всех указанных действий обфусцированный файл Simple-Loader.exe отправляет пользовательскую сессию, но обнаруживается антивирусным ПО.

после

+

+

33/70

Послесловие

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

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

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

Автор: Анна Чадина, эксперт отдела исследований кибербезопасности и разработки сценариев киберучений Национального киберполигона компании «Ростелеком-Солар»

Теги:
Хабы:
+13
Комментарии5

Публикации

Информация

Сайт
rt-solar.ru
Дата регистрации
Дата основания
2015
Численность
1 001–5 000 человек
Местоположение
Россия