
Sandbox di Reverse Engineering scriptabile in Python, un framework di strumentazione e ispezione di macchine virtuali basato su QEMU
QUESTO PROGETTO È STATO ARCHIVIATO E LA SUA CODA DI ISSUE È BLOCCATA. IL PROGETTO SARÀ MANTENUTO PUBBLICO SOLO A SCOPO DI RIFERIMENTO.
.. image:: docs/media/pyrebox_logo_light_bg.png
.. _QEMU: http://qemu.org/ .. _DECAF: https://github.com/sycurelab/DECAF .. _S2E: https://github.com/dslab-epfl/s2e .. _AVATAR: https://github.com/avatartwo .. _PANDA: https://github.com/panda-re/panda .. _Volatility: http://www.volatilityfoundation.org/ .. _BUILD: BUILD.rst .. _here: https://github.com/Cisco-Talos/pyrebox/issues .. _slides: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_hitb_ams.pdf .. _available: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_euskalhack.pdf .. _scripts: https://github.com/Cisco-Talos/pyrebox/tree/master/scripts .. _readthedocs.io: https://pyrebox.readthedocs.io/en/latest/ .. _questions: https://github.com/Cisco-Talos/pyrebox/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20 .. _presentation: https://www.youtube.com/watch?v=F2voG87obzM .. _Contest: https://volatility-labs.blogspot.com/2017/11/results-from-5th-annual-2017-volatility.html
PyREBox è un sandbox di Reverse Engineering scriptabile in Python. Si basa su QEMU e il suo obiettivo è quello di agevolare il reverse engineering fornendo capacità di analisi dinamica e debug da una prospettiva diversa. PyREBox consente di ispezionare una VM QEMU in esecuzione, modificarne la memoria o i registri e strumentare la sua esecuzione creando semplici script in Python per automatizzare qualsiasi tipo di analisi. QEMU (quando funziona come emulatore di sistema completo) emula un intero sistema (CPU, memoria, dispositivi...). Utilizzando tecniche VMI, non richiede alcuna modifica al sistema operativo guest, poiché recupera trasparentemente le informazioni dalla sua memoria in fase di esecuzione.
Molti progetti accademici come DECAF_, PANDA_, S2E_ o AVATAR_ hanno sfruttato in precedenza la strumentazione basata su QEMU per superare le sfide del reverse engineering. Questi progetti consentono di scrivere plugin in C/C++ e implementano diverse funzionalità avanzate come l'analisi dinamica del flusso dei dati (taint analysis), l'esecuzione simbolica, o addirittura la registrazione e riproduzione di tracce di esecuzione. Con PyREBox, intendiamo applicare questa tecnologia concentrandoci sul mantenere il design semplice e sull'usabilità del sistema per gli analisti di minacce.
PyREBox ha vinto il Volatility Plugin Contest_ nel 2017!
Questo strumento è stato presentato all'HITB Amsterdam 2018. Puoi vedere le slides_ o guardare la presentazione_. È stato anche presentato alla terza edizione dell'EuskalHack Security Congress (slides disponibili_).
Ricorda di ottenere l'ultima versione di PyREBox per godere delle sue funzionalità più recenti. PyREBox è in fase di sviluppo attivo e nuove interessanti funzionalità sono ancora in arrivo! Il ramo master dovrebbe sempre contenere una versione stabile, mentre i rami dev contengono le ultime funzionalità in fase di sviluppo. Il seguente elenco di annunci si riferisce al ramo master e alla data in cui le modifiche di sviluppo sono state unite in master.
Viene fornito uno script di build. Per dettagli specifici sulle dipendenze, consultare BUILD_. Forniamo anche un Dockerfile.
La documentazione di questo progetto è ospitata su readthedocs.io_.
Se pensi di aver trovato un bug, segnalalo qui_.
Prima di creare una nuova issue, consulta le domande_ aperte in precedenza da altri utenti.
Questo programma è fornito "COSÌ COM'È" e non è garantito alcun supporto. Detto questo, per aiutarci a risolvere i tuoi problemi, includi quante più informazioni possibile per riprodurre il bug:
PyREBox si basa su QEMU, quindi per avviare una VM in PyREBox, devi eseguirlo esattamente come se stessi avviando una VM QEMU. Sono forniti un paio di script di esempio: start_i386.sh, start_x86_64.sh, puoi usarli come esempio.
L'unica opzione del monitor di QEMU attualmente supportata è stdio (-monitor stdio).
Fornire una piattaforma di emulazione di sistema completo con un'interfaccia semplice per ispezionare il sistema guest emulato.
Avere un design pulito, disaccoppiato da QEMU. Molti progetti costruiti su QEMU non evolvono quando QEMU viene aggiornato, perdendo nuove funzionalità e ottimizzazioni, oltre agli aggiornamenti di sicurezza. Per raggiungere questo obiettivo, PyREBox è implementato come modulo indipendente che può essere compilato insieme a QEMU richiedendo un insieme minimo di modifiche.
Supporto per diverse architetture. Attualmente, PyREBox supporta solo Windows per architetture x86 e x86-64, ma il suo design consente di supportare altre architetture come ARM, MIPS o PowerPC, e altri sistemi operativi.
Avviare una shell PyREBox è facile come digitare il comando sh sul monitor di QEMU. Verrà immediatamente avviata una shell IPython. Questa shell registra la cronologia dei comandi e le variabili definite. Ad esempio, puoi salvare un valore e recuperarlo in un secondo momento durante l'esecuzione, quando avvii di nuovo la shell. PyREBox sfrutta tutte le funzionalità disponibili in IPython come il completamento automatico, la cronologia dei comandi, la modifica multilinea e la generazione automatica dell'aiuto dei comandi.
PyREBox ti permetterà di debuggare il sistema (o un processo) in modo abbastanza invisibile. A differenza dei debugger tradizionali che risiedono nel sistema sottoposto a debug (modificando persino la memoria del processo debugato per inserire breakpoint), PyREBox rimane completamente all'esterno del sistema ispezionato e non richiede l'installazione di alcun driver o componente nel guest.
.. image:: docs/media/breakpoint.gif
PyREBox offre un set completo di comandi per ispezionare e modificare lo stato della VM in esecuzione. Basta digitare list_commands per ottenere un elenco completo. Puoi eseguire qualsiasi plugin di Volatility digitando vol e il corrispondente comando Volatility. Per un elenco completo dei plugin Volatility disponibili, puoi digitare list_vol_commands. Questo elenco viene generato automaticamente, quindi mostrerà anche qualsiasi plugin Volatility che installi nel percorso volatility/ di PyREBox.
Puoi anche definire i tuoi comandi! È semplice come dichiarare una funzione in uno script e caricarlo.
Se hai bisogno di qualcosa di più espressivo di un comando, puoi scrivere uno snippet Python sfruttando l'API. Per una descrizione dettagliata dell'API, consulta Documentazione_ o digita help(api) nella shell.
.. image:: docs/media/stack.gif
PyREBox consente di caricare dinamicamente script che possono registrare funzioni callback chiamate quando si verificano determinati eventi, come istruzioni eseguite, memoria letta/scritta, processi creati/distrutti e così via.
Dato che PyREBox è integrato con Volatility, ti permetterà di sfruttare tutti i plugin Volatility per il memory forensics nei tuoi script Python. Molti dei più famosi strumenti di reverse engineering sono implementati in Python o hanno almeno binding Python. Il nostro approccio consente di integrare qualsiasi di questi strumenti in uno script.
Infine, dato che i callback Python possono introdurre un calo di prestazioni su eventi frequenti come le istruzioni eseguite, è anche possibile creare trigger. I trigger sono plugin in codice nativo (sviluppati in C/C++) che possono essere inseriti dinamicamente in fase di esecuzione su qualsiasi evento appena prima che venga eseguito il callback Python. Ciò consente di limitare il numero di eventi che raggiungono il codice Python, oltre a precalcolare valori in codice nativo.
In questo repository troverai script_ di esempio che possono aiutarti a scrivere il tuo codice. I contributi sono benvenuti!
Innanzitutto, PyREBox non sarebbe possibile senza QEMU_ e Volatility_. Ringraziamo i loro sviluppatori e manutentori per un lavoro così eccezionale.
PyREBox è ispirato da diversi progetti accademici, come DECAF_ o PANDA_. Di fatto, molti dei callback supportati da PyREBox sono equivalenti a quelli presenti in DECAF_, e i concetti alla base della strumentazione si basano su questi lavori.
PyREBox beneficia di codice di terze parti, che può essere trovato nella directory pyrebox/third_party. Per ogni progetto di terze parti, includiamo un'indicazione della sua licenza originale, i file sorgente originali presi dal progetto, così come le versioni modificate dei file sorgente (se applicabili) utilizzate da PyREBox.