
rhabdomancer v0.10.0
Assistente per la ricerca di vulnerabilità che individua le chiamate a funzioni API potenzialmente non sicure in un file binario.
rhabdomancer
"La strada verso i bug sfruttabili è lastricata di bug non sfruttabili."
-- Mark Dowd
Rhabdomancer è un plugin headless per IDA estremamente veloce che individua le chiamate a funzioni API potenzialmente insicure in un file binario. I revisori possono risalire a ritroso da questi punti candidati per trovare percorsi che consentono l'accesso a input non attendibili.

Funzionalità
- Esperienza utente headless estremamente veloce grazie a IDA 9.x e ai binding Rust idalib-rs.
- Supporto per binari C/C++ compilati per qualsiasi architettura implementata da IDA.
- Le posizioni delle chiamate a funzioni API pericolose vengono stampate su stdout e contrassegnate nell'IDB.
- Le posizioni delle chiamate nel codice di libreria riconosciuto da IDA (ad esempio, un runtime linkato staticamente
riconosciuto tramite firme FLIRT) sono etichettate
(lib). - Le chiamate attraverso stub (ad esempio, le voci
.pltdei binari ELF o gli stub di importazione dei binari PE e Mach-O, elencati come thunk) vengono ricondotte ai loro chiamanti. - Nei binari ELF, una funzione viene deliberatamente elencata due volte con le stesse posizioni di chiamata: una volta
come suo stub
.plt(contrassegnato come thunk) e una volta come sua importazione. Ogni posizione di chiamata viene contrassegnata una sola volta nell'IDB.
- Le posizioni delle chiamate nel codice di libreria riconosciuto da IDA (ad esempio, un runtime linkato staticamente
riconosciuto tramite firme FLIRT) sono etichettate
- Le funzioni API pericolose note sono raggruppate in livelli di pericolosità per aiutare a dare priorità al lavoro di
revisione.
- [BAD 0] Priorità alta - Funzioni generalmente considerate insicure.
- [BAD 1] Priorità media - Funzioni interessanti che dovrebbero essere verificate per casi d'uso insicuri.
- [BAD 2] Priorità bassa - I percorsi di codice che coinvolgono queste funzioni dovrebbero essere controllati attentamente.
- L'elenco delle funzioni API pericolose note è integrato e può essere facilmente personalizzato con un file di
configurazione basato su
conf/rhabdomancer.toml. - I nomi delle funzioni vengono confrontati senza queste decorazioni: punti e underscore iniziali (ad esempio,
_strcpy), i prefissi degli alias di libreria (ad esempio,__o_mallocnella Universal CRT,__libc_systeme__GI___snprintfin glibc) e, solo per stub e tali alias, il suffisso numerico che IDA aggiunge ai nomi già in uso (ad esempio,memset_0).
[!NOTE] Le funzioni fortificate (ad esempio,
__strcpy_chk, usata al posto distrcpyquando si compila con_FORTIFY_SOURCE) non vengono deliberatamente confrontate, poiché sono le varianti controllate delle funzioni elencate. Per contrassegnare anche le loro chiamate, aggiungile esplicitamente a una configurazione personalizzata (ad esempio,"__strcpy_chk"con la stessa priorità distrcpy).
Articoli
- https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings
- https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust
Vedi anche
- https://github.com/0xdea/ghidra-scripts/blob/main/Rhabdomancer.java
- https://docs.hex-rays.com/release-notes/9_0#headless-processing-with-idalib
- https://github.com/idalib-rs/idalib
- https://books.google.it/books/about/The_Art_of_Software_Security_Assessment.html
Installazione
Il modo più semplice per ottenere l'ultima versione è tramite crates.io:
- Scarica, installa e configura IDA (vedi https://hex-rays.com/ida-pro).
- Installa LLVM/Clang (vedi https://rust-lang.github.io/rust-bindgen/requirements.html).
- Su Linux/macOS, installa come segue:
Su Windows, invece, usa i seguenti comandi:export IDADIR=/path/to/ida # if not set, the build script will check common locations cargo install rhabdomancer --locked$env:LIBCLANG_PATH="\path\to\clang+llvm\bin" $env:PATH="\path\to\ida;$env:PATH" $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations cargo install rhabdomancer --locked
Compilazione
In alternativa, puoi compilare dal sorgente:
- Scarica, installa e configura IDA (vedi https://hex-rays.com/ida-pro).
- Installa LLVM/Clang (vedi https://rust-lang.github.io/rust-bindgen/requirements.html).
- Su Linux/macOS, compila come segue:
Su Windows, invece, usa i seguenti comandi:git clone --depth 1 https://github.com/0xdea/rhabdomancer cd rhabdomancer export IDADIR=/path/to/ida # if not set, the build script will check common locations cargo build --release --lockedgit clone --depth 1 https://github.com/0xdea/rhabdomancer cd rhabdomancer $env:LIBCLANG_PATH="\path\to\clang+llvm\bin" $env:PATH="\path\to\ida;$env:PATH" $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations cargo build --release --locked
Utilizzo
- Assicurarsi che IDA sia configurato correttamente con una licenza valida.
- Facoltativamente, personalizzare l'elenco delle funzioni API note come dannose: copiare
conf/rhabdomancer.toml(scegliere il tag che corrisponde alla versione installata per il suo elenco predefinito esatto), modificare la copia e impostare la variabile d'ambienteRHABDOMANCER_CONFIGcon il suo percorso. Il file deve definire gli arrayhigh,mediumelow, e nessun'altra chiave. In caso contrario, viene utilizzato l'elenco predefinito, che è incorporato nel binario in fase di compilazione daconf/rhabdomancer.toml(modificare quel file richiede una ricompilazione). - Assicurarsi che la variabile d'ambiente
IDADIRsia impostata se l'installazione di IDA si trova in una posizione non standard. - Eseguire come segue:
Qualsiasi file IDBrhabdomancer <binary_file>.i64esistente verrà aggiornato; in caso contrario, verrà creato un nuovo file IDB. - Apri il file IDB
.i64risultante con IDA. - Seleziona
View>Open subviews>Bookmarks - Goditi i tuoi risultati comodamente raccolti in una finestra di IDA.
[!NOTE] Rhabdomancer aggiunge anche commenti nelle posizioni delle chiamate contrassegnate. Sia i segnalibri che i commenti sono etichettati come
[BAD n] <function_name>, dovenè il livello di priorità (0 = alto, 1 = medio, 2 = basso), in modo che gli script possano cercarli negli IDB. Questo formato è stabile tra le release.
Compatibilità
È ufficialmente supportata solo l'ultima release di IDA, ma anche le versioni precedenti potrebbero funzionare. La seguente tabella
riassume l'ultima release compatibile per ciascuna versione di IDA: