Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
JOP_ROCKET — Questo framework consente all'utente di scoprire gadget JOP e può automatizzare la costruzione di una catena JOP completa per bypassare il DEP. JOP ROCKET è la soluzione definitiva per la programmazione jump-oriented su Windows. JOP ROCKET trova inoltre il nuovo dispatcher a due gadget, che amplia notevolmente ciò che è possibile fare con JOP. | Kitploit
Strumenti/GitHubGitHub/bw3ll/jop_rocket
ExploitReverse EngineeringPaper e RicercaApprendimento e FormazioneSviluppo PayloadBinary ExploitationLab e Pratica
GitHubbw3ll/jop_rocket

JOP_ROCKET

Vedi Repository
116201 anno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →

Informazioni

Questo framework consente all'utente di scoprire gadget JOP e può automatizzare la costruzione di una catena JOP completa per bypassare il DEP. JOP ROCKET è la soluzione definitiva per la programmazione jump-oriented su Windows. JOP ROCKET trova inoltre il nuovo dispatcher a due gadget, che amplia notevolmente ciò che è possibile fare con JOP.

Condividi

alt text

JOP ROCKET

NOTA: Con la 2.15, introduciamo il dispatcher a due gadget: questo espande significativamente le possibilità con i gadget dispatcher. Molte ottimizzazioni e ulteriori nuove funzionalità sono state aggiunte con la 2.15 il 26 maggio 2021.

Aggiornamento: 29 novembre 2021: ho caricato le slide per @Hack a Ryadh e anche un white paper su JOP senza shellcode. I video demo silenziosi usati nel talk si trovano qui: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV

Aggiornamento: 1 dicembre 2022: ho aggiunto una sezione Q & A alla fine di questa pagina GitHub, che include collegamenti a risorse (talk e paper).

Versione attuale: 2.15

The Jump-oriented Programming Reversing Open Cyber Knowledge Expert Tool, o JOP ROCKET, è uno strumento progettato per facilitare la scoperta di gadget JOP in un ambiente Windows x86. Questo strumento è stato rilasciato al DEF CON 27, dove è stato oggetto di un talk del Dr. Bramwell Brizendine e del Dr. Josh Stroschein. Un importante aggiornamento è stato rilasciato nel settembre 2020, con aggiornamenti minori previsti nel prossimo futuro.

Si prega di visitare https://github.com/Bw3ll/JOP_ROCKET per scaricare questo strumento.

Si sono verificati numerosi aggiornamenti importanti. Si consiglia di aggiornare qualsiasi versione precedente alla 2.15, per usufruire dei numerosi aggiornamenti. Questi includono la generazione automatica di catene JOP, la scoperta di nuovi tipi di gadget, nuovi tipi di gadget dispatcher e i dispatcher a due gadget. JOP ROCKET ha anche subito molte altre importanti modifiche per migliorare e ottimizzare le proprie prestazioni e velocità.

JOP ROCKET è un programma Python che utilizza il motore di disassemblaggio Capstone e altre dipendenze. Questo strumento di sfruttamento software è un artefatto completo progettato per facilitare la programmazione orientata ai salti (Jump-oriented Programming). È pensato per essere eseguito su Windows.

Le informazioni sull'uso non sono disponibili al momento oltre a quelle nel menu di aiuto. La costruzione di exploit JOP non è semplice ed è molto sfumata, con alcuni parallelismi ma molte differenze rispetto al ROP. Fare riferimento al talk del DEF CON per vedere una breve demo. https://www.youtube.com/watch?v=PMihX693mPE

Questo strumento è stato insegnato alla Dakota State University nel programma di dottorato, nell'ambito del corso CSC 848: Advanced Software Exploitation, il corso più impegnativo del programma. Gli studenti hanno completato exploit che includevano il bypass di DEP e ASLR.

Un ringraziamento ad Austin Babcock per il suo aiuto con vari problemi relativi a JOP ROCKET, incluse le sue istruzioni di installazione. È un maestro di JOP.

Abbiamo caricato un archivio qui, JOP ROCKET challenge - toy binaries.zip, per consentire agli interessati di testare e fare pratica con JOP su alcuni binari giocattolo di esempio, usando JOP ROCKET. Riesci a bypassare la Data Execution Prevention (DEP)? Questo è utile se vuoi esercitarti con JOP su un binario che sai essere sicuramente vulnerabile e dotato dei gadget giusti. Esiste una versione più facile e una più difficile dello stesso binario. Anche se JOP probabilmente sarà più difficile la prima volta, finché non si prende la mano. Una volta padroneggiato JOP con questi binari, puoi provarlo su alcuni gadget del mondo reale, supponendo che abbiano gadget sufficienti. Se stai usando il paradigma del gadget dispatcher, tieni presente che hai bisogno di un gadget dispatcher. JOP è possibile anche mescolato con ROP, usando un gadget JOP per puntare a una RET, quindi JMP EDX potrebbe fare in modo che EDX punti a RET. Questo è più utile se hai bisogno solo di uno o due gadget JOP per far funzionare il ROP. I binari nell'archivio dovrebbero comunque permetterti di usare il paradigma del gadget dispatcher in alcuni modi diversi!

Con il paradigma del gadget dispatcher di JOP, puoi eliminare al 100% il ROP, anche se è più semplice iniziare con due gadget ROP, per caricare la tabella di dispatch e il gadget dispatcher. La catena JOP predefinita lo farà automaticamente per te, supponendo che siano presenti. Da lì, può essere JOP puro, usando sia salti indiretti che chiamate indirette (JMP EBX, CALL EDX, ecc.).

Istruzioni di installazione di base per JOP ROCKET

Passo 1:

Installa Python 2.7. Il modo più semplice per farlo sarà dal sito web: https://www.python.org/download/releases/2.7/

Se hai già Python 3, avrai comunque bisogno di Python 2.7 perché lo strumento non funzionerà correttamente con Python 3.

Se li hai entrambi, dovrai aggiungere il commento speciale:

#!python2

in cima a rocket.py. Quindi esegui con "py rocket.py" invece di "python rocket.py". Questo garantirà che il programma venga eseguito con Python 2.7. In alternativa, puoi semplicemente eseguire py -2 rocket.py

alt text

Passo 2:

Installa pip se non è già incluso con Python.

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

Dovrai salvare lo script fornito ed eseguirlo, come da istruzioni sul link. Se incontri un errore, prova a usare lo script "alternate".

Se pip continua a non funzionare, prova ad aggiungere "C:\python27\Scripts" (o la directory corrispondente) alla variabile di sistema Path:

  • Start
  • Fare clic destro su Computer
  • Proprietà
  • Impostazioni di sistema avanzate
  • Scheda Avanzate
  • Variabili d'ambiente

alt text

Passo 3:

Inizia a installare le dipendenze con pip!

Nota: Le installazioni con pip dovrebbero funzionare usando il terminale di Windows, ma potrebbero non funzionare in un ambiente Cygwin. Se usi Cygwin, potresti dover installare dal codice sorgente. Questo può essere un'impresa più lunga, e ti rimandiamo alla documentazione più recente dei diversi creatori delle dipendenze.

  • pip install capstone

  • pip install pefile2

    • Probabilmente hai già pefile installato con Python 2.7, ma questa versione è vecchia.

    • Pefile2 è ciò di cui hai bisogno.

    • Potresti aver bisogno di pip uninstall pefile per fare in modo che il programma usi pefile2.

  • Ecc... Un elenco delle dipendenze si trova in fondo a questo documento. Ognuna deve essere installata, se non lo è già.

  • Le due sopra sono probabilmente le uniche che dovrai installare tu stesso.

Molte delle dipendenze sono già incluse con Python. Per elencare i moduli disponibili, apri un prompt:

alt text

Controlla l'elenco e verifica di avere tutte le dipendenze. Per quelle che non hai, installale con pip o tramite codice sorgente.

Dipendenze:

  • Capstone
  • pywin32
  • Pefile2
  • Ctypes

Nota: pywin32 è usato per Win32file e Win32api

File necessari:

Dovresti avere in una directory tutti e cinque i file: rocket.py, lists,py, checkIt.py, ui.py e stackpivot.py. Per iniziare a usare lo strumento, esegui dalla riga di comando: python rocket.py filename.exe -- dove filename.exe è il programma di cui desideri ottenere gadget JOP o catene JOP.

Errori:

Se ricevi errori come "SyntaxError: Missing parentheses in call to 'print'", è probabile che il programma stia girando con Python 3. Prova ad applicare la correzione descritta nel Passo 1 per far usare a Python 2 il programma.

Gli errori relativi a "lists" o "ui" sono probabilmente causati dalla posizione dei file lists.py e ui.py. Assicurati che questi file siano nella stessa directory di rocket.py.

Passaggi di installazione più avanzati

Per utilizzare questo programma in un ambiente Cygwin, probabilmente dovrai installare Capstone dal sorgente. Ci sono vari modi per farlo, e la documentazione di Capstone fornisce assistenza. Cygwin è stato originariamente usato durante lo sviluppo dello strumento, anche se non è più così. JOP ROCKET v2.0 non è testato su Cygwin e il prompt dei comandi è l'uso raccomandato di JOP ROCKET. Nota: l'uso di Cygwin non è più supportato esplicitamente e non è più raccomandato con questo programma.

Utilizzo di base

Informazioni più dettagliate sull'uso arriveranno. Fare riferimento al talk del DEF CON 27 e al sottomenu di aiuto per assistenza.

Per iniziare, comunque, devi avere i cinque file Python nella stessa directory: rocket.py, ui.py, stackpivot.py, checkIt.py e lists.py. Poi esegui dalla riga di comando. Puoi fornire un file locale nella directory di installazione, ma non sarà in grado di trovare moduli/DLL. Per trovarli, il programma deve essere installato, e il percorso assoluto dell'applicazione può essere fornito come input all'interno di un file di testo che può essere passato come argomento sulla riga di comando, ad es.

python rocket.py input.txt

Dentro input.txt, avremmo il percorso assoluto, ad es. C:\rocket2\sample_binary.exe. Fornendo il percorso assoluto, potrai anche estrarre i moduli da scansire, se lo desideri. Se vuoi usare JOP ROCKET solo con il programma nella directory locale, troverà gadget solo per l'eseguibile immagine stesso, cioè nessuna DLL. Per usarlo in questo modo, usa la seguente sintassi:

python rocket.py sample_binary.exe

Se l'eseguibile è nella stessa directory, puoi usare JOP ROCKET nel modo sopra descritto.

Assicurarsi di ottenere TUTTI i moduli/DLL per un binario

Quando si carica un eseguibile o una DLL da analizzare, ci sono due approcci. Il primo è semplicemente posizionare l'eseguibile nella stessa directory ed eseguire il programma, usandolo come argomento, ad es. python rocket.py binary.exe. Questo consentirà all'utente di identificare ed estrarre molti dei moduli di sistema. Tuttavia, non troverà alcuni dei binari non di sistema. Per una copertura completa, l'utente deve fornire il percorso assoluto dell'applicazione in un file di testo e usarlo come input per ROCKET, ad es. python rocket.py input.txt. Questo permetterà a ROCKET di individuare, estrarre e cercare DLL non di sistema associate all'applicazione target. Pertanto, si raccomanda generalmente di fornire il binario come input tramite un file di testo, altrimenti alcune DLL potrebbero essere escluse. Ad es., python rocket.py binaryToScan.txt. Il file binaryToScan.txt dovrebbe contenere il percorso del binario, C:\Users\CoolPerson\Desktop\Instructions\targetBinary.exe

Problemi di memoria con binari molto grandi

Il Python a 32 bit andrà in crisi con binari molto grandi. Per poter lavorare con questi, devi usare Python a 64 bit.

Ecco alcune istruzioni da Austin per passare da Python a 32 bit a Python a 64 bit: Per installare la versione a 64 bit di Python 2.7, assicurati prima che la vecchia installazione sia stata disinstallata. Dopo aver installato la versione a 64 bit, potresti ricevere alcuni errori durante l'importazione di librerie come "DLL load failed: %1 is not a valid Win32 application". Questi si verificano perché Python sta cercando di caricare le versioni a 32 bit installate in precedenza. Per risolvere questo problema, usa pip per disinstallare la libreria. Se sia Python 2 che Python 3 sono installati, assicurati di usare la versione corretta di pip usando "py -2 -m pip ".

Risolvere il problema per capstone è semplice:

py -2 -m pip uninstall capstone

py -2 -m pip install capstone

Gli errori riguardanti l'importazione di win32api sono legati a pywin32. Disinstallarlo è più difficile perché pip potrebbe non automatizzare il processo. Potrebbe dover essere disinstallato manualmente eliminando i file PyWin32 all'interno di ...\Python27\Lib\site-packages.

Quindi, esegui:

py -2 -m pip install pywin32

Successivamente, completa l'installazione eseguendo ...\Python27\Scripts\pywin32_postinstall.py -install

Q & A

D: Cosa c'è di così speciale in JOP ROCKET?

R: JOP ROCKET trova tutti i gadget necessari, incluso il gadget dispatcher. Non sono a conoscenza di nessun altro strumento che cerchi gadget dispatcher. Inoltre, introduce nuovi tipi di gadget e innovazioni per JOP. JOP ROCKET può anche generare una catena JOP completa per bypassare DEP usando una nuova variazione del paradigma del gadget dispatcher che coinvolge una serie di molteplici stack pivot. Realisticamente, sarebbe molto difficile realizzare un exploit JOP usando l'approccio del gadget dispatcher senza usare JOP ROCKET. Ci sono altri strumenti ROP che possono fornire gadget JOP più limitati, ma sono per lo più segnaposto per lavori futuri, e non potresti completare un exploit JOP senza alcuni dei gadget trovati con JOP ROCKET.

D: Mi sembra di aver visto JOP ROCKET in un talk prima. Dove è stato?

R: Abbiamo presentato a diverse conferenze: DEF CON 27 (2019), Wild West Hackin' Fest (2020), Hack in the Box Amsterdam (2021), Black Hat Asia (2021) e @Hack (2021) (ora rinominata Black Hat Middle East and Africa). Per ciascuna di queste c'è generalmente un white paper e un video (nessun video per @Hack). Ci sono state anche conferenze accademiche. Ogni talk e white paper è diverso, di solito con almeno il 60-70% di contenuti nuovi. Affrontano molti argomenti diversi su JOP. Non abbiamo nuovi talk in programma e non ne faremmo un altro a meno che non avessimo qualcosa di nuovo da condividere, perché non ci piace ripeterci.

Ecco un elenco limitato di alcuni materiali su JOP. Non è lo stesso talk o paper, poiché siamo in continua evoluzione e aggiungiamo nuove innovazioni. Ognuno ha contributi originali.

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

Alta risoluzione: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-Hi-res.pdf

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

Se sei un ricercatore accademico, cita alcuni di questi o anche i nostri paper accademici. :-)

D: Qual è un esempio di exploit JOP nel mondo reale?

R: Austin ne ha pubblicato uno su Exploit DB: https://www.exploit-db.com/exploits/49959

Puoi vedere un video di esso e di lui che ne parla nella presentazione HITB 2021 che abbiamo fatto. Quell'exploit JOP nel mondo reale ha presentato alcune sfide speciali, quindi è utile da guardare e studiare. Mentre Austin lo ha scritto a mano, in realtà la generazione automatica della catena JOP di JOP ROCKET avrebbe fatto la maggior parte del lavoro. (Ci sarebbe comunque stato un setup speciale aggiuntivo per compensare alcune delle sfide.) Questo è anche un esempio della nostra variazione innovativa all'approccio del gadget dispatcher, usando una serie di molteplici stack pivot. Questo exploit ha richiesto meno di un giorno per essere completato.

D: JOP è difficile da fare?

R: No, non lo è, ma è molto diverso dal ROP. Ci sono "regole" diverse in punti che potrebbero non essere immediatamente evidenti. Ne scriviamo ampiamente in diversi paper o ne parliamo in diversi talk che abbiamo fatto. Quello che a volte può essere impegnativo, tuttavia, è avere gadget sufficienti. Ci sono diversi stili di JOP, e se stai tentando di usare l'approccio del gadget dispatcher – che può permetterti di fare un exploit JOP completo senza ROP – allora devi avere un gadget dispatcher.

D: JOP non è solo ROP con un altro nome?

R: JOP è molto fluido. Può esserlo. Potresti caricare una RET in un gadget JOP, e quindi ogni volta che fai JMP EBX, per esempio, sarebbe equivalente alla RET. In questo senso potresti usare JOP solo come un modo per estendere ROP, e non avresti bisogno di un gadget dispatcher. Sembrerebbe noioso dover costruire un intero exploit in quel modo, anche se potresti se davvero volessi. Scriviamo anche di altri stili di JOP, anche se la maggior parte del nostro lavoro si concentra sull'approccio del gadget dispatcher.

D: Cos'è un gadget dispatcher? È facilmente trovabile? Cos'è un dispatcher a due gadget?

R: Quello era un gadget relativamente raro e non sempre facilmente trovabile; alcuni binari non avrebbero gadget dispatcher utilizzabili. Nota che qui è in gioco il passato. Abbiamo introdotto gadget dispatcher alternativi e, cosa più importante, un dispatcher a due gadget, di cui abbiamo scritto nel paper HITB. Questo prende due gadget comuni e li concatena, quindi un gadget dispatcher non è più raro. Uno dei gadget richiesti è così comune che di solito ce ne sono varianti per quasi tutti i registri; e l'altro è molto comune, ma non così comune. Ci possono essere altre limitazioni pratiche, però, come se usi un dispatcher a due gadget, questo impegnerà un altro registro. (È possibile cambiare gadget dispatcher e registri usati durante un exploit, se è necessaria ulteriore flessibilità.)

D: Il paradigma a due gadget è integrato nella generazione automatica delle catene JOP di JOP ROCKET?

R: No, non lo è. La generazione automatica delle catene JOP è stata dispendiosa in termini di tempo da creare, e ho creato il concetto di dispatcher a due gadget dopo aver fatto questo. Potrei tentare di aggiungerlo a un certo punto, ma non nel futuro immediato. Più probabilmente verrebbe aggiunto solo se facessi una riscrittura completa di JOP ROCKET. Per impostazione predefinita, JOP ROCKET creerà diverse varianti di catene JOP per tutti i registri disponibili, anche se un gadget dispatcher tradizionale non può essere trovato. Quindi, non richiederebbe troppo sforzo per qualcuno andare ad aggiungere il proprio dispatcher a due gadget. Tuttavia, bisognerebbe prestare attenzione ai registri che devono essere protetti per il dispatcher a due gadget, poiché lo strumento non lo farebbe automaticamente.

D: Voglio provare a creare la mia catena JOP. Posso farlo?

R: Certo, a scopo didattico, abbiamo un binario disponibile su GitHub – due forme di esso – con gadget JOP creati artificialmente – sia una versione facile che una difficile. La versione difficile ha limitazioni di byte nulli. Potresti provare a farne una senza la generazione automatica della catena JOP, vedendo se riesci a trovare i tuoi gadget. Potresti anche provare con la generazione automatica della catena JOP. Con la generazione automatica della catena JOP, devi fare lavoro aggiuntivo quando hai a che fare con byte nulli. Suppongo che questo potrebbe essere un'area per lavoro aggiuntivo in futuro – per automatizzare parte di ciò.

D: Perché JOP ROCKET usa uno stile più vecchio di Python? Hai intenzione di passare al Python moderno?

R: È stato creato originariamente diversi anni fa, e all'epoca non avevo alcuna intenzione di condividerlo. L'ho inizialmente sottomesso al DEFCON solo per caso. Purtroppo, le differenze tra il Python moderno e quello più vecchio sono tali che sarebbe molto non banale cambiare JOP ROCKET, e ci sono molte funzioni complesse in cui le differenze entrerebbero in gioco. JOP ROCKET è anche molto grande, e non ricordo necessariamente a memoria tutti i punti in cui sarebbero necessarie modifiche. Con ogni probabilità, farei una riscrittura completa di JOP ROCKET, rendendo anche parti di esso molto più modulari e compatte di quanto non sia attualmente. Ci sono diverse nuove funzionalità che vorrei aggiungere se lo facessi, e potrei fare cose molto interessanti se lo facessi. Non ho piani nel futuro immediato, ma potrebbe essere nei prossimi uno o tre anni. Tuttavia, non dire mai mai, perché a volte posso riscrivere codice molto rapidamente. Potrei fare altri aggiornamenti all'attuale JOP ROCKET durante quel periodo, poiché gli aggiornamenti più piccoli sono più facili di una riscrittura completa.

D: Chi è "noi"?

R: Il creatore di JOP ROCKET è il Dr. Bramwell Brizendine. Questo era originariamente l'argomento della sua tesi di dottorato, ma è cresciuto e cambiato molto da quel momento. Uno dei suoi studenti, Austin Babcock, si è coinvolto nella ricerca su JOP come studente universitario e ha continuato con essa fino al suo Master in Computer Science. Durante quel periodo, Austin è stato co-autore di diversi paper e co-relatore per diversi eventi. Austin ha dato contributi importanti alla meccanica di come funziona JOP. Successivamente si è unito come contributore a JOP ROCKET, introducendo principalmente ottimizzazioni e miglioramenti al codice. Austin ha realizzato diversi exploit JOP. Uno è su ExploitDB.

**D: Quali sono le cose più "nuove" in JOP che voi avete fatto?**R: Beh, c'è il dispatcher a due gadget, che rende possibile il JOP con numerosi binari, dato che il dispatcher-gadget non è più oscuro. Questo è enorme - perché in molti casi la mancanza di un dispatcher-gadget valido sarebbe stata limitante--semplicemente non è più così. Abbiamo anche introdotto alcuni dispatcher-gadget singoli alternativi, anche se la maggior parte non sembra comune (Andrew Kramer può essere accreditato per alcuni di questi). Abbiamo anche introdotto il "JOP senza shellcode", che evita la necessità di bypassare il DEP e incorpora la funzionalità di uno shellcode direttamente in un JOP. Ne facciamo una piccola parte all'HITB e di più all'@Hack 2021 (Black Hat MEA). @Hack non è stato filmato, anche se esiste un documento molto dettagliato al riguardo. Una clip di esso in azione può essere vista in alcuni dei video demo senza audio per @Hack 2021: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV . Ho avuto alcuni studenti che hanno raccolto la sfida del JOP senza shellcode - è qualcosa che può richiedere maggiore abilità e padronanza degli attacchi di riutilizzo del codice.

D: JOP ROCKET funziona con binari Linux?

R: No, purtroppo no.

D: JOP ROCKET funziona con binari a 64 bit?

R: No, non al momento.

D: Qual è l'approccio generale del JOP?

R: Leggete i nostri articoli o guardate i nostri talk. Abbiamo fatto un'enorme quantità di lavoro nell'espandere ciò che si può fare con il JOP. Non c'era praticamente alcuna documentazione sul JOP prima della nostra ricerca, e abbiamo creato molte nuove tecniche pratiche per il JOP.

D: Sono un ricercatore accademico e voglio fare qualcosa con il JOP, come in un articolo o una presentazione. Posso contattarvi?

R: Certo, potete contattarci se avete intenzione di fare un articolo o un nuovo progetto. Potete raggiungermi a bramwell.brizendine AT gmail . Posso inoltrare ad Austin se è interessato. Potenzialmente potremmo anche essere interessati a collaborare. Per favore citateci se usate la nostra ricerca in qualche modo per il JOP. Probabilmente l'approccio più pratico alla ricerca che coinvolge il JOP sarebbe introdurre alcune difese o mitigazioni per il JOP. Siamo stati contattati in precedenza.

D: Altre persone hanno fatto JOP?

R: Non è comune, e prima del nostro primo talk al DEFCON, era estremamente raro. Abbiamo certamente aumentato notevolmente la consapevolezza al riguardo. In precedenza l'ho insegnato in un corso di dottorato di Sfruttamento Avanzato del Software per tre anni, quindi dozzine di studenti hanno creato exploit JOP. Non so quante persone lo facciano nel mondo reale—certamente le persone possono farlo ora con JOP ROCKET. Ho anche avuto diversi studenti universitari che hanno realizzato exploit JOP. Non c'è alcuna ragione speciale per cui debba essere uno studente di dottorato - chiunque abbia una forte competenza nello sfruttamento e negli attacchi di riutilizzo del codice. Con il numero di talk che abbiamo fatto e di articoli che abbiamo scritto – insieme a innovazioni come il dispatcher a due gadget – non c'è motivo per cui chiunque sia abile con il ROP non potrebbe impararlo.

D: Perché JOP ROCKET era necessario?

R: Senza JOP ROCKET, scopriresti solo una frazione dei gadget JOP, e sarebbero disorganizzati, quindi trovare qualcosa sarebbe come cercare un ago in un pagliaio. Molti gadget JOP del mondo reale sono gadget non intenzionali che non si presentano naturalmente, quindi a meno che tu non fossi una specie di savant molto dedicato e creassi i tuoi strumenti o script, ti perderesti un sacco di cose, se stessi cercando di fare un exploit JOP completo privo di gadget ROP. Ci sono anche cose come i dispatcher gadget, che dovresti in qualche modo trovare magicamente da solo, anche nelle forme non intenzionali. C'è una buona ragione per cui il JOP era molto raro e raramente menzionato prima del nostro lavoro. Questo non implica che sia comune ora. Prima di JOP ROCKET, avresti diversi problemi significativi da superare per scrivere un exploit. Ora con JOP ROCKET quei problemi sono superati e puoi costruire il tuo con gadget JOP o magari adattare una catena JOP creata tramite la generazione automatica di catene JOP.

D: Il JOP può essere più facile del ROP?

R: In realtà, ho sentito da alcuni studenti che il JOP è più facile del ROP – e può esserlo – con il gadget giusto e usando il nostro approccio innovativo al dispatcher gadget con molteplici stack pivot. Notate che la parola chiave qui è "può essere". Questo è vero solo in circostanze speciali, come nessuna restrizione di byte nulli e abbondanza di gadget stack pivot, e assumendo che esista un dispatcher gadget valido.

D: Per chi è il JOP?

R: Penso che principalmente sia per persone che sono abili negli attacchi di riutilizzo del codice e vogliono spingersi oltre, tentando qualcosa all'avanguardia – anche se non tutto il JOP deve necessariamente essere "difficile". Se puoi fare JOP, è un distintivo d'onore da indossare. Se crei un exploit JOP, vai a pubblicarlo su ExploitDB e collega JOP ROCKET per aumentare la consapevolezza. Il JOP può anche essere per persone che semplicemente vogliono evitare l'uso del ROP – potrebbe esserci una mitigazione in atto per rilevare i gadget ROP. Il JOP non è ROP, e puoi fare un exploit JOP completo senza un singolo gadget ROP.

D: Ho fatto la generazione automatica di catene JOP, e ha creato molte catene diverse per VirtualAlloc e VirtualAlloc. Perché ce ne sono così tante?

R: Affronto il JOP dal punto di vista che certi registri conterranno un puntatore al dispatcher gadget e un puntatore alla dispatch table, quindi quei registri sono occupati. I gadget funzionali (più simili ai normali gadget ROP) chiameranno il dispatcher gadget, che poi avanza la posizione nella dispatch table. JOP ROCKET crea quindi diverse catene usando diverse combinazioni di registri. Alcuni registri saranno "riservati" per il dispatcher gadget e la dispatch table, anche se se vuoi, puoi passare da uno all'altro quanto vuoi. Alcuni registri avranno catene JOP più desiderabili - nel senso che forse ha gadget che sono "più facili" da usare. Quindi ci piace fornire opzioni. Di default, JOP ROCKET ne genererà cinque per ciascuno, quindi se c'è un problema con uno, forse hai altri da considerare. Inoltre, JOP ROCKET li genererà anche se non viene trovato un dispatcher gadget desiderabile, poiché ci possono sempre essere alternative o dispatcher a due gadget. (JOP ROCKET trova dispatcher a due gadget, ma attualmente non li incorpora nella generazione di catene JOP.) Quindi, tornando alla domanda, JOP ROCKET cercherà di fornire molte opzioni, e spetta all'utente valutarle e determinare quale sia la più desiderabile o più facile con cui lavorare.

D: JOP ROCKET non mi sta dando buoni risultati per la generazione automatica di catene JOP. Perché?

R: In alcuni casi, potrebbero esserci dei bug, ma è anche importante ricordare che la generazione automatica di catene JOP funziona sul presupposto che tu stia usando molteplici stack pivot (vedi talk e articoli). Devi fornire l'importo desiderato del pivot, poiché genererà solo risultati basati sul default. Potrebbe esserci uno stack pivot eccezionale molto grande, e potresti non vederlo, perché è fuori dal tuo intervallo. Quindi dovresti assolutamente calcolare l'intervallo di stack pivot accettabili, fornendo il minimo e il massimo. Puoi sempre aggiustare le cose in seguito con il padding - non deve essere preciso.

D: Ci sono "vulnerabilità" con il JOP nei compilatori?

R: In realtà, sì, con VisualStudio 2015, tutto ciò che abbiamo trovato compilato con Developer Prompt aveva un paio di dispatcher gadget altamente desiderabili che erano sempre presenti! Avevo intenzione di includere informazioni dettagliate su questo in un talk, ma è stato tagliato per motivi di tempo. Potrei includerlo separatamente in un secondo momento. La cattiva notizia è che abbiamo valutato tutti i binari prodotti da altre edizioni di Visual Studio per altri anni, fino a circa un anno fa, e non abbiamo visto che si ripetesse. Anche se può essere bello avere ottimi dispatcher gadget, questi non sono necessari, come descritto altrove, con il nuovo dispatcher a due gadget che abbiamo introdotto. Inoltre, questo non è in realtà una vulnerabilità, ma solo un modo per garantire che il JOP sia prontamente accessibile, supponendo che ci sia qualche vera vulnerabilità.

D: JOP ROCKET è uno strumento autonomo? Funziona con un debugger?

R: Sì, è uno strumento autonomo di analisi statica, e no, non può essere integrato con un debugger come Mona. C'è un'opzione all'interno di JOP ROCKET per cercare tra le DLL che riesce a trovare, e può cercare attraverso quelle, anche se ovviamente la maggior parte delle DLL di sistema di Windows non saranno utilizzabili a causa delle mitigazioni. Puoi far escludere o includere a JOP ROCKET in base alle mitigazioni. Poiché è analisi statica, sebbene possa opzionalmente cercare tra le DLL, potrebbe non vedere alcune che non si trovano nell'IAT o le cui posizioni non possono essere facilmente determinate da JOP ROCKET. Questa è una limitazione intrinseca dell'analisi statica. Di default, JOP ROCKET cercherà solo attraverso l'immagine stessa, cioè l'.exe, non le DLL, per risparmiare tempo. Se stai cercando di analizzare un binario e guardare DLL non di sistema, allora quell'applicazione deve essere installata e dovresti fornire il suo percorso. Se non sei interessato alle DLL, allora non hai bisogno di installare il binario.

D: Puoi commentare la seguente citazione: "JOP ROCKET è uno strumento pubblicato nel 2019 da [Bri19], che afferma di generare catene JOP complete in modo completamente automatizzato. A un esame più attento, possiamo vedere che qualsiasi caso d'uso reale della sua tecnica è composto da una catena mista ROP e JOP, dove solo una piccola parte del risultato è composta da puri JMP Gadget, mentre il resto è composto da Gadget che terminano con l'istruzione RET, necessari per l'impostazione della catena JOP."

R: Sfortunatamente, quanto sopra riflette una scarsa comprensione del JOP. Il JOP usa il paradigma del dispatcher gadget, che richiede una dispatch table e un dispatcher gadget. L'indirizzo del dispatcher gadget e della dispatch table deve essere caricato nei rispettivi registri per impostare il JOP. Sebbene questo possa essere fatto tramite JOP, per scopi di compatibilità, è stato fatto tramite due gadget ROP usando pop. Quindi, dopo questa inizializzazione, composta da soli due gadget ROP, non vengono usati altri gadget ROP. Il numero di gadget JOP usati può variare da uno a dozzine, a seconda dell'input fornito dall'utente. Il problema qui non è con lo strumento, ma con un fraintendimento dello strumento e del JOP. JOP ROCKET fornisce effettivamente exploit adatti ad applicazioni del mondo reale, se fornisci l'input appropriato. In effetti, questo è stato usato in un corso di Sfruttamento Avanzato del Software precedentemente tenuto dall'autore, che richiedeva agli studenti di usare JOP ROCKET per creare diversi exploit JOP. È deludente che i commenti di cui sopra siano stati fatti nella ricerca accademica, poiché vengono usati al massimo due gadget ROP per ogni catena JOP. L'unico exploit JOP del mondo reale di cui siamo a conoscenza su Exploit_DB è di uno di noi, Austin Babcock, e come ha spiegato all'Hack in the Box Amsterdam 2021, il suo exploit rispecchia fedelmente ciò che è stato trovato da JOP ROCKET. Nella maggior parte dei casi pratici, non fa davvero differenza se usi due gadget ROP per l'impostazione. A volte potrebbero non esserci gadget JOP appropriati per un binario, in un modo che si conformi al paradigma del dispatcher gadget, per l'impostazione del JOP. Preferiamo che il JOP sia fattibile su ogni binario, potenzialmente, piuttosto che limitarlo per un desiderio di avere JOP puro al 100%. Una delle più grandi limitazioni con il JOP, dopo tutto, è con gadget JOP insufficienti. Scrivendo nel 2024, non ci sono aggiornamenti attivi in fase di sviluppo per JOP ROCKET, e in qualsiasi eventuale nuova versione, che sarebbe molto più avanzata e modellata sul molto più recente ROP ROCKET, probabilmente avrebbe un'opzione per il JOP puro.

Scarica lo strumento