
инструмент для работы в слепых зонах EDR
Pyramid состоит из:
Pyramid полезен для выполнения задач пост-эксплуатации обходным путем, запуская инструменты для атакующей работы из подписанного бинарного файла (например, python.exe) путем импорта их зависимостей в память. Это возможно благодаря тому, что:
Для получения дополнительной информации, пожалуйста, ознакомьтесь со слайдами выступления на DEFCON30 - Adversary village "Python vs Modern Defenses" и этой записью в моем блоге.
Этот инструмент был создан для демонстрации стратегии обхода EDR, основанной на некоторых предположениях о слепых зонах. Он представляет собой комбинацию уже существующих техник и инструментов, но (насколько мне известно) новым способом, который может помочь обойти защиту. Единственная цель инструмента — помочь сообществу повысить осведомленность о подобном использовании и ускорить поиск решения. Это не 0day, не полноценный блестящий C2, Pyramid использует то, что может быть слепыми зонами EDR, и инструмент был опубликован, чтобы пролить на них свет. Был включен раздел о защите, с надеждой, что опытные защитники смогут внести свой вклад и предложить возможное решение проблемы, которую Pyramid призван осветить. Вся информация предоставлена исключительно в образовательных целях. Следуйте инструкциям на свой страх и риск. Ни автор, ни его работодатель не несут ответственности за любой прямой или косвенный ущерб или убытки, возникшие у какого-либо лица или организации.
Загрузка в память Pyramid изначально была вдохновлена и расширена на основе xorrior 's Empyre - Finder Class
snovvcrash создал модули mod-DonPAPI.py - mod-LaZagne.py - mod-clr.py
Возможности модулей Pyramid могут быть выполнены непосредственно из интерпретатора Python и на данный момент включают:
Основные возможности HTTP-сервера Pyramid:
Основные возможности загрузчика:
Pyramid можно использовать с уже установленным на целевой машине интерпретатором Python или распаковав официальный встраиваемый пакет Python и затем запустив python.exe для выполнения загрузчика Python. Это простой способ избежать создания необычных шаблонов дерева процессов и выглядеть как обычное использование приложения Python.
В Pyramid загрузчик используется для соединения с сервером Pyramid по HTTP/S для получения модулей и зависимостей.
Модули специфичны для нужной функции и содержат:
Зависимости Python уже были исправлены и модифицированы для импорта в память без конфликтов.
В настоящее время доступно 8 модулей Pyramid:
git clone https://github.com/naksyn/Pyramid
Сгенерируйте SSL-сертификаты для HTTP-сервера:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
Если вы хотите использовать свой собственный подписанный SSL-сертификат, убедитесь, что:
Например, если вы хотите использовать pythonmemorymodule с Pyramid, поместите вашу полезную нагрузку в папку Delivery_files, затем откройте pythonmemorymodule.py и настройте необходимые параметры в верхней части скрипта, такие как имя файла полезной нагрузки и процедуру, которую нужно вызвать после загрузки PE.
После запуска сервера Pyramid и готовности базового скрипта вы можете установить переменную pyramid_module в файле Agent/cradle.py и выполнить его на цели.
Загрузчик создан для работы со стандартными библиотеками Python.
Пример запуска HTTP-сервера Pyramid с использованием SSL-сертификата, базовой аутентификации, шифрования файлов доставки с помощью ChaCha и автоматической генерации конфигурации сервера в модулях, а также вывода готового к использованию загрузчика для pythonmemorymodule:
python3 pyramid.py -p 443 -ssl -u testuser -pass Sup3rP4ss! -enc "chacha20" -passenc "TestPass1" -server "192.168.1.2" -generate -setcradle pythonmemorymodule.py
При запуске pyramid.py анализирует собственную структуру папок в поисках key.pem, cert.pem и будет доставлять файлы из папки Server.
https://github.com/naksyn/Pyramid/assets/59816245/4fbc997e-af2d-4ead-881b-ee108c91d195
Чтобы выполнить Pyramid без появления видимого окна python.exe, вы можете использовать pythonw.exe, который не открывает окно консоли при выполнении и содержится в том же Windows Embeddable Package. На следующем рисунке показан пример использования pythonw.exe для выполнения base-tunnel-socks5.py на удаленной машине без открытия окна консоли python.exe.

Динамическая загрузка модулей Python не поддерживает нативно импорт файлов *.pyd, которые по сути являются dll. Единственное публичное решение этой проблемы, известное мне, предоставлено Scythe (выполнение в памяти) путем перепроектирования интерпретатора CPython. Чтобы не потерять цифровую подпись, одно из решений, позволяющее использовать нативный встраиваемый пакет Python, включает выгрузку на диск необходимых pyd-файлов или колес. В большинстве случаев это не должно иметь значительных последствий для OPSEC, однако имейте в виду, что следующие колеса, содержащие pyd-файлы, выгружаются на диск для завершения динамической загрузки: *. Cryptodome — необходим для Bloodhound-Python, Impacket, DonPAPI и LaZagne *. bcrypt, cryptography, nacl, cffi — необходимы для paramiko
Python.exe — это подписанный бинарный файл с хорошей репутацией, который не предоставляет видимости динамического кода Python. Pyramid использует эти свойства обхода, выполняя задачи атакующей работы из того же процесса python.exe.
По этой причине одним из наиболее эффективных решений было бы блокировать по умолчанию бинарные файлы и dll, подписанные Python Foundation, создавая исключения только для пользователей, которым действительно нужно использовать бинарные файлы Python.
Также могут быть настроены оповещения о загрузке встраиваемых пакетов.
Внедрение PEP-578 также возможно, хотя и сложно, пример реализации. Однако внедрение PEP-578 без блокировки использования стандартных бинарных файлов Python может сделать эту контрмеру бесполезной.