Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
JOP_ROCKET — This framework enables user to discover JOP gagdets and can automate building a complete JOP chain to bypass DEP. JOP ROCKET is the ultimate solution for Windows jump-oriented programming. JOP ROCKET also finds the novel two-gadget dispatcher, which greatly expands what is possible with JOP. | Kitploit
Tools/GitHubGitHub/bw3ll/jop_rocket
ExploitationReverse EngineeringPapers & ResearchLearning & EducationPayload DevelopmentBinary ExploitationLabs & Practice
GitHubbw3ll/jop_rocket

JOP_ROCKET

Repository anzeigen
11620vor 1 JahrVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →

Über

This framework enables user to discover JOP gagdets and can automate building a complete JOP chain to bypass DEP. JOP ROCKET is the ultimate solution for Windows jump-oriented programming. JOP ROCKET also finds the novel two-gadget dispatcher, which greatly expands what is possible with JOP.

Teilen

alt text

JOP ROCKET

HINWEIS: Mit 2.15 führen wir den Zwei-Gadget-Dispatcher ein--dies erweitert die Möglichkeiten mit Dispatcher-Gadgets erheblich. Mit 2.15 wurden am 26. Mai 2021 viele Optimierungen und zusätzliche neue Funktionen hinzugefügt.

Update: 29. November 2021: Ich habe die Folien für @Hack in Riad sowie ein Whitepaper über shellcodeloses JOP hochgeladen. Die stillen Demo-Videos, die im Vortrag verwendet wurden, finden Sie hier: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV

Update: 1. Dezember 2022: Ich habe am Ende dieses GitHub-Repositorys einen Q&A-Bereich hinzugefügt, der Links zu Ressourcen (Vorträge und Papiere) enthält.

Aktuelle Version: 2.15

Das Jump-oriented Programming Reversing Open Cyber Knowledge Expert Tool, kurz JOP ROCKET, ist ein Werkzeug, das die Entdeckung von JOP-Gadgets in einer x86-Windows-Umgebung erleichtern soll. Dieses Tool wurde auf der DEF CON 27 veröffentlicht, wo es Thema eines Vortrags von Dr. Bramwell Brizendine und Dr. Josh Stroschein war. Ein großes Update, das sich in Entwicklung befand, wurde im September 2020 veröffentlicht, mit kleineren Updates, die in naher Zukunft geplant sind.

Bitte navigieren Sie zu https://github.com/Bw3ll/JOP_ROCKET, um dieses Tool herunterzuladen.

Eine Reihe größerer Updates wurde durchgeführt. Es wird empfohlen, jede Version vor 2.15 zu aktualisieren, um die vielen Neuerungen zu nutzen. Dazu gehören die automatische JOP-Kettengenerierung, das Entdecken neuer Arten von Gadgets, neue Arten von Dispatcher-Gadgets und die Zwei-Gadget-Dispatcher. JOP ROCKET hat außerdem viele weitere wichtige Änderungen durchlaufen, um seine Leistung und Geschwindigkeit zu verbessern und zu optimieren.

JOP ROCKET ist ein Python-Programm, das die Capstone-Disassemblierungs-Engine sowie andere Abhängigkeiten nutzt. Dieses Software-Exploitation-Tool ist ein voll ausgestattetes Artefakt, das Jump-oriented Programming erleichtern soll. Es ist für die Ausführung unter Windows vorgesehen.

Nutzungsinformationen sind derzeit nicht über das Hilfemenü hinaus verfügbar. Die Konstruktion von JOP-Exploits ist nicht einfach und sehr nuanciert, mit einigen Parallelen, aber vielen Unterschieden zu ROP. Bitte schauen Sie sich den DEF-CON-Vortrag an, um eine kurze Demo zu sehen. https://www.youtube.com/watch?v=PMihX693mPE

Dieses Tool wird an der Dakota State University im Doktorandenprogramm im Rahmen von CSC 848: Advanced Software Exploitation gelehrt, dem anspruchsvollsten Kurs des Programms. Die Studierenden erstellten Exploits, die das Umgehen von DEP und ASLR umfassten.

Dank an Austin Babcock für seine Hilfe bei verschiedenen Problemen im Zusammenhang mit JOP ROCKET, einschließlich seiner Installationsanweisungen. Er ist ein Meister des JOP.

Wir haben hier ein Archiv hochgeladen, JOP ROCKET challenge - toy binaries.zip, um interessierten Parteien zu ermöglichen, JOP an einigen Beispiel-Toy-Binaries mit JOP ROCKET zu testen und zu üben. Können Sie Data Execution Prevention (DEP) umgehen? Das ist gut, wenn Sie JOP an einer Binary üben möchten, von der Sie wissen, dass sie garantiert verwundbar ist und die richtigen Gadgets hat. Es gibt eine einfachere und eine schwerere Version derselben Binary. Allerdings wird JOP beim ersten Mal wahrscheinlich schwerer sein, bis man den Dreh raus hat. Wenn Sie JOP mit diesen Binaries gemeistert haben, können Sie es an einigen realen Gadgets versuchen, vorausgesetzt, sie haben genügend Gadgets. Wenn Sie das Dispatcher-Gadget-Paradigma verwenden, denken Sie daran, dass Sie ein Dispatcher-Gadget benötigen. JOP ist auch gemischt mit ROP möglich, indem ein JOP-Gadget auf ein RET zeigt, sodass JMP EDX EDX auf RET zeigen lassen könnte. Das ist nützlicher, wenn Sie nur ein oder zwei JOP-Gadgets benötigen, um ROP zum Laufen zu bringen. Die Binaries im Archiv sollten es Ihnen jedoch ermöglichen, das Dispatcher-Gadget-Paradigma auf verschiedene Weise zu verwenden!

Mit dem Dispatcher-Gadget-Paradigma von JOP können Sie ROP zu 100 % eliminieren, obwohl es am einfachsten ist, mit zwei ROP-Gadgets zu beginnen, um die Dispatch-Tabelle und das Dispatcher-Gadget zu laden. Die vorgefertigte JOP-Kette erledigt dies automatisch, sofern diese vorhanden sind. Von dort an kann es reines JOP sein, unter Verwendung sowohl indirekter Sprünge als auch indirekter Aufrufe (JMP EBX, CALL EDX usw.).

Grundlegende Installationsanweisungen für JOP ROCKET

Schritt 1:

Installieren Sie Python 2.7. Der einfachste Weg dies zu tun, ist über die Website: https://www.python.org/download/releases/2.7/

Wenn Sie bereits Python 3 haben, benötigen Sie dennoch Python 2.7, da das Tool mit Python 3 nicht ordnungsgemäß funktioniert.

Wenn Sie beide haben, müssen Sie den speziellen Kommentar hinzufügen:

#!python2

an den Anfang von rocket.py. Führen Sie es dann mit "py rocket.py" statt "python rocket.py" aus. Dadurch wird sichergestellt, dass das Programm mit Python 2.7 ausgeführt wird. Alternativ können Sie einfach py -2 rocket.py verwenden.

alt text

Schritt 2:

Installieren Sie pip, falls es nicht bereits in Python enthalten ist.

  • https://pip.pypa.io/en/stable/installing/

Sie müssen das bereitgestellte Skript speichern und ausführen, wie auf dem Link beschrieben. Wenn ein Fehler auftritt, versuchen Sie es mit dem „alternativen“ Skript.

Wenn pip immer noch nicht funktioniert, versuchen Sie, "C:\python27\Scripts" (oder Ihr entsprechendes Verzeichnis) zu Ihrer Systemvariable Path hinzuzufügen:

  • Start
  • Rechtsklick auf Computer
  • Eigenschaften
  • Erweiterte Systemeinstellungen
  • Registerkarte Erweitert
  • Umgebungsvariablen

alt text

Schritt 3:

Beginnen Sie mit der Installation der Abhängigkeiten mit pip!

Hinweis: Installationen mit pip sollten über das Windows-Terminal funktionieren, funktionieren aber möglicherweise nicht in einer Cygwin-Umgebung. Wenn Sie Cygwin verwenden, müssen Sie die Pakete möglicherweise stattdessen aus dem Quellcode installieren. Dies kann zeitaufwendiger sein; es wird auf die neueste Dokumentation der jeweiligen Hersteller der Abhängigkeiten verwiesen.

  • pip install capstone

  • pip install pefile2

    • Sie haben wahrscheinlich bereits pefile mit Python 2.7 installiert, aber diese Version ist alt.

    • Pefile2 ist das, was Sie brauchen.

    • Möglicherweise müssen Sie pip uninstall pefile ausführen, damit das Programm pefile2 verwendet.

  • Usw. Eine Liste der Abhängigkeiten finden Sie am Ende dieses Dokuments. Jede muss installiert werden, falls sie nicht bereits vorhanden ist.

  • Die beiden oben genannten sind wahrscheinlich die einzigen, die Sie selbst installieren müssen.

Viele der Abhängigkeiten sind bereits in Python enthalten. Um verfügbare Module aufzulisten, öffnen Sie eine Eingabeaufforderung:

alt text

Gehen Sie die Liste durch und prüfen Sie, ob Sie alle Abhängigkeiten haben. Installieren Sie die fehlenden mit pip oder aus dem Quellcode.

Abhängigkeiten:

  • Capstone
  • pywin32
  • Pefile2
  • Ctypes

Hinweis: pywin32 wird für Win32file und Win32api verwendet.

Benötigte Dateien:

Sie sollten alle fünf Dateien in einem Verzeichnis haben: rocket.py, lists,py, checkIt.py, ui.py und stackpivot.py. Um das Tool zu verwenden, führen Sie in der Befehlszeile python rocket.py filename.exe aus – wobei filename.exe das Programm ist, für das Sie JOP-Gadgets oder JOP-Ketten erhalten möchten.

Fehler:

Wenn Fehler wie "SyntaxError: Missing parentheses in call to 'print'" auftreten, wird das Programm wahrscheinlich mit Python 3 ausgeführt. Versuchen Sie den in Schritt 1 beschriebenen Fix, damit das Programm Python 2 verwendet.

Fehler im Zusammenhang mit „lists“ oder „ui“ werden wahrscheinlich durch den Speicherort der Dateien lists.py und ui.py verursacht. Stellen Sie sicher, dass sich diese Dateien im selben Verzeichnis wie rocket.py befinden.

Fortgeschrittenere Installationsschritte

Um dies in einer Cygwin-Umgebung zu nutzen, müssen Sie Capstone wahrscheinlich aus dem Quellcode installieren. Es gibt verschiedene Möglichkeiten, dies zu tun, und die Dokumentation von Capstone bietet Unterstützung. Cygwin wurde ursprünglich während der Entwicklung des Tools verwendet, was jedoch nicht mehr der Fall ist. JOP ROCKET v2.0 ist unter Cygwin ungetestet, und die Eingabeaufforderung ist die empfohlene Nutzungsweise von JOP ROCKET. Hinweis: Die Cygwin-Nutzung wird nicht mehr ausdrücklich unterstützt, und es wird nicht mehr empfohlen, dieses Programm damit zu verwenden.

Grundlegende Nutzung

Ausführlichere Nutzungsinformationen folgen in Kürze. Siehe den DEF-CON-27-Vortrag und das Hilfe-Untermenü für Unterstützung.

Um zu beginnen, sollten Sie die fünf Python-Dateien im selben Verzeichnis haben: rocket.py, ui.py, stackpivot.py, checkIt.py und lists.py. Führen Sie das Programm dann über die Befehlszeile aus. Sie können eine lokale Datei im Installationsverzeichnis angeben, aber das Programm wird dann keine Module/DLLs finden können. Um diese zu finden, muss das Programm installiert sein, und der absolute Pfad zur Anwendung kann als Eingabe in einer Textdatei bereitgestellt werden, die als Argument an der Befehlszeile übergeben werden kann, z. B.

python rocket.py input.txt

In input.txt würden wir den absoluten Pfad angeben, z. B. C:\rocket2\sample_binary.exe. Durch die Angabe des absoluten Pfads können Sie bei Bedarf auch die zu scannenden Module extrahieren. Wenn Sie JOP ROCKET nur mit dem Programm im lokalen Verzeichnis verwenden möchten, werden nur Gadgets für das Image-Programm selbst gefunden, d. h. keine DLLs. Um es auf diese Weise zu verwenden, nutzen Sie die folgende Syntax:

python rocket.py sample_binary.exe

Wenn sich die ausführbare Datei im selben Verzeichnis befindet, können Sie JOP ROCKET auf die oben beschriebene Weise verwenden.

Sicherstellen, dass Sie ALLE Module/DLLs für eine Binary erhalten

Beim Laden einer ausführbaren Datei oder DLL zur Analyse gibt es zwei Ansätze. Der erste besteht darin, die ausführbare Datei einfach in dasselbe Verzeichnis zu legen und das Programm mit dieser Datei als Argument auszuführen, z. B. python rocket.py binary.exe. Dies ermöglicht es dem Benutzer, viele der Systemmodule zu identifizieren und zu extrahieren. Einige der Nicht-System-Binaries werden jedoch nicht gefunden. Für eine umfassende Abdeckung muss der Benutzer den absoluten Pfad zur Anwendung in einer Textdatei angeben und diese als Eingabe für ROCKET verwenden, z. B. python rocket.py input.txt. Dadurch kann ROCKET Nicht-System-DLLs, die mit der Zielanwendung verbunden sind, lokalisieren, extrahieren und durchsuchen. Daher wird allgemein empfohlen, die Binary als Eingabe über eine Textdatei bereitzustellen, da andernfalls einige DLLs ausgeschlossen werden können. Z. B. python rocket.py binaryToScan.txt. Die Datei binaryToScan.txt sollte den Pfad zur Binary enthalten, C:\Users\CoolPerson\Desktop\Instructions\targetBinary.exe

Speicherprobleme bei sehr großen Binaries

Das 32-Bit-Python wird bei sehr großen Binaries Probleme bekommen. Um mit diesen arbeiten zu können, müssen Sie 64-Bit-Python verwenden.

Hier sind einige Anweisungen von Austin für den Wechsel von 32-Bit- zu 64-Bit-Python: Um die 64-Bit-Version von Python 2.7 zu installieren, stellen Sie zunächst sicher, dass die alte Installation deinstalliert wurde. Nach der Installation der 64-Bit-Version können beim Importieren von Bibliotheken Fehler wie "DLL load failed: %1 is not a valid Win32 application" auftreten. Diese entstehen, weil Python versucht, die zuvor installierten 32-Bit-Versionen zu laden. Um dieses Problem zu beheben, deinstallieren Sie die Bibliothek mit pip. Wenn sowohl Python 2 als auch Python 3 installiert sind, stellen Sie sicher, dass die richtige Version von pip verwendet wird, indem Sie es als "py -2 -m pip " aufrufen.

Das Beheben des Problems für Capstone ist einfach:

py -2 -m pip uninstall capstone

py -2 -m pip install capstone

Fehler im Zusammenhang mit dem win32api-Import hängen mit pywin32 zusammen. Das Deinstallieren ist schwieriger, da pip den Vorgang möglicherweise nicht automatisiert. Es muss möglicherweise manuell deinstalliert werden, indem die PyWin32-Dateien in ...\Python27\Lib\site-packages gelöscht werden.

Dann führen Sie aus:

py -2 -m pip install pywin32

Schließen Sie die Installation ab, indem Sie ...\Python27\Scripts\pywin32_postinstall.py -install ausführen.

Fragen & Antworten

F: Was ist das Besondere an JOP ROCKET?

A: JOP ROCKET findet alle erforderlichen Gadgets, einschließlich des Dispatcher-Gadgets. Mir ist kein anderes Werkzeug bekannt, das nach Dispatcher-Gadgets sucht. Darüber hinaus führt es neue Arten von Gadgets und Innovationen für JOP ein. JOP ROCKET kann auch eine vollständige JOP-Kette generieren, um DEP zu umgehen, unter Verwendung einer neuen Variante des Dispatcher-Gadget-Paradigmas, die eine Reihe mehrfacher Stack-Pivots umfasst. Realistisch betrachtet wäre es ohne JOP ROCKET sehr schwierig, einen JOP-Exploit mit dem Dispatcher-Gadget-Ansatz zu erstellen. Es gibt einige andere ROP-Tools, die möglicherweise begrenztere JOP-Gadgets bieten, aber sie sind meist Platzhalter für zukünftige Arbeiten, und man könnte einen JOP-Exploit nicht ohne einige der mit JOP ROCKET gefundenen Gadgets vervollständigen.

F: Ich glaube, ich habe JOP ROCKET schon einmal in einem Vortrag gesehen? Wo war das?

A: Wir haben auf mehreren Konferenzen präsentiert: DEF CON 27 (2019), Wild West Hackin’ Fest (2020), Hack in the Box Amsterdam (2021), Black Hat Asia (2021) und @Hack (2021) (inzwischen umbenannt in Black Hat Middle East and Africa). Zu jeder dieser Konferenzen gibt es in der Regel ein Whitepaper und ein Video (kein Video für @Hack). Es gab auch akademische Konferenzen. Jeder Vortrag und jedes Whitepaper ist anders, in der Regel mit mindestens 60–70 % neuen Inhalten. Sie behandeln viele verschiedene Themen zu JOP. Wir haben keine neuen Vorträge geplant und würden keinen weiteren halten, es sei denn, wir hätten etwas Neues zu teilen, da wir uns nicht gerne wiederholen.

Hier ist eine begrenzte Auflistung einiger JOP-Materialien. Dies ist nicht derselbe Vortrag oder dasselbe Papier, da wir uns ständig weiterentwickeln und neue Innovationen hinzufügen. Jedes hat neuartige Beiträge.

DEF CON 27 2019 Video: https://www.youtube.com/watch?v=PMihX693mPE

Wild West Hackin’ Fest 2020 Video: https://www.youtube.com/watch?v=ZQuxSSBfeHM

Black Hat Asia Video: https://www.youtube.com/watch?v=NYgTw-h6GT8

Black Hat Asia Paper: https://i.blackhat.com/asia-21/Thursday-Handouts/as-21-Brizendine-Babcock-Prebuilt-Jop-Chains-With-The-Jop-Rocket-wp.pdf

Hack in the Box Amsterdam 2021 Video: https://www.youtube.com/watch?v=MxIySXHvKyE

Hack in the Box Amsterdam 2021 Paper: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-.pdf

Hohe Auflösung: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-Hi-res.pdf

@Hack 2021 (umbenannt in Black Hat Middle East and Africa) Paper: https://blackhatmea.com/content-hub/advanced-code-reuse-attacks-jump-oriented-programming

Wenn Sie ein akademischer Forscher sind, zitieren Sie bitte auch einige dieser oder unsere akademischen Papiere. :-)

F: Was ist ein Beispiel für einen realen JOP-Exploit?

A: Austin hat einen bei Exploit DB veröffentlicht: https://www.exploit-db.com/exploits/49959

Sie können ein Video davon und von ihm, wie er darüber spricht, in unserer HITB-2021-Präsentation sehen. Dieser reale JOP-Exploit stellte besondere Herausforderungen dar, daher lohnt es sich, ihn anzusehen und zu studieren. Obwohl Austin ihn von Hand geschrieben hat, hätte die automatische JOP-Kettengenerierung von JOP ROCKET tatsächlich den größten Teil der Arbeit erledigt. (Es wäre dennoch ein zusätzliches spezielles Setup erforderlich gewesen, um einige der Herausforderungen auszugleichen.) Dies ist auch ein Beispiel für unsere neuartige Variante des Dispatcher-Gadget-Ansatzes, die eine Reihe mehrfacher Stack-Pivots verwendet. Dieser Exploit dauerte weniger als einen Tag.

F: Ist JOP schwer umzusetzen?

A: Nein, ist es nicht, aber es unterscheidet sich stark von ROP. Es gibt an manchen Stellen andere „Regeln“, die nicht sofort offensichtlich sind. Wir schreiben ausführlich über sie in verschiedenen Papieren oder sprechen in verschiedenen Vorträgen, die wir gehalten haben, über sie. Was jedoch manchmal eine Herausforderung sein kann, ist das Vorhandensein ausreichender Gadgets. Es gibt verschiedene Stile von JOP, und wenn Sie den Dispatcher-Gadget-Ansatz versuchen – der es Ihnen ermöglicht, einen vollständigen JOP-Exploit ohne ROP zu erstellen – dann müssen Sie ein Dispatcher-Gadget haben.

F: Ist JOP nicht nur ROP unter einem anderen Namen?

A: JOP ist sehr flexibel. Das kann es sein. Sie könnten ein RET in ein JOP-Gadget laden, sodass z. B. ein JMP EBX dem RET entsprechen würde. In diesem Sinne könnten Sie JOP nur als eine Möglichkeit nutzen, ROP zu erweitern, und Sie bräuchten kein Dispatcher-Gadget. Es wäre mühsam, einen gesamten Exploit auf diese Weise aufzubauen, obwohl Sie es tun könnten, wenn Sie wirklich wollten. Wir schreiben auch über andere Stile von JOP, obwohl sich der Großteil unserer Arbeit auf den Dispatcher-Gadget-Ansatz konzentriert.

F: Was ist ein Dispatcher-Gadget? Ist es leicht zu finden? Was ist ein Zwei-Gadget-Dispatcher?

A: Das war ein relativ seltenes Gadget und nicht immer leicht zu finden; einige Binaries hatten keine brauchbaren Dispatcher-Gadgets. Beachten Sie, dass hier die Vergangenheitsform verwendet wird. Wir haben alternative Dispatcher-Gadgets eingeführt und, was noch wichtiger ist, einen Zwei-Gadget-Dispatcher, über den wir im HITB-Paper geschrieben haben. Dieser nimmt zwei häufige Gadgets und verkettet sie miteinander, sodass ein Dispatcher-Gadget nicht mehr selten ist. Eines der erforderlichen Gadgets ist so verbreitet, dass es normalerweise Varianten davon für fast alle Register gibt; das andere ist sehr verbreitet, aber nicht ganz so verbreitet. Es kann jedoch andere praktische Einschränkungen geben, z. B. wenn Sie einen Zwei-Gadget-Dispatcher verwenden, bindet dies ein weiteres Register. (Es ist möglich, Dispatcher-Gadgets und verwendete Register während eines Exploits zu wechseln, falls zusätzliche Flexibilität benötigt wird.)

F: Ist das Zwei-Gadget-Paradigma in die automatische JOP-Kettengenerierung von JOP ROCKET integriert?

A: Nein, ist es nicht. Die automatische JOP-Kettengenerierung war zeitaufwendig zu erstellen, und ich habe das Konzept des Zwei-Gadget-Dispatchers erst danach entwickelt. Ich werde es vielleicht irgendwann hinzufügen, aber nicht in unmittelbarer Zukunft. Wahrscheinlicher wäre, dass es nur hinzugefügt würde, wenn ich JOP ROCKET komplett neu schreibe. Standardmäßig erstellt JOP ROCKET verschiedene Variationen von JOP-Ketten für alle verfügbaren Register, selbst wenn ein traditionelles Dispatcher-Gadget nicht gefunden werden kann. Daher wäre es für jemanden nicht allzu viel Aufwand, seinen eigenen Zwei-Gadget-Dispatcher hinzuzufügen. Man müsste jedoch auf Register achten, die für den Zwei-Gadget-Dispatcher geschützt werden müssen, da das Tool dies nicht automatisch tun würde.

F: Ich möchte versuchen, meine eigene JOP-Kette zu erstellen? Kann ich das?

A: Sicher, zu Lehrzwecken haben wir eine Binary auf GitHub – in zwei Formen – mit künstlich erstellten JOP-Gadgets – sowohl eine einfache als auch eine schwierige Version. Die schwierige Version hat Einschränkungen durch Nullbytes. Sie könnten versuchen, eine ohne automatische JOP-Kettengenerierung zu erstellen, um zu sehen, ob Sie Ihre eigenen Gadgets finden. Sie könnten es auch mit automatischer JOP-Kettengenerierung versuchen. Bei der automatischen JOP-Kettengenerierung müssen Sie bei Nullbytes zusätzliche Arbeit leisten. Ich nehme an, das könnte ein Bereich für zukünftige Arbeiten sein – einen Teil davon zu automatisieren.

F: Warum verwendet JOP ROCKET einen älteren Python-Stil? Werden Sie es auf modernes Python umstellen?

A: Es wurde vor einigen Jahren zuerst erstellt, und ich hatte damals nicht die Absicht, es jemals zu teilen. Ich habe es zunächst nur zufällig bei DEFCON eingereicht. Leider sind die Unterschiede zwischen dem modernen und dem älteren Python so groß, dass es sehr nicht-trivial wäre, JOP ROCKET zu ändern, und es gibt viele komplexe Funktionen, bei denen die Unterschiede eine Rolle spielen würden. JOP ROCKET ist zudem sehr groß, und ich weiß nicht unbedingt aus dem Kopf, an welchen Stellen Änderungen nötig wären. Wahrscheinlicher wäre, dass ich JOP ROCKET komplett neu schreibe und Teile davon viel modularer und kompakter mache, als es derzeit ist. Es gibt mehrere neue Funktionen, die ich gerne hinzufügen würde, wenn ich das täte, und ich könnte einige sehr coole Dinge tun, wenn ich das täte. Ich habe keine Pläne in unmittelbarer Zukunft, aber es könnte in den nächsten ein bis drei Jahren passieren. Man sollte niemals nie sagen, da ich manchmal Code sehr schnell neu schreiben kann. In der Zwischenzeit werde ich möglicherweise andere Updates für das aktuelle JOP ROCKET vornehmen, da kleinere Updates einfacher sind als eine komplette Neuauflage.

F: Wer ist „wir“?

A: Der Schöpfer von JOP ROCKET ist Dr. Bramwell Brizendine. Dies war ursprünglich das Thema seiner Dissertation, hat sich aber seitdem stark weiterentwickelt und verändert. Einer seiner Studenten, Austin Babcock, kam als Undergraduate in die JOP-Forschung und setzte sie bis zu seinem Masterabschluss in Informatik fort. In dieser Zeit war Austin Co-Autor mehrerer Paper und Co-Sprecher bei mehreren Veranstaltungen. Austin hat wichtige Beiträge zur Mechanik der Funktionsweise von JOP geleistet. Später wurde er Mitwirkender bei JOP ROCKET und führte hauptsächlich Optimierungen und Codeverbesserungen ein. Austin hat mehrere JOP-Exploits erstellt. Einer davon ist auf ExploitDB.

**F: Was sind die „neuesten“ Dinge im Bereich JOP, die ihr gemacht habt?**A: Nun, es gibt den Zwei-Gadget-Dispatcher, der JOP damit mit zahlreichen Binaries möglich macht, da das Dispatcher-Gadget nicht länger obskur ist. Das ist enorm – denn in vielen Fällen wäre dieser Mangel an einem gültigen Dispatcher-Gadget einschränkend gewesen; das ist schlicht nicht mehr der Fall. Wir haben auch einige alternative Single-Dispatcher-Gadgets eingeführt, obwohl die meisten nicht alltäglich zu sein scheinen (Andrew Kramer gebührt für einige davon Anerkennung). Wir haben auch „shellcodeless JOP“ eingeführt, das die Notwendigkeit vermeidet, DEP zu umgehen, und die Funktionalität eines Shellcodes direkt in ein JOP integriert. Einen kleinen Teil davon zeigen wir auf der HITB und mehr auf der @Hack 2021 (Black Hat MEA). Die @Hack wurde nicht gefilmt, obwohl es ein sehr detailliertes Paper dazu gibt. Einen Clip davon in Aktion kann man in einigen der tonlosen Demo-Videos für @Hack 2021 sehen: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV . Einige Studierende haben die Herausforderung von shellcodeless JOP aufgegriffen – das ist etwas, das größeres Können und Meisterschaft bei Code-Reuse-Angriffen erfordern kann.

Q: Funktioniert JOP ROCKET mit Linux-Binaries?

A: Nein, leider nicht.

Q: Funktioniert JOP ROCKET mit 64-Bit-Binaries?

A: Nein, derzeit nicht.

Q: Was ist der allgemeine Ansatz von JOP?

A: Lesen Sie unsere Paper oder sehen Sie sich unsere Vorträge an. Wir haben eine enorme Menge Arbeit in die Erweiterung dessen gesteckt, was mit JOP möglich ist. Vor unserer Forschung gab es praktisch keine Dokumentation zu JOP, und wir haben viele neue praktische Techniken für JOP entwickelt.

Q: Ich bin akademischer Forscher und möchte etwas mit JOP machen, etwa für ein Paper oder eine Präsentation. Kann ich Sie kontaktieren?

A: Sicher, Sie können uns kontaktieren, wenn Sie ein Paper oder ein neues Projekt planen. Sie erreichen mich unter bramwell.brizendine AT gmail . Ich kann es an Austin weiterleiten, falls er interessiert ist. Möglicherweise wären wir sogar an einer Zusammenarbeit interessiert. Bitte zitieren Sie uns, wenn Sie unsere Forschung in irgendeiner Weise für JOP nutzen. Der wahrscheinlich praktischste Ansatz für Forschung zu JOP wäre die Einführung von Verteidigungen gegen JOP oder von Abschwächungsmaßnahmen dafür. Wir wurden bereits kontaktiert.

Q: Haben andere Leute JOP gemacht?

A: Es ist nicht verbreitet, und vor unserem ersten DEFCON-Vortrag war es äußerst selten. Wir haben das Bewusstsein dafür sicherlich erheblich gesteigert. Ich habe es zuvor drei Jahre lang in einem Doktorandenkurs „Advanced Software Exploitation“ unterrichtet, sodass Dutzende von Studierenden JOP-Exploits erstellt haben. Ich weiß nicht, wie viele Leute es in freier Wildbahn tun – sicherlich können es jetzt Leute mit JOP ROCKET tun. Ich habe auch verschiedene Bachelor-Studierende JOP-Exploits erstellen lassen. Es gibt keinen besonderen Grund, warum es ein Doktorand sein muss – jeder mit starker Kompetenz in Exploitation und Code-Reuse-Angriffen kann es. Angesichts der Anzahl der Vorträge, die wir gehalten haben, und der Paper, die wir geschrieben haben – zusammen mit Innovationen wie dem Zwei-Gadget-Dispatcher – gibt es keinen Grund, warum jemand, der mit ROP vertraut ist, es nicht aufgreifen könnte.

Q: Warum war JOP ROCKET notwendig?

A: Ohne JOP ROCKET würde man nur einen Bruchteil der JOP-Gadgets entdecken, und diese wären unorganisiert, sodass das Finden von etwas wie die Suche nach der Nadel im Heuhaufen wäre. Viele reale JOP-Gadgets sind unbeabsichtigte Gadgets, die nicht natürlich vorkommen. Wenn man also nicht eine Art äußerst engagiertes Ausnahmetalent wäre und eigene Tools oder Skripte erstellen würde, würde man eine Menge verpassen, wenn man versuchte, einen vollständigen JOP-Exploit ohne ROP-Gadgets zu erstellen. Es gibt auch Dinge wie Dispatcher-Gadgets, die man irgendwie magisch selbst finden müsste, selbst unbeabsichtigte Formen. Es gibt einen guten Grund, warum JOP vor unserer Arbeit sehr selten und kaum thematisiert wurde. Das soll nicht bedeuten, dass es jetzt alltäglich ist. Vor JOP ROCKET hätte man mehrere erhebliche Probleme überwinden müssen, um einen Exploit zu schreiben. Jetzt sind diese Probleme mit JOP ROCKET überwunden, und man kann seinen eigenen mit JOP-Gadgets bauen oder vielleicht eine JOP-Kette anpassen, die durch automatische JOP-Kettengenerierung erstellt wurde.

Q: Kann JOP einfacher als ROP sein?

A: Eigentlich habe ich von einigen Studierenden gehört, dass JOP einfacher ist als ROP – und es kann einfacher sein – mit dem richtigen Gadget und unter Verwendung unseres neuartigen Ansatzes für das Dispatcher-Gadget mit mehreren Stack-Pivots. Beachten Sie, dass das Schlüsselwort hier „kann sein“ ist. Das gilt nur unter besonderen Umständen, wie etwa ohne Nullbyte-Beschränkungen und mit reichlich vorhandenen Stack-Pivot-Gadgets, und vorausgesetzt, dass ein gültiges Dispatcher-Gadget existiert.

Q: Für wen ist JOP gedacht?

A: Ich denke, es ist in erster Linie für Menschen, die sich mit Code-Reuse-Angriffen auskennen und sich selbst herausfordern wollen, indem sie etwas hochmodernes ausprobieren – auch wenn nicht jedes JOP unbedingt „schwierig“ sein muss. Wenn Sie JOP beherrschen, ist das ein Ehrenabzeichen. Wenn Sie einen JOP-Exploit erstellen, veröffentlichen Sie ihn auf ExploitDB und verlinken Sie JOP ROCKET, um das Bewusstsein zu stärken. JOP kann auch für Menschen sein, die einfach die Verwendung von ROP vermeiden möchten – es könnte eine Mitigation geben, die ROP-Gadgets erkennt. JOP ist nicht ROP, und Sie können einen vollständigen JOP-Exploit ohne ein einziges ROP-Gadget erstellen.

Q: Ich habe die automatische JOP-Kettengenerierung durchgeführt, und es wurden viele verschiedene Ketten für VirtualAlloc und VirtualAlloc erstellt. Warum gibt es so viele?

A: Ich betrachte JOP von dem Standpunkt aus, dass bestimmte Register einen Zeiger auf das Dispatcher-Gadget und einen Zeiger auf die Dispatch-Tabelle halten, sodass diese Register belegt sind. Funktionale Gadgets (ähnlicher zu normalen ROP-Gadgets) rufen das Dispatcher-Gadget auf, das dann die Position in der Dispatch-Tabelle weiterschiebt. JOP ROCKET erstellt daher verschiedene Ketten mit unterschiedlichen Registerkombinationen. Einige Register sind für das Dispatcher-Gadget und die Dispatch-Tabelle „reserviert“, obwohl man, wenn man möchte, beliebig oft hin- und herwechseln kann. Einige Register werden wünschenswertere JOP-Ketten haben – in dem Sinne, dass sie vielleicht Gadgets enthalten, die „einfacher“ zu verwenden sind. Deshalb stellen wir gerne Optionen bereit. Standardmäßig erzeugt JOP ROCKET fünf für jede davon, sodass Sie, wenn es bei einer ein Problem gibt, vielleicht andere zur Ansicht haben. Zusätzlich erzeugt JOP ROCKET diese auch dann, wenn kein wünschenswertes Dispatcher-Gadget gefunden wird, da es immer Alternativen oder Zwei-Gadget-Dispatcher geben kann. (JOP ROCKET findet Zwei-Gadget-Dispatcher, bindet sie aber derzeit nicht in die JOP-Kettengenerierung ein.) Um also zur Frage zurückzukommen: JOP ROCKET wird versuchen, viele Optionen bereitzustellen, und es liegt am Benutzer, sie zu bewerten und zu bestimmen, welche am wünschenswertesten oder am einfachsten zu handhaben ist.

Q: JOP ROCKET liefert mir keine guten Ergebnisse bei der automatischen JOP-Kettengenerierung. Woran liegt das?

A: In einigen Fällen könnte es Fehler geben, aber es ist auch wichtig zu bedenken, dass die automatische JOP-Kettengenerierung darauf basiert, dass Sie mehrere Stack-Pivots verwenden (siehe Vorträge und Paper). Sie müssen die gewünschte Pivot-Größe angeben, da nur Ergebnisse basierend auf dem Standardwert erzeugt werden. Es könnte einen hervorragenden Stack-Pivot geben, der sehr groß ist, und Sie könnten ihn verpassen, weil er außerhalb Ihres Bereichs liegt. Sie sollten also unbedingt den Bereich akzeptabler Stack-Pivots berechnen und das Minimum und Maximum angeben. Sie können später immer Dinge mit Padding anpassen – es muss nicht präzise sein.

Q: Gibt es „Schwachstellen“ mit JOP in Compilern?

A: Eigentlich ja, mit VisualStudio 2015, alles, was wir mit Developer Prompt kompiliert vorfanden, hatte ein paar äußerst wünschenswerte Dispatcher-Gadgets, die immer vorhanden waren! Ich wollte dazu in einem Vortrag detaillierte Informationen einbringen, aber es wurde aus Zeitgründen gestrichen. Möglicherweise füge ich das später separat hinzu. Die schlechte Nachricht ist, dass wir alle Binaries, die von anderen Editionen von Visual Studio aus anderen Jahren erstellt wurden, bis vor etwa einem Jahr ausgewertet haben und diese Wiederholung nicht gesehen haben. Auch wenn es schön sein kann, ausgezeichnete Dispatcher-Gadgets zu haben, sind sie nicht notwendig, wie an anderer Stelle mit dem neuartigen Zwei-Gadget-Dispatcher beschrieben, den wir eingeführt haben. Außerdem ist das keine tatsächliche Schwachstelle, sondern nur eine Möglichkeit zu gewährleisten, dass JOP leicht zugänglich wäre, vorausgesetzt, es gibt eine echte Schwachstelle.

Q: Ist JOP ROCKET ein eigenständiges Tool? Funktioniert es mit einem Debugger?

A: Ja, es ist ein eigenständiges Tool, das statische Analyse durchführt, und nein, es kann nicht in einen Debugger wie Mona integriert werden. Es gibt eine Option in JOP ROCKET, um DLLs zu durchsuchen, die es finden kann, und es kann diese durchsuchen, obwohl offensichtlich die meisten Windows-System-DLLs aufgrund von Mitigations nicht nutzbar sind. Sie können JOP ROCKET basierend auf Mitigations aus- oder einschließen lassen. Da es sich um statische Analyse handelt, kann es, obwohl es optional DLLs durchsucht, einige übersehen, die nicht im IAT gefunden werden oder deren Speicherorte von JOP ROCKET nicht leicht bestimmt werden können. Das ist eine inhärente Einschränkung der statischen Analyse. Standardmäßig durchsucht JOP ROCKET nur das Image selbst, also die .exe, nicht die DLLs, um Zeit zu sparen. Wenn Sie versuchen, eine Binärdatei zu analysieren und sich Nicht-System-DLLs anzusehen, muss diese Anwendung installiert sein, und Sie sollten ihren Pfad angeben. Wenn Sie sich nicht für DLLs interessieren, müssen Sie die Binärdatei nicht installieren.

Q: Können Sie zu folgendem Zitat Stellung nehmen: „JOP ROCKET ist ein 2019 von [Bri19] veröffentlichtes Tool, das behauptet, vollständige JOP-Ketten auf vollständig automatisierte Weise zu erzeugen. Bei genauerer Betrachtung sehen wir, dass jeder reale Anwendungsfall seiner Technik aus einer gemischten ROP- und JOP-Kette besteht, wobei nur ein kleiner Teil des Ergebnisses aus reinen JMP-Gadgets besteht, während der Rest aus Gadgets besteht, die mit einer RET-Anweisung enden, die für den Aufbau der JOP-Kette benötigt wird.“

A: Leider spiegelt das ein mangelhaftes Verständnis von JOP wider. JOP verwendet das Dispatcher-Gadget-Paradigma, das eine Dispatch-Tabelle und ein Dispatcher-Gadget erfordert. Die Adresse des Dispatcher-Gadgets und der Dispatch-Tabelle muss in ihre jeweiligen Register geladen werden, um JOP einzurichten. Obwohl dies auch über JOP erreicht werden könnte, wurde dies aus Kompatibilitätsgründen über zwei ROP-Gadgets mit pop bewerkstelligt. Nach dieser Initialisierung, die nur aus zwei ROP-Gadgets besteht, werden keine weiteren ROP-Gadgets verwendet. Die Anzahl der verwendeten JOP-Gadgets kann je nach Eingabe des Benutzers zwischen einem und Dutzenden variieren. Das Problem liegt hier nicht am Tool, sondern an einem Missverständnis des Tools und von JOP. JOP ROCKET liefert durchaus Exploits, die für reale Anwendungen geeignet sind, wenn Sie die entsprechende Eingabe bereitstellen. Tatsächlich wurde dies in einem Kurs „Advanced Software Exploitation“ verwendet, der zuvor vom Autor unterrichtet wurde und von den Studierenden verlangte, JOP ROCKET zu verwenden, um verschiedene JOP-Exploits zu erstellen. Es ist enttäuschend, dass die obigen Anmerkungen in der akademischen Forschung gemacht wurden, da für jede JOP-Kette maximal zwei ROP-Gadgets verwendet werden. Der einzige reale JOP-Exploit, der uns auf Exploit_DB bekannt ist, stammt von einem von uns, Austin Babcock, und wie er auf der Hack in the Box Amsterdam 2021 erklärte, spiegelt sein Exploit weitgehend wider, was von JOP ROCKET gefunden wurde. In den meisten praktischen Fällen macht es wirklich keinen Unterschied, ob man zwei ROP-Gadgets für den Aufbau verwendet. Manchmal gibt es für eine Binärdatei keine geeigneten JOP-Gadgets, die dem Dispatcher-Gadget-Paradigma entsprechen, um JOP einzurichten. Wir würden es vorziehen, dass JOP potenziell auf jeder Binärdatei machbar ist, als es aus dem Wunsch heraus einzuschränken, 100 % reines JOP zu haben. Eine der größten Einschränkungen von JOP ist schließlich eine unzureichende Anzahl an JOP-Gadgets. Stand 2024 werden keine aktiven Updates für JOP ROCKET mehr vorgenommen, und in einer möglichen neuen Version, die viel fortschrittlicher wäre und sich am deutlich neueren ROP ROCKET orientieren würde, gäbe es wahrscheinlich eine Option für reines JOP.

Tool herunterladen