
Assistente per la ricerca di vulnerabilità che individua le chiamate a funzioni API potenzialmente non sicure in un file binario.
"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.

(lib)..plt dei binari ELF o gli stub di importazione dei binari PE e
Mach-O, elencati come thunk) vengono ricondotte ai loro chiamanti..plt (contrassegnato come thunk) e una volta come sua importazione. Ogni posizione di chiamata viene
contrassegnata una sola volta nell'IDB.conf/rhabdomancer.toml._strcpy), i prefissi degli alias di libreria (ad esempio, __o_malloc nella Universal CRT, __libc_system e
__GI___snprintf in 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).
Il modo più semplice per ottenere l'ultima versione è tramite crates.io:
export IDADIR=/path/to/ida # if not set, the build script will check common locations
cargo install rhabdomancer --locked
Su Windows, invece, usa i seguenti comandi:
$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
In alternativa, puoi compilare dal sorgente:
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 --locked
Su Windows, invece, usa i seguenti comandi:
git 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
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'ambiente RHABDOMANCER_CONFIG con il suo percorso. Il file deve definire gli array high, medium e low, e nessun'altra chiave.
In caso contrario, viene utilizzato l'elenco predefinito, che è incorporato nel binario in fase di compilazione da conf/rhabdomancer.toml
(modificare quel file richiede una ricompilazione).IDADIR sia impostata se l'installazione di IDA si trova in una posizione non standard.rhabdomancer <binary_file>
Qualsiasi file IDB .i64 esistente verrà aggiornato; in caso contrario, verrà creato un nuovo file IDB..i64 risultante con IDA.View > Open subviews > Bookmarks[!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.
È 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: