
Pyramid
Что это такое
Pyramid состоит из:
- HTTP/S сервера на Python, который может доставлять зашифрованные файлы (chacha, xor)
- Модулей Python, которые могут загружать в память зависимости инструментов для атакующей работы, таких как Bloodhound-py, secretsdump, LaZagne, Pythonnet, DonPAPI, pythonmemorymodule, paramiko, pproxy.
- Фиксированных зависимостей Python (zip-файлов), которые можно импортировать в память
- Загрузчика Python, который может скачивать, расшифровывать и выполнять в памяти модули Pyramid
Зачем это нужно
Pyramid полезен для выполнения задач пост-эксплуатации обходным путем, запуская инструменты для атакующей работы из подписанного бинарного файла (например, python.exe) путем импорта их зависимостей в память.
Это возможно благодаря тому, что:
- Python Embeddable package предоставляет подписанный интерпретатор Python с хорошей репутацией;
- У Python много легитимных применений, поэтому от бинарного файла python.exe исходит огромное количество разнообразной телеметрии, поскольку интерпретатор запускает API нативно. Этим можно злоупотреблять, работая внутри процесса Python.exe и пытаясь слиться с огромным "телеметрическим отпечатком" бинарного файла python.exe.
- Отсутствует аудит выполнения кода Python - PEP-578 пытался это исправить, но в стандартном бинарном файле python.exe возможности аудита по умолчанию не включены.
- Операции можно выполнять нативно из python.exe, используя язык Python для задач пост-эксплуатации, таких как динамический импорт модулей Python для запуска инструментов атакующей работы и выполнение Beacon Object Files (после некоторых модификаций BOF) непосредственно внутри 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 и на данный момент включают:
- Скачивание, расшифровка и загрузка в память зависимостей Python.
- Динамическая загрузка и выполнение BloodHound Python, impacket secretsdump, DonPAPI, LaZagne.
- Загрузка в память удаленно загруженной dll или exe через PythonMemoryModule
- Проксирование SOCKS5 через SSH-туннель с обратной переадресацией портов.
- Загрузка в память сборок .NET через Pythonnet
Основные возможности HTTP-сервера Pyramid:
- Шифрование на лету (chacha,xor) файлов для доставки
- Автоматическая генерация конфигураций сервера на основе командной строки pyramid
- Декодирование и расшифровка параметров HTTP (URL)
- Базовая HTTP-аутентификация
Основные возможности загрузчика:
- Скачивание, расшифровка и выполнение модулей Pyramid в памяти.
- Зависимость только от стандартных библиотек Python.
Описание
Pyramid можно использовать с уже установленным на целевой машине интерпретатором Python или распаковав официальный встраиваемый пакет Python и затем запустив python.exe для выполнения загрузчика Python. Это простой способ избежать создания необычных шаблонов дерева процессов и выглядеть как обычное использование приложения Python.
В Pyramid загрузчик используется для соединения с сервером Pyramid по HTTP/S для получения модулей и зависимостей.
Модули специфичны для нужной функции и содержат:
- Пользовательский класс Finder для импорта в память необходимых зависимостей (zip-файлов).
- Код для скачивания необходимых зависимостей.
- Основная логика программы, которую вы хотите выполнить (bloodhound, secretsdump, paramiko и т.д.).
Зависимости Python уже были исправлены и модифицированы для импорта в память без конфликтов.
В настоящее время доступно 8 модулей Pyramid:
- bh.py — импортирует в память и выполняет python-BloodHound.
- secretsdump.py — импортирует в память и выполняет Impacket secretsdump.
- shellcode.py — простой инжектор шеллкода в память.
- DonPAPI.py — импортирует в память и выполняет DonPAPI. Полученные результаты и учетные данные сохраняются на диск в каталоге Python Embeddable Package Directory.
- LaZagne.py — импортирует в память и выполняет LaZagne
- tunnel-socks5 — импортирует и выполняет paramiko в отдельном потоке для создания SSH-туннеля с удаленной переадресацией портов на SSH-сервер, затем на целевой машине локально запускается SOCKS5-прокси-сервер, который становится доступным удаленно через SSH-туннель.
- clr — импортирует Pythonnet для загрузки и выполнения сборки .NET в памяти.
- pythonmemorymodule — импортирует PythonMemoryModule для загрузки dll из памяти.
Использование
Запуск сервера
git clone https://github.com/naksyn/Pyramid
Сгенерируйте SSL-сертификаты для HTTP-сервера:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
Если вы хотите использовать свой собственный подписанный SSL-сертификат, убедитесь, что:
- вы используете формат pem
- файлы называются key.pem и cert.pem
- оба файла помещены в папку Server.
Настройка модуля
Например, если вы хотите использовать pythonmemorymodule с Pyramid, поместите вашу полезную нагрузку в папку Delivery_files, затем откройте pythonmemorymodule.py и настройте необходимые параметры в верхней части скрипта, такие как имя файла полезной нагрузки и процедуру, которую нужно вызвать после загрузки PE.
Распакуйте встраиваемый пакет и выполните загрузчик на целевой системе