
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. Gli auditor possono risalire 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 di 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 marcate nell'IDB.
- Le funzioni API pericolose note sono raggruppate in livelli di pericolosità per aiutare a prioritizzare il lavoro di audit.
- [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 può essere facilmente personalizzato modificando
conf/rhabdomancer.toml.
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 release è 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$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
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 --releasegit 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
Utilizzo
- Assicurati che IDA sia configurato correttamente con una licenza valida.
- Personalizza l'elenco delle funzioni API pericolose note in
conf/rhabdomancer.tomlse necessario. Puoi sovrascrivere la posizione predefinita del file di configurazione impostando la variabile d'ambienteRHABDOMANCER_CONFIG. - Assicurati che la variabile d'ambiente
IDADIRsia impostata se la tua installazione di IDA si trova in una posizione non standard. - Esegui come segue:
Qualsiasi file IDB
rhabdomancer <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 marcate.
Compatibilità
Solo l'ultima versione di IDA è ufficialmente supportata, ma le versioni precedenti potrebbero funzionare comunque. La seguente tabella riassume l'ultima release compatibile per ciascuna versione di IDA:
| Versione IDA | Ultima release compatibile |
|---|---|
| v9.0.240925 | v0.2.4 |
| v9.0.241217 | v0.3.5 |
| v9.1.250226 | v0.6.2 |
| v9.2.250908 | v0.7.6 |
| v9.3.260213 | v0.8.1 |
| v9.3.260327 | v0.9.0 |
| v9.3.260421 | v0.9.3 |
| v9.4.260714 | release corrente |
[!NOTE] Consulta la documentazione di idalib-rs per ulteriori informazioni.
Crediti
Lo sviluppo di questo progetto è stato supportato dalle seguenti organizzazioni:
- HN Security
- Hex-Rays tramite il loro Contributor Program
Changelog
TODO
- Arricchire ulteriormente l'elenco delle funzioni API pericolose note (vedi https://github.com/0xdea/semgrep-rules).
- Valutare l'ampliamento dell'ambito di normalizzazione in
normalize_nameper coprire più casi. - Implementare un set di regole di base nello stile di VulFi e VulnFanatic.