Как обойти проверку на вирусы
Обновлено: 25.04.2024
Создание уникального вредоносного ПО требует больших ресурсов, поэтому многие хакерские группировки используют в своих атаках массовое, часто публично доступное ВПО. Широкое использование неизбежно приводит к тому, что такой инструмент попадает на радары антивирусных компаний, а его эффективность снижается.
Полная версия данного исследования доступна по ссылке.
Packer-as-a-service
Хакерская группа, стоящая за распространением RTM, до конца 2020 года регулярно проводила массовые фишинговые рассылки с вредоносными вложениями. Этот процесс, по всей видимости, происходил автоматически.
Каждое такое вложение содержало существенно отличающиеся друг от друга файлы, при этом итоговая полезная нагрузка практически не менялась.
Пример архива RTM
При исследовании по-новому упакованных образцов нам удалось обнаружить множество другого ВПО, которое было защищено аналогичным образом. Пересечения с другими вредоносами с учетом автоматизации процесса упаковки, на наш взгляд, позволяют говорить об использовании злоумышленниками модели packer-as-a-service. В этой модели упаковка вредоносных файлов делегируется специальному сервису, которым управляет третья сторона. Доступ к таким сервисам часто продается на хакерских форумах.
Rex3Packer
Первое использование этого пакера группой RTM, которое нам удалось обнаружить, относится к ноябрю 2019 года. Активное же его применение, по нашим данным, приходится на период апрель—май 2020 года.
Фишинговое письмо RTM, январь 2021
Нам не удалось связать этот упаковщик с каким-либо из ранее описанных публично, поэтому мы дали ему свое название по трем особенностям его устройства: наличию рекурсии (recursion), реверса битов (reverse) и рефлективной загрузки PE-файлов (reflection) — Rex3Packer.
Алгоритм распаковки
Общий алгоритм извлечения полезной нагрузки выглядит так:
С помощью VirtualAlloc выделяется заранее определенное количество памяти с правами на чтение, запись и исполнение.
В выделенный буфер копируется содержимое образа текущего процесса в памяти (в частности, секция .text).
Управление передается на функцию внутри буфера.
Вычисляется разница между положением одних и тех же данных в буфере и в образе PE-файла (разность между адресами в буфере и виртуальными адресами в образе). Эта разность заносится в регистр ebx. Все обращения к виртуальным адресам в коде проиндексированы содержимым этого регистра. За счет этого везде, где это необходимо, к адресам из PE-образа добавляется поправка, которая позволяет получить соответствующий адрес в буфере.
Выделяется еще один буфер под упакованные данные.
Через вызов VirtualProtect устанавливаются права RWX на весь регион памяти с образом PE-файла.
Упакованные данные копируются в свой буфер.
Происходит декодирование упакованных данных.
Регион памяти с образом PE заполняется нулевыми байтами.
Декодированные данные представляют собой исполняемый файл — PE-нагрузку. Эта полезная нагрузка рефлективно загружается на место исходного PE-образа, а управление передается на ее точку входа.
Отдельный интерес представляет специфический алгоритм декодирования упакованных данных. В данном случае некорректно говорить об упаковке как о сжатии: алгоритм устроен так, что размер упакованных данных всегда больше размера исходных.
Непосредственно упакованным данным предшествует заголовок размером 16 байт, который содержит 4 поля по 4 байта:
размер самого заголовка,
размер исходных данных (PE-нагрузки),
позиция в исходных данных (*), по которой происходит их разделение,
режим кодирования (1, 2, либо 4).
Декодирование выполняется следующим образом:
Внутри каждого байта выполняется реверс порядка битов (к примеру, 10011000 становится 00011001).
В зависимости от режима кодирования (1, 2, 4), данные разбиваются на блоки размером N = 9, 5, либо 3 байта соответственно. Результат декодирования блока — это (N – 1) байт (то есть 8, 4, или 2).
В первых N-1 байтах блока отсутствует часть битов: их значения всегда равны нулю. Чтобы восстановить оригинальные байты, с помощью масок вида 00000001, 00010001 или 01010101 из последнего байта блока извлекаются недостающие биты. При этом для каждого следующего байта маска сдвигается. То есть последний байт блока фактически составлен из объединенных логической операцией OR битов, которые извлечены из предыдущих байтов.
Например, в режиме 4 последний байт состоит из четных битов первого байта блока и нечетных битов второго байта блока. В результате возврата этих битов в первый и второй байты получается оригинальная последовательность из двух байт.
Схема получения исходных байтов в режиме 4
4. После операции по восстановлению битов во всех блоках полученные данные представляют собой исходный PE-файл, который был разделен по позиции (*) на две части. Эти части, в свою очередь, были переставлены между собой. Обратная перестановка с учетом значения (*) позволяет получить оригинальный файл.
Обфускация
Чтобы усложнить анализ кода, в пакере применяется различного рода запутывание:
В промежутках между исполнением полезных команд делаются вызовы различных функций WinAPI. Их результаты сохраняются, но не используются, а сами функции выбираются так, чтобы не влиять на работу программы.
Характерная особенность данного пакера — наличие циклов (не выполняющих полезных операций), которые реализуются через рекурсивную функцию.
Для дополнительного запутывания в исполняемый файл добавляется несколько десятков случайно сгенерированных функций. Они могут ссылаться друг на друга, но в процессе работы ни одна из них не получает управления.
Использование
Кроме экземпляров RTM, мы обнаружили использование Rex3Packer для упаковки различного ВПО, в основном из стран СНГ.
Также мы отметили использование пакера для упаковки экземпляров ВПО из семейств Nemty, Pony, Amadey.
HellowinPacker
В мае 2020 группа RTM переключилась на использование нового упаковщика — HellowinPacker, который продолжала активно использовать до начала 2021 года. Ключевой особенностью этого пакера является два уровня мутации кода. Первый из них существенно меняет структуру кода распаковки, делая различные образцы не похожими друг на друга.
Сравнение кода в двух экземплярах разной структуры
Второй уровень меняет лишь отдельные детали при неизменной в целом структуре кода. При этом изменения главным образом затрагивают ассемблерные инструкции и не влияющие на работу программы константы. В результате в декомпилированном виде код выглядит практически идентичным.
Сравнение кода в двух экземплярах одной структуры
Так же, как и в случае с Rex3Packer, мы имеем дело с массовым использованием HellowinPacker для упаковки различного ВПО. При этом вредоносное ПО из одного семейства, как правило, имеет в упакованном виде одну и ту же структуру. Это можно пронаблюдать, по крайней мере, на протяжении некоторого времени — затем структура может измениться.
Алгоритм распаковки
Одни из первых действий, которые встречаются во всех упакованных файлах — это попытки открыть ключ реестра HKEY_CLASSES_ROOT\Interface\ (регистр символов в конкретном случае может отличаться) и запросить в нем значение по умолчанию (Default). От успешности этих операций в некоторых модификациях генерируемого кода зависит корректное продолжение работы программы.
GUID интерфейса в разных случаях также может отличаться.
Дальнейший код некоторым образом получает адрес, по которому располагается блок зашифрованных данных.
Этот блок начинается с четырехбайтного числа, которое хранит размер исходных данных (тех, которые будут получены после декодирования). Вызовом VirtualAlloc под расшифрованные данные выделяется блок памяти нужного размера с правами RWX. В выделенную память блоками по X байт копируются зашифрованные данные. При этом в оригинальном файле между этими блоками располагаются пропуски длиной Y байт.
Схема копирования данных в HellowinPacker
Затем происходит процесс дешифровки блоками по 4 байта:
очередной блок интерпретируется как целое число (DWORD),
к его значению прибавляется индекс первого байта в блоке,
выполняется операция xor между полученным значением и суммой индекса и фиксированного ключа, числа Z.
Обфускация
Как и в случае с Rex3Packer, в экземплярах с HellowinPacker встречаются вызовы функций WinAPI, не относящихся к основной логике программы. Однако в данном случае они используются скорее как способ затруднить поведенческий анализ и детектирование в песочницах. В пользу этого предположения говорит то, что в большинстве случаев разнообразные функции вызываются подряд в самом начале программы.
Точка входа в одной из упакованных библиотек
Дополнительным эффектом от такого использования WinAPI становится невозможность детектирования по списку импортируемых функций и imphash.
При работе с различными числовыми значениями часто встречается некоторая арифметическая обфускация: необходимые константы представляются в виде суммы или разности других констант (в определенных случаях равной нулю). При этом для получения констант могут быть использованы и вызовы функций WinAPI, дающие предсказуемый результат (например, 0 в случае неудачи).
Использование
HellowinPacker существует по крайней мере с 2014 года. За это время он был использован в различном массовом вредоносном ПО. Вот лишь несколько примеров:
Я не буду комментировать предложенную концепцию — с этой задачей успешно справятся производители антивирусов. Суть в другом: обход антивирусной защиты — не наука о ракетах, требующая концептуального подхода, а вполне обыденное явление. Для иллюстрации этого факта я приведу несколько технических примеров из жизни.
Примеры будут извлечены из нашей любимой зверюшки — бота-руткита TDSS, о котором в последнее время много говорят. Что и не удивительно: это один из наиболее распространенных, технически продвинутых и активно развивающихся ботов.
На диаграмме слева отображена статистика по антивирусным защитам, установленным на компьютерах пользователей одновременно с заражением TDSS.
- Исходные данные — статистика от пользователей утилиты TDSS Remover за первый квартал 2010 г.
- Всего было обработано порядка тысячи зараженных машин
- Из них 12% были оснащены известными нам антивирусами
- На диаграмме не отображена статистика по антивирусам, которые провалили лечение, но при этом не блокируют и не скрывают свои файлы. Факт блокировки или скрытия файлов попадает в статистику, как значимая для антируткита аномалия.
Несколько слов о зверюшке
Появившись около двух лет назад, бот-руткит TDSS (также известный как Alureon, Tidserv, TDL/TDL2/TDL3+) тихо и незаметно размножился до тревожных цифр.
Фактически, на протяжении всего времени существования TDSS, он был непрерывно недостижим для всех существующих средств защиты, включая наиболее популярные антивирусы и профессиональные антируткиты. Более того, до недавнего времени бот незаметно развивался под прикрытием собственной эффективности, так как производителям антивирусов было невыгодно предавать огласке угрозу, с которой они не справляются.
Обход антивирусов: техническая справка
Примеры техник обхода защиты
Техники приведены в том порядке, в каком мы находили их в эволюционирующем TDSS. Все описанные приемы уже не столь эффективны, как были на момент их появления.
Пример №1. Системный кеш динамических библиотек
Суть техники: вредоносный код размещается в системном кеше часто используемых библиотек \KnownDLLS, откуда вызывается легитимным системным приложением при использовании им одной из этих библиотек.
// 1. размещаем вредоносный код в кеше часто используемых библиотек
NtCreateSection(”\knowndlls\dll.dll”)
// 2. обеспечиваем переход на этот код из легитимной библиотеки,
// пока что - в ее копии на диске
CopyFile(”msi.dll”, "patched_msi.dll")
WriteFile("patched_msi.dll", )
// 3. подменяем эту библиотеку в кеше
NtOpenSection(”\knowndlls\msi.dll”)
NtMakeTemporaryObject(. ) // секция стала временной, и теперь может быть.
CloseHandle(. ) // удалена
NtCreateSection(”patched_msi.dll”)
// 4. вызов системного сервиса, который исполнит код msi.dll => dll.dll
StartService (”Windows Installer (msiexec.exe)”)
Пример №2. Диспетчер печати
Суть техники та же, что и в предыдущем примере — пассивное внедрение в системный процесс. Механизм несколько иной: вредоносный код подсовывается сервису диспетчера печати под видом его служебной библиотеки.
//1. копируем вредоносный код в служебную директорию диспетчера печати
GetPrintProcessorDirectory(. )
GetTempFileName(. )
CopyFile(,)
// 2. сервис диспетчера печати должен быть запущен
StartService("spooler")
// 3. передаем ему вредоносный код
AddPrintProcessor()
Пример №3. Заражение легитимного драйвера
Предыдущие примеры иллюстрировали обход поведенческой защиты. Теперь рассмотрим, как TDSS избегает обнаружения и лечения.
В конце апреля бот в очередной раз обновился.
version= 3.273
builddate= 20.4.2010 16:17:53
- Файлы atapi.sys/iastor.sys под бдительным наблюдением защиты? — В новой версии заражается случайный драйвер.
- Поведенческие защиты научились замечать вызов функции AddPrintProcessor — он был заменен на вызов схожей функции AddPrintProvidor. (!)
- Некоторые утилиты-лечилки добирались до защищенных областей руткита на диске через интерфейс SCSI Pass Through — в новой версии руткита соответствующие этому механизму IRP фильтруются.
Техники же сложные (как в Примере №3) или хитрые (Примеры №1 и 2) больше характерны для хорошо финансируемых целевых руткитов. Открытым остается вопрос, потеряла ли команда TDSS своего лучшего разработчика, или все же изрядную долю финансирования.
В данном руководстве будут описаны методы и техники, которые позволят осуществить обход антивирусной защиты.
Глава 1. Вступление
На протяжении последних 10 лет простые антивирусы, использующие для проверки уже существующие сигнатуры угроз, постоянно приобретают новые и все более современные эвристические функции. Большинство антивирусов способно проверять как файлы на локальных дисках, таки и опкоды (opcodes) в памяти.
Опкоды – это команды на языке программирования Ассемблер, используемые на самом нижнем уровне программирования для настройки взаимодействия приложений с ЦП. Приложения, как правило, разрабатываются на языках более высокого уровня, в которых не применяются опкоды, например в C или C++. Компилятор, в свою очередь, переводит высокоуровневый код в опкоды, руководствуясь требуемой архитектурой и пр.
Когда обычный антивирус сканирует файл, он производит чтение смещений и им присвоенных значений. Смещение следует рассматривать как адрес в памяти, а значение, как опкод, который рассматривается сканером в шестнадцатеричной кодировке. Таким образом, сканер может производить поиск по сигнатурам. Если приложение успешно проходит проверку антивирусом без использования эвристических функций, этот файл либо не содержит вредоносный код, либо он обошел проверку сигнатур.
В данном руководстве будут описаны методы и техники, которые позволят осуществить обход антивирусной защиты.
Глава 2 Структура PE файлов
Формат файла PE (Portable Executable) используется Windows для обработки бинарных файлов по умолчанию (Рис. 2.1). Стоит отметить, что не все бинарные файлы состоят из 5 секций. Они также могут состоять из 4, 6 или 7 секций, в зависимости от их построения.
Сигнатура, которая приводит в действие антивирусное приложение, может быть размещена где угодно, однако обычно ее стоит искать в одной из основных секций, а не в заголовках таблиц секций, заголовках DOS и пр.
Рис. 2.1: Структура PE файла
2.1 – Антивирусные сигнатуры и PE формат
Процесс поиска сигнатур антивирусом не сложный, если он выполняется классическим способом путем разделения сложных файлов на простые, и последующего поиска сигнатур в простых файлах.
Иногда сигнатуры находятся очень просто, например, при использовании ncx99.exe. ncx99.exe – это простой netcat listener, привязывающий cmd.exe к 99 порту на внешнем сетевом интерфейсе. На рис. 2.1.1 показана основная сигнатура между смещениями E77E и E78F.
Рис 2.1.1 Просмотр бинарного файла в шестнадцатеричной кодировке
Более того, в данном примере сигнатура обнаружена в секции idata. Это означает, что при попытке шифрования всей секции idata, исполняемый файл, который получиться в результате, может оказаться неработоспособным.
Мы можем отредактировать часть данного файла, или зашифровать только сигнатуру, и таким образом обойти обнаружение антивирусом.
Отметим, что антивирусные приложения будут также просматривать список PE заголовков файла, чтобы определить, является ли запускаемый нами файл вредоносным.
Иногда даже индикатор даты и времени создания файла входит в состав сигнатуры. Можно просто изменить или обнулить эти данные для успешного обхода проверки сигнатур. Если списки заголовков, таблицы, или флаги не проходят проверку, антивирус может пометить программу, как вредоносную или потенциально вредоносную, предполагая, что данная программа не может считаться надежной, или не может выполниться корректно.
Рис 2.1.2 – Обзор части списка PE заголовков в Ollydbg
2.2 – Изменение сигнатур антивируса в PE файлах
После вероятного обнаружения сигнатуры в одной из секций, ее можно изменить, либо путем редактирования прямо в hex-редакторе, либо путем изменения опкодов в дисассемблере, а также в некоторых случаях, с помощью отладчика (применимо для Ollydbg).
В случае с ncx99.exe, есть возможность изменения, как слушающего порта, так и программы, которая будет выполняться. Конечно, если заменить его, например на calc.exe, при взломе это не поможет, а вот замена номера порта с 99, например, на 81 может оказаться полезной. Таким образом, можно успешно обойти механизмы обнаружения некоторых антивирусов.
Рис. 2.2.1 – проверка исходного файла ncx99.exe
Рис. 2.2.2 – проверка ncx99.exe с п ривязкой к 81 порту
Как показано на рис 2.2.2, антивирусы Avast и Ikarus удалось успешно обойти. При атаке компьютеров, которые используют один из этих антивирусов, нам достаточно будет всего лишь изменить один из слушающих портов.
2.3 – Полиморфные техники и взломы
Полиморфные методы
Некоторые полиморфные вирусы имеют одинаковый функционал, но различные опкоды. В этом заключается очередной прием, применяемый опытными хакерами. Например, вместо инструкции PUSH -1, хакер может использовать DEC ESI, PUSH ESI, INC ESI, если регистр ESI равен 0. Если он не равен нулю, злоумышленнику придется сохранить значение ESI путем перемещения его в стек, и обнулить его с помощью оператора XOR (XOR ESI, ESI). Затем его можно использовать для записи в стек вместо PUSH -1.
После этого необходимо восстановить исходное значение ESI, с помощью оператора POP.
Взломы
Если мы хотим зашифровать файл, нам придется зашифровать точку входа бинарного файла, отредактировав заголовки PE, либо заменить первую инструкцию на jump, указывающий на неиспользуемую область данных. В этой области хакер может разместить собственный код, не изменяя при этом размер исходного файла.
Обратим внимание, что некоторые антивирусы проверяют также и размер файлов.
При необходимости можно перезаписать инструкции также и внутри бинарного файла. Если целевая программа полностью сохраняет свою функциональность, не имеет значения, какая именно область файла была изменена.
Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!
Бумажная безопасность порядком надоела, поэтому я решил немного отвлечься на практику. Не так давно мне представился случай лично убедиться, с какой легкостью злоумышленник, обладающий самой минимальной квалификацией, способен обойти популярные "топовые" антивирусы. Сегодняшний пост посвящен короткой истории поединка скрипт-кидди с одним популярным антивирусом.
Но, сперва, disclaimer:
1) Многое из написанного ниже, для экспертов, несомненно - боян. Но автор и не претендует на "срыв покровов". Статья призвана предостеречь тех пользователей, которые полагаются на антивирус как на панацею, при этом забывая о необходимости комплексного подхода к безопасности.
2) Статья написана исключительно в образовательных целях. Не нужно использовать эту информацию для совершения противоправных действий.
3) Статья не пытается бросить тень на производителей антивирусов. Уверен, что они делают все возможное, чтобы совершенствовать свои продукты.
Как-то раз нелегкая судьба безопасника (от которого часто требуют уметь все) занесла меня в пентесты. Была поставлена задача проверить уязвимость организации к вирусной атаке.
В компании использовалось антивирусное ПО от одного из топ-вендоров. Антивирусы были развернуты и на серверах (включая почтовые и прокси-серверы) и на компьютерах пользователей. Централизованное управление и обновление тоже было.
Неплохая защищенность и небольшой опыт в проведении пентестов не сулили затее особого успеха.
Однако, практическая реализация показала другое: злоумышленник может организовать атаку и обойти средства антивирусной защиты даже при помощи стандартных общеизвестных средств, доступных практически любому специалисту. Каким образом - описано ниже.
Стандартные инструменты
Как уже говорилось, злоумышленнику не нужно обладать высокой квалификацией. Достаточно навыков скрипт-кидди - найти подходящий инструмент.
Причем искать долго не придется - все необходимое есть в Metasploit Framework.
Как видим, антивирусы, в подавляющем большинстве, детектировали Meterpreterкак вредоносное ПО. Это и не удивительно: ему уже много лет.
Означает ли это победу антивируса над скрипт-кидди? Не совсем.
Антивирусы выходят из игры
После 5 минут поиска в Google находится сразу несколько готовых решений для обхода антивирусов. Познакомимся поближе с инструментом под названием Shellter ( сайт ).
Если создать зараженный файл при помощи Shellter и попытаться проверить его через VirusTotal, то увидим следующее:
Показатель детектирования просто катастрофически упал. Это означает, что большинство антивирусов, установленных на рабочих местах и серверах не определят данный файл как опасный! На все про все, включая установку Shellter, ушло от силы 5 минут.
Таким образом, хотя сигнатура трояна известна уже много лет (Metasploit и Meterpreter входят в стандартную сборку Kali Linux), благодаря Shellter популярные антивирусы ничего не могут с ним поделать.
А как на практике?
Но тест на VirusTotal без испытаний "в поле" не показатель. Может быть при работе троян будет обнаружен по поведенческим признакам? Чтобы проверить это, протестируем файл на двух популярных антивирусах: Eset (5.0.21.26) и Kaspersky Internet Securiy (17.0.0.611).
Беглое тестирование показывает следующее:
1) Копирование и запуск файла не детектируется.
2) При запуске инфециорованного файла сессия до сервера управления (Metasploit) успешно открывается.
3) При выполнении некоторых действий (например, при попытке "миграции" Meterpreter в другие процессы), процесс Meterpreter’а детектируется как угроза.
4) При попытке использования веб-камеры, KIS запрашивает разрешение пользователя.
5) Большое количество функций Meterpreter’а все равно работает без обнаружения. В частности, прекрасно работает кейлоггер, скрипты сбора учетных данных, выгрузка информации из браузеров, скриншоты рабочего стола, копирование файлов. В принципе, этого достаточно для решения злоумышленником своих задач.
Таким образом, антивирусы конечно ограничивают функционал Meterpreter, но все равно оставляют широкий простор для злоумышленника.
Выводы и рекомендации
Тест еще раз показывает, что антивирус не является сам по себе панацеей. Средства обхода антивирусного ПО весьма популярны и находятся в свободном доступе. Разумеется, после загрузки части зараженных файлов на Virustotal, антивирусные базы будут пополняться, и возможности таких средств будут сокращаться. Но для защиты от таргетированных атак это не поможет.
Это не означает, что антивирусное ПО бесполезно. Просто без должной работы с персоналом его эффективность может быть сведена на нет.
История закончилась для пользователей легким "троллингом": на рабочем столе появилось приглашение на корпоративный тренинг по ИБ. На тренинге им было рекомендовано:
- не открывать подозрительные и рекламные почтовые вложения;
- не включать без особой надобности макросы в документах;
- подключать к компьютеру только проверенные носители информации;
- устанавливать программы только с официальных сайтов;
- не посещать подозрительные сайты;
- проверять, куда ведет та или иная ссылка;
- регулярно обновлять ПО (включая офисные программы и браузеры).
На этом, пожалуй, все.
Если эта статья будет полезной - напишите в комментариях. Возможно, стоит сместить акцент блога с нормативки на практическую ИБ.
Антивирус — крайне полезная штука, но только не тогда, когда тебе нужно остаться незамеченным в атакуемой сети. Сегодня мы поговорим о том, как при пентесте можно обмануть антивирусные программы и избежать обнаружения в скомпрометированной системе.
Эта статья — продолжение цикла публикаций, посвященных постэксплуатации. В предыдущих сериях:
Наверняка тебе знакома ситуация, когда доступ к атакуемой сети получен и до цели остался один шаг. Но антивирус не дает выполнить нужное действие, запустить ту или иную программу. В моей практике были случаи, когда имелась лишь одна попытка, которая проваливалась из‑за поднятой антивирусом тревоги. Антивирусы иногда могут удалить и совсем безобидные файлы, причем не только исполняемые. Поэтому скрыть настоящую угрозу — крайне непростая задача.
warning
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный с использованием информации из данной статьи.
Вообще, задача обхода антивируса может возникнуть в двух случаях:
- при атаке. Тут полезную нагрузку запускает либо уязвимое приложение, либо, что чаще, пользователь (социальная инженерия). Главным образом это будет некое средство закрепления и обеспечения постоянного присутствия. Самое важное — не спалиться;
- при постэксплуатации. В этом случае мы сами запускаем программу на скомпрометированной системе. Это может быть сниффер, средство повышения привилегий или просто какой‑то хакерский софт, используемый для продвижения по сети. И при этом для нас важнее запустить программу, даже если это получилось не с первой попытки и антивирус выкинул несколько алертов.
В первом случае достаточно лишь применить известную технику — полиморфизм. Изменяем код, не меняя его функциональность. Хорошая тактика — написать код самому. Например, с помощью двадцати строк кода на VBS можно реализовать простой reverse shell и успешно обойти любой антивирус. Нас же больше будет интересовать второй случай, и именно это и будет темой данной статьи.
Многие полезные инструменты для обхода антивируса можно сделать с помощью того же Meterpreter, но для начала его следует как минимум запустить. В каждом рассматриваемом способе именно запуск Meterpreter и будет для нас конечной целью. Ведь данное средство обладает всеми необходимыми возможностями, а при желании может использоваться и для запуска другого специализированного ПО прямо в оперативной памяти. А все, что происходит в оперативной памяти, почти недостижимо для средств защиты, поскольку детальный и постоянный анализ памяти влечет за собой колоссальные накладные расходы, на которые антивирусы пойти не могут.
По большому счету мы имеем дело с двумя механизмами защиты:
- сигнатурным;
- эвристическим (поведенческим).
При сигнатурном анализе антивирус учитывает множество факторов, в частности большое влияние на результат оказывает компилятор. Вот достаточно забавные результаты VirusTotal для безобидного helloworld-приложения, написанного на С:
- i686-w64-mingw32-gcc — 11/68 детектов;
- msvc — 2/64 детекта;
- win-gcc — 0 детектов.
Что же касается анализа поведения программы, тут нужно понимать, что, даже если тебе удалось обойти сигнатуры, ты все еще можешь спалиться, поскольку всякий migrate PID или sekurlsa:: logonPasswords может быть перехвачен по причине использования характерных сочетаний WinAPI-функций, которые антивирусы очень внимательно мониторят.
Legal
Shellcode injecting
Техника встраивания кода в уже запущенные, а значит, прошедшие проверку процессы широко известна. Идея состоит в том, что мы имеем отдельную программу shellcode_inject. exe и сам shellcode в разных файлах. Антивирусу сложнее распознать угрозу, если она раскидана по нескольким файлам, тем более по отдельности эти файлы не представляют угрозы.
shellcode_inject.exe не содержит угроз
В свою очередь, наш shellcode выглядит еще более безобидно, если мы преобразуем его в печатные символы.
Cоздание автономного (не staged) шелл‑кода. Выглядит безобидно
Глядя на содержимое meter. txt , я бы скорее решил, что это строка в Base64, чем шелл‑код.
Продолжение доступно только участникам
Вариант 2. Открой один материал
Читайте также: