
Python-scriptbare Reverse-Engineering-Sandbox, ein Framework zur Instrumentierung und Inspektion virtueller Maschinen auf Basis von QEMU
DIESES PROJEKT WURDE ARCHIVIERT UND SEIN ISSUE-QUEUE IST GESPERRT. DAS PROJEKT WIRD NUR AUS REFERENZGRÜNDEN ÖFFENTLICH GEHALTEN.
.. 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 ist eine in Python scriptbare Reverse-Engineering-Sandbox. Sie basiert auf QEMU und hat zum Ziel, Reverse Engineering durch dynamische Analyse- und Debugging-Funktionen aus einer anderen Perspektive zu unterstützen. PyREBox ermöglicht es, eine laufende QEMU-VM zu inspizieren, ihren Speicher oder ihre Register zu ändern und ihre Ausführung zu instrumentieren, indem einfache Skripte in Python zur Automatisierung beliebiger Analysen erstellt werden. QEMU (wenn es als Vollsystem-Emulator arbeitet) emuliert ein komplettes System (CPU, Speicher, Geräte...). Durch den Einsatz von VMI-Techniken ist keine Modifikation des Gastbetriebssystems erforderlich, da Informationen transparent zur Laufzeit aus dessen Speicher abgerufen werden.
Mehrere akademische Projekte wie DECAF_, PANDA_, S2E_ oder AVATAR_ haben zuvor QEMU-basierte Instrumentierung genutzt, um Reverse-Engineering-Aufgaben zu bewältigen. Diese Projekte erlauben das Schreiben von Plugins in C/C++ und implementieren mehrere fortgeschrittene Funktionen wie dynamische Taint-Analyse, symbolische Ausführung oder sogar Aufzeichnung und Wiedergabe von Ausführungsspuren. Mit PyREBox möchten wir diese Technologie anwenden, wobei der Schwerpunkt auf einem einfachen Design und der Benutzerfreundlichkeit des Systems für Bedrohungsanalysten liegt.
PyREBox hat den Volatility Plugin Contest_ im Jahr 2017 gewonnen!
Dieses Tool wurde auf der HITB Amsterdam 2018 vorgestellt. Sie können die Folien (slides_) ansehen oder die Präsentation (presentation_) anschauen. Es wurde auch auf dem dritten EuskalHack Security Congress vorgestellt (Folien verfügbar unter available_).
Denken Sie daran, die neueste Version von PyREBox zu ziehen, um die neuesten Funktionen zu nutzen. PyREBox wird aktiv weiterentwickelt und neue coole Funktionen stehen noch bevor! Der Master-Zweig sollte immer eine stabile Version enthalten, während die Entwicklungszweige die neuesten, in Arbeit befindlichen Funktionen enthalten. Die folgende Ankündigungsliste bezieht sich auf den Master-Zweig und das Datum, an dem die Entwicklungsänderungen in den Master gemergt wurden.
Ein Build-Skript wird bereitgestellt. Für spezifische Details zu Abhängigkeiten siehe BUILD_. Wir stellen auch ein Dockerfile bereit.
Die Dokumentation dieses Projekts wird auf readthedocs.io_ gehostet.
Wenn Sie glauben, einen Fehler gefunden zu haben, melden Sie ihn bitte hier_.
Bevor Sie ein neues Issue erstellen, gehen Sie bitte die von anderen Benutzern geöffneten Fragen (questions_) durch.
Dieses Programm wird "WIE BESEHEN" bereitgestellt, und es wird kein Support garantiert. Um uns bei der Lösung Ihrer Probleme zu helfen, fügen Sie bitte so viele Informationen wie möglich hinzu, um den Fehler reproduzieren zu können:
PyREBox basiert auf QEMU. Um eine VM innerhalb von PyREBox zu starten, müssen Sie sie genau so ausführen, als ob Sie eine QEMU-VM hochfahren würden. Einige Beispielskripte werden bereitgestellt: start_i386.sh, start_x86_64.sh, die Sie als Beispiel verwenden können.
Die einzige derzeit unterstützte QEMU-Monitor-Option ist stdio (-monitor stdio).
Bereitstellung einer Plattform zur Emulation kompletter Systeme mit einer einfachen Schnittstelle zur Inspektion des emulierten Gastsystems.
Ein sauberes, von QEMU entkoppeltes Design. Viele Projekte, die auf QEMU aufbauen, entwickeln sich nicht weiter, wenn QEMU aktualisiert wird, wodurch neue Funktionen und Optimierungen sowie Sicherheitsupdates verpasst werden. Um dies zu erreichen, ist PyREBox als unabhängiges Modul implementiert, das mit minimalen Änderungen zusammen mit QEMU kompiliert werden kann.
Unterstützung für verschiedene Architekturen. Derzeit unterstützt PyREBox nur Windows für x86- und x86-64-Bit-Architekturen, aber das Design ermöglicht die Unterstützung anderer Architekturen wie ARM, MIPS oder PowerPC sowie anderer Betriebssysteme.
Das Starten einer PyREBox-Shell ist so einfach wie das Tippen des sh-Befehls im QEMU-Monitor. Es wird sofort eine IPython-Shell gestartet. Diese Shell zeichnet den Befehlsverlauf sowie die definierten Variablen auf. Sie können beispielsweise einen Wert speichern und später an einem anderen Punkt der Ausführung wieder abrufen, wenn Sie die Shell erneut starten. PyREBox nutzt alle verfügbaren Funktionen von IPython wie Autovervollständigung, Befehlsverlauf, mehrzeilige Bearbeitung und automatische Hilfegenerierung für Befehle.
PyREBox ermöglicht es Ihnen, das System (oder einen Prozess) auf recht verdeckte Weise zu debuggen. Im Gegensatz zu herkömmlichen Debuggern, die sich im zu debuggenden System befinden (und sogar den Speicher des debugged Prozesses modifizieren, um Breakpoints einzufügen), bleibt PyREBox vollständig außerhalb des inspizierten Systems und erfordert keine Installation von Treibern oder Komponenten im Gast.
.. image:: docs/media/breakpoint.gif
PyREBox bietet eine vollständige Reihe von Befehlen, um den Zustand der laufenden VM zu inspizieren und zu ändern. Geben Sie einfach list_commands ein, um eine vollständige Liste zu erhalten. Sie können jedes Volatility-Plugin ausführen, indem Sie vol und den entsprechenden Volatility-Befehl eingeben. Für eine vollständige Liste der verfügbaren Volatility-Plugins können Sie list_vol_commands eingeben. Diese Liste wird automatisch generiert und zeigt daher auch alle Volatility-Plugins an, die Sie im Pfad volatility/ von PyREBox installieren.
Sie können auch Ihre eigenen Befehle definieren! Dies ist so einfach wie das Deklarieren einer Funktion in einem Skript und das Laden dieses Skripts.
Wenn Sie etwas Ausdrucksstärkeres als einen Befehl benötigen, können Sie einen Python-Snippet unter Verwendung der API schreiben. Eine detaillierte Beschreibung der API finden Sie in der Dokumentation_ oder geben Sie help(api) in der Shell ein.
.. image:: docs/media/stack.gif
PyREBox ermöglicht das dynamische Laden von Skripten, die Callback-Funktionen registrieren können, die bei bestimmten Ereignissen aufgerufen werden, wie ausgeführten Instruktionen, Speicher-Lese-/Schreibzugriffen, erstellten/zerstörten Prozessen usw.
Da PyREBox in Volatility integriert ist, können Sie in Ihren Python-Skripten alle Volatility-Plugins für die Speicherforensik nutzen. Viele der bekanntesten Reverse-Engineering-Tools sind in Python implementiert oder haben zumindest Python-Bindungen. Unser Ansatz ermöglicht die Integration beliebiger dieser Tools in ein Skript.
Da Python-Callbacks bei häufigen Ereignissen wie ausgeführten Instruktionen zu Leistungseinbußen führen können, ist es auch möglich, Trigger zu erstellen. Trigger sind native Code-Plugins (entwickelt in C/C++), die zur Laufzeit dynamisch bei jedem Ereignis eingefügt werden können, kurz bevor der Python-Callback ausgeführt wird. Dies ermöglicht es, die Anzahl der Ereignisse, die den Python-Code erreichen, zu begrenzen sowie Werte in nativem Code vorzuberechnen.
In diesem Repository finden Sie Beispielskripte (scripts_), die Ihnen beim Schreiben Ihres eigenen Codes helfen können. Beiträge sind willkommen!
Zuallererst wäre PyREBox ohne QEMU_ und Volatility_ nicht möglich. Wir danken ihren Entwicklern und Maintainern für diese großartige Arbeit.
PyREBox ist von mehreren akademischen Projekten wie DECAF_ oder PANDA_ inspiriert. Tatsächlich sind viele der von PyREBox unterstützten Callbacks äquivalent zu denen in DECAF_, und die Konzepte hinter der Instrumentierung basieren auf diesen Arbeiten.
PyREBox profitiert von Code Dritter, der im Verzeichnis pyrebox/third_party zu finden ist. Für jedes Drittanbieterprojekt fügen wir einen Hinweis auf die ursprüngliche Lizenz, die aus dem Projekt übernommenen Original-Quellcodedateien sowie die geänderten Versionen der Quellcodedateien (falls zutreffend) bei, die von PyREBox verwendet werden.