
uno strumento per aiutare a operare nei punti ciechi degli EDR
Pyramid è composto da:
Pyramid è utile per svolgere attività di post-exploitation in modo elusivo, eseguendo strumenti offensivi da un binario firmato (ad esempio python.exe) importando le loro dipendenze in memoria. Ciò è possibile perché:
Per maggiori informazioni, consulta la slide deck del talk "Python vs Modern Defenses" al DEFCON30 - Adversary village e questo post sul mio blog.
Questo strumento è stato creato per dimostrare una strategia di bypass contro gli EDR basata su alcune ipotesi di punti ciechi. È una combinazione di tecniche e strumenti già esistenti in un modo (al meglio delle mie conoscenze) innovativo che può aiutare a eludere le difese. L'unico intento dello strumento è aiutare la comunità ad aumentare la consapevolezza su questo tipo di utilizzo e accelerare una risoluzione. Non è un 0day, non è un C2 completo e lucido, Pyramid sfrutta quelli che potrebbero essere punti ciechi degli EDR e lo strumento è stato reso pubblico per fare luce su di essi. È stato incluso un paragrafo sulla difesa, sperando che i blue-teamer esperti possano contribuire e fornire una migliore risoluzione possibile sul problema che Pyramid mira a evidenziare. Tutte le informazioni sono fornite solo a scopo educativo. Segui le istruzioni a tuo rischio. Né l'autore né il suo datore di lavoro sono responsabili per danni o perdite diretti o consequenziali derivanti da qualsiasi persona o organizzazione.
Il caricamento in memoria di Pyramid è stato inizialmente ispirato ed espanso dal xorrior 's Empyre - Finder Class
snovvcrash ha costruito i moduli mod-DonPAPI.py - mod-LaZagne.py - mod-clr.py
Le capacità dei moduli di Pyramid possono essere eseguite direttamente da un interprete Python e sono attualmente:
Caratteristiche principali del server HTTP Pyramid:
Caratteristiche principali del Cradle:
Pyramid può essere utilizzato con un interprete Python già esistente su una macchina target, o decomprimendo un pacchetto Python embeddable ufficiale e poi eseguendo python.exe per eseguire un cradle di download Python. Questo è un modo semplice per evitare di creare pattern di alberi dei processi insoliti e assomigliare a un normale utilizzo di un'applicazione Python.
In Pyramid, il cradle di download viene utilizzato per raggiungere un server Pyramid tramite HTTP/S per recuperare moduli e dipendenze.
I moduli sono specifici per la funzionalità che si desidera utilizzare e contengono:
Le dipendenze Python sono già state fissate e modificate per essere importate in memoria senza conflitti.
Attualmente sono disponibili 8 moduli di Pyramid:
git clone https://github.com/naksyn/Pyramid
Genera certificati SSL per il server HTTP:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
Se desideri utilizzare il tuo certificato SSL firmato, assicurati di:
Ad esempio, se desideri utilizzare pythonmemorymodule con Pyramid, inserisci il tuo payload nella cartella Delivery_files, quindi apri pythonmemorymodule.py e configura i parametri necessari all'inizio dello script, come il nome del file del payload e la procedura che desideri chiamare dopo che il PE è stato caricato.
Una volta che il server Pyramid è in esecuzione e lo script Base è pronto, puoi impostare la variabile pyramid_module nel file Agent/cradle.py ed eseguirlo sul target.
Il cradle è progettato per essere eseguito con le librerie standard di Python.
Esempio di esecuzione del server HTTP Pyramid utilizzando un certificato SSL che fornisce l'autenticazione di base, crittografando i file di consegna con ChaCha e generando automaticamente la configurazione del server nei moduli e stampando un cradle pronto per l'uso per pythonmemorymodule:
python3 pyramid.py -p 443 -ssl -u testuser -pass Sup3rP4ss! -enc "chacha20" -passenc "TestPass1" -server "192.168.1.2" -generate -setcradle pythonmemorymodule.py
All'avvio pyramid.py analizzerà la propria struttura di cartelle per cercare key.pem, cert.pem e consegnerà i file dalla cartella Server.
https://github.com/naksyn/Pyramid/assets/59816245/4fbc997e-af2d-4ead-881b-ee108c91d195
Per eseguire Pyramid senza mostrare un prompt python.exe visibile, puoi sfruttare pythonw.exe che non apre una finestra della console all'esecuzione ed è contenuto nello stesso pacchetto Windows Embeddable. L'immagine seguente illustra un esempio di utilizzo di pythonw.exe per eseguire base-tunnel-socks5.py su una macchina remota senza aprire una finestra della console python.exe.

Il caricamento dinamico dei moduli Python non supporta nativamente l'importazione di file *.pyd che sono essenzialmente dll. L'unica soluzione pubblica a mia conoscenza che risolve questo problema è fornita da Scythe *(in-memory-execution) riprogettando l'interprete CPython. Per non perdere la firma digitale, una soluzione che consentirebbe di utilizzare il pacchetto Python embeddable nativo prevede di salvare su disco i file pyd o wheel necessari. Ciò non dovrebbe avere implicazioni OPSEC significative nella maggior parte dei casi, tuttavia tieni presente che i seguenti wheel contenenti file pyd vengono salvati su disco per consentire il completamento del caricamento dinamico: *. Cryptodome - necessario per Bloodhound-Python, Impacket, DonPAPI e LaZagne *. bcrypt, cryptography, nacl, cffi - necessario per paramiko
Python.exe è un binario firmato con buona reputazione e non fornisce visibilità sul codice Python dinamico. Pyramid sfrutta queste proprietà elusive svolgendo attività offensive dall'interno dello stesso processo python.exe.
Per questo motivo, una delle soluzioni più efficienti sarebbe bloccare per impostazione predefinita i binari e le dll firmati dalla Python Foundation, creando eccezioni solo per gli utenti che hanno effettivamente bisogno di utilizzare i binari Python.
È anche possibile attivare avvisi per i download di pacchetti embeddable.
Anche la distribuzione di PEP-578 è fattibile, sebbene complessa, questo è un esempio di implementazione. Tuttavia, distribuire PEP-578 senza bloccare l'uso dei binari Python standard potrebbe rendere questa contromisura inutile.