
Pyramid
Was ist das
Pyramid besteht aus:
- einem Python HTTP/S-Server, der verschlüsselte Dateien (chacha, xor) ausliefern kann
- Python-Modulen, die Abhängigkeiten von Offensiv-Tools wie Bloodhound-py, secretsdump, LaZagne, Pythonnet, DonPAPI, pythonmemorymodule, paramiko, pproxy im Arbeitsspeicher laden können
- festen Python-Abhängigkeiten (Zip-Dateien), die im Speicher importiert werden können
- Python-Cradle, das Pyramid-Module herunterladen, entschlüsseln und im Arbeitsspeicher ausführen kann
Warum ist es nützlich
Pyramid ist nützlich, um Post-Exploitation-Aufgaben auf eine ausweichende Weise durchzuführen, indem offensive Tools von einer signierten Binärdatei (z. B. python.exe) ausgeführt werden, indem ihre Abhängigkeiten im Speicher importiert werden.
Dies kann erreicht werden, weil:
- das Python Embeddable Package einen signierten Python-Interpreter mit guter Reputation bereitstellt;
- Python viele legitime Anwendungen hat, sodass von der python.exe-Binärdatei eine große Menge unterschiedlicher Telemetriedaten stammen, da der Interpreter nativ die APIs ausführt. Dies kann ausgenutzt werden, indem man innerhalb des Python.exe-Prozesses arbeitet und versucht, sich in den großen "Telemetrie-Fingerprint" der python.exe-Binärdatei einzufügen.
- Es mangelt an Auditing für die Ausführung von Python-Code – PEP-578 versuchte dies zu lösen, aber die Standard-python.exe-Binärdatei hat standardmäßig keine Auditing-Funktionen aktiviert.
- Operationen können nativ von innerhalb von python.exe mit der Python-Sprache durchgeführt werden, um Post-Exploitation-Aufgaben wie das dynamische Importieren von Python-Modulen zum Ausführen von Offensiv-Tools und das direkte Ausführen von Beacon Object Files (nach einigen BOF-Modifikationen) innerhalb von python.exe durchzuführen.
Für weitere Informationen lesen Sie bitte die DEFCON30 - Adversary Village Talk "Python vs Modern Defenses" - Folien und diesen Beitrag in meinem Blog.
Haftungsausschluss
Dieses Tool wurde erstellt, um eine Umgehungsstrategie gegen EDRs zu demonstrieren, die auf einigen Annahmen über blinde Flecken basiert. Es handelt sich um eine Kombination bereits existierender Techniken und Tools in einer (nach meinem besten Wissen) neuartigen Weise, die helfen kann, Verteidigungen zu umgehen. Der alleinige Zweck des Tools ist es, der Gemeinschaft zu helfen, das Bewusstsein für diese Art der Nutzung zu schärfen und eine Lösung zu beschleunigen. Es ist kein 0‑Day, es ist kein ausgewachsenes glänzendes C2, Pyramid nutzt aus, was möglicherweise blinde Flecken von EDRs sind, und das Tool wurde veröffentlicht, um Licht auf diese zu werfen.
Ein Abschnitt zur Verteidigung wurde hinzugefügt, in der Hoffnung, dass erfahrene Blue-Teamer dazu beitragen und eine bessere mögliche Lösung für das Problem liefern können, das Pyramid hervorheben möchte. Alle Informationen dienen nur zu Bildungszwecken. Befolgen Sie die Anweisungen auf eigenes Risiko. Weder der Autor noch sein Arbeitgeber sind für direkte oder indirekte Schäden oder Verluste verantwortlich, die durch eine Person oder Organisation entstehen.
Danksagungen
Pyramids In-Memory-Laden wurde ursprünglich inspiriert und erweitert von xorriors Empyre - Finder Class
Mitwirkende
snovvcrash entwickelte die Module mod-DonPAPI.py - mod-LaZagne.py - mod-clr.py
Aktuelle Funktionen
Die Fähigkeiten der Pyramid-Module können direkt von einem Python-Interpreter ausgeführt werden und umfassen derzeit:
- Herunterladen, Entschlüsseln und In-Memory-Laden von Python-Abhängigkeiten.
- Dynamisches Laden und Ausführen von BloodHound Python, Impacket secretsdump, DonPAPI, LaZagne.
- In-Memory-Laden einer remote abgerufenen DLL oder EXE über PythonMemoryModule
- SOCKS5-Proxy über SSH-Reverse-Port-Forward-Tunnel.
- In-Memory-.NET-Assembly-Laden über Pythonnet
Hauptfunktionen des Pyramid-HTTP-Servers:
- On-the-fly-Verschlüsselung (chacha, xor) der auszuliefernden Dateien
- Automatische Generierung von Server-Konfigurationen basierend auf der Pyramid-Kommandozeile
- Decodierung und Entschlüsselung von HTTP-Parametern (URL)
- Basis-HTTP-Authentifizierung
Hauptfunktionen des Cradles:
- Herunterladen, Entschlüsseln und In-Memory-Ausführung von Pyramid-Modulen.
- Abhängigkeit nur von Python-Standardbibliotheken
Beschreibung
Pyramid kann mit einem bereits auf einem Zielrechner vorhandenen Python-Interpreter verwendet werden, oder durch Entpacken eines offiziellen embeddable Python-Pakets und anschließendes Ausführen von python.exe, um ein Python-Download-Cradle auszuführen. Dies ist ein einfacher Weg, um ungewöhnliche Prozessbaum-Muster zu vermeiden und wie eine normale Python-Anwendungsnutzung auszusehen.
Im Pyramid wird das Download-Cradle verwendet, um über HTTP/S einen Pyramid-Server zu erreichen und Module und Abhängigkeiten abzurufen.
Module sind spezifisch für die gewünschte Funktion und enthalten:
- Eine benutzerdefinierte Finder-Klasse zum In-Memory-Import der benötigten Abhängigkeiten (Zip-Dateien).
- Code zum Herunterladen der benötigten Abhängigkeiten.
- Hauptlogik für das auszuführende Programm (Bloodhound, secretsdump, paramiko usw.).
Die Python-Abhängigkeiten wurden bereits angepasst und modifiziert, um im Speicher importiert werden zu können, ohne Konflikte zu verursachen.
Derzeit sind 8 Pyramid-Module verfügbar:
- bh.py importiert und führt python-BloodHound im Speicher aus.
- secretsdump.py importiert und führt Impacket secretsdump im Speicher aus.
- shellcode.py ist ein einfacher In-Memory-Shellcode-Injektor.
- DonPAPI.py importiert und führt DonPAPI im Speicher aus. Ergebnisse und extrahierte Anmeldedaten werden auf der Festplatte im Verzeichnis des Python Embeddable Package gespeichert.
- LaZagne.py importiert und führt LaZagne im Speicher aus.
- tunnel-socks5 importiert und führt paramiko in einem neuen Thread aus, um einen SSH-Remote-Port-Forward zu einem SSH-Server zu erstellen. Anschließend wird lokal auf dem Ziel ein SOCKS5-Proxy-Server ausgeführt, der über den SSH-Tunnel remote erreichbar ist.
- clr importiert Pythonnet, um eine .NET-Assembly im Speicher zu laden und auszuführen.
- pythonmemorymodule importiert PythonMemoryModule, um eine DLL aus dem Speicher zu laden.
Verwendung
Server starten
git clone https://github.com/naksyn/Pyramid
SSL-Zertifikate für den HTTP-Server generieren:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
Wenn Sie Ihr eigenes signiertes SSL-Zertifikat verwenden möchten, stellen Sie sicher, dass:
- Sie das PEM-Format verwenden
- Sie die Dateien in key.pem und cert.pem umbenennen
- Sie beide Dateien im Server-Ordner ablegen.
Modul konfigurieren