
rhabdomancer v0.10.0
Assistant de recherche de vulnérabilités qui localise les appels à des fonctions API potentiellement non sécurisées dans un fichier binaire.
rhabdomancer
"La route des bugs exploitables est pavée de bugs inexploitables."
-- Mark Dowd
Rhabdomancer est un plugin IDA headless extrêmement rapide qui localise les appels à des fonctions d'API potentiellement vulnérables dans un fichier binaire. Les auditeurs peuvent remonter la trace à partir de ces points candidats pour trouver des chemins permettant d'accéder à des entrées non fiables.

Fonctionnalités
- Expérience utilisateur headless et extrêmement rapide grâce à IDA 9.x et aux bindings Rust idalib-rs.
- Prise en charge de binaires C/C++ compilés pour toute architecture implémentée par IDA.
- Les emplacements des appels à des fonctions d'API dangereuses sont affichés sur stdout et marqués dans l'IDB.
- Les fonctions d'API dangereuses connues sont regroupées en niveaux de dangerosité pour aider à prioriser le travail d'audit.
- [BAD 0] Priorité haute - Fonctions généralement considérées comme non sécurisées.
- [BAD 1] Priorité moyenne - Fonctions intéressantes qui doivent être vérifiées pour des cas d'usage non sécurisés.
- [BAD 2] Priorité basse - Les chemins de code impliquant ces fonctions doivent être soigneusement vérifiés.
- La liste des fonctions d'API dangereuses connues peut être facilement personnalisée en éditant
conf/rhabdomancer.toml.
Articles
- https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings
- https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust
Voir aussi
- 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
Installation
Le moyen le plus simple d'obtenir la dernière version est via crates.io :
- Téléchargez, installez et configurez IDA (voir https://hex-rays.com/ida-pro).
- Installez LLVM/Clang (voir https://rust-lang.github.io/rust-bindgen/requirements.html).
- Sous Linux/macOS, installez comme suit :
Sous Windows, utilisez plutôt les commandes suivantes :
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
Compilation
Vous pouvez également compiler à partir des sources :
- Téléchargez, installez et configurez IDA (voir https://hex-rays.com/ida-pro).
- Installez LLVM/Clang (voir https://rust-lang.github.io/rust-bindgen/requirements.html).
- Sous Linux/macOS, compilez comme suit :
Sous Windows, utilisez plutôt les commandes suivantes :
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
Utilisation
- Assurez-vous qu'IDA est correctement configuré avec une licence valide.
- Personnalisez si nécessaire la liste des fonctions d'API dangereuses connues dans
conf/rhabdomancer.toml. Vous pouvez remplacer l'emplacement du fichier de configuration par défaut en définissant la variable d'environnementRHABDOMANCER_CONFIG. - Assurez-vous que la variable d'environnement
IDADIRest définie si votre installation d'IDA se trouve dans un emplacement non standard. - Exécutez comme suit :
Tout fichier IDB
rhabdomancer <binary_file>.i64existant sera mis à jour ; sinon, un nouveau fichier IDB sera créé. - Ouvrez le fichier IDB
.i64résultant avec IDA. - Sélectionnez
View>Open subviews>Bookmarks - Profitez de vos résultats commodément rassemblés dans une fenêtre IDA.
[!NOTE] Rhabdomancer ajoute également des commentaires aux emplacements d'appels marqués.
Compatibilité
Seule la dernière version d'IDA est officiellement prise en charge, mais les versions antérieures peuvent également fonctionner. Le tableau suivant résume la dernière version compatible pour chaque version d'IDA :
| Version d'IDA | Dernière version compatible |
|---|---|
| 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 | version actuelle |
[!NOTE] Consultez la documentation idalib-rs pour plus d'informations.
Crédits
Le développement de ce projet a été soutenu par les organisations suivantes :
Changelog
TODO
- Enrichir davantage la liste des fonctions d'API dangereuses connues (voir https://github.com/0xdea/semgrep-rules).
- Envisager d'élargir la portée de la normalisation dans
normalize_namepour couvrir davantage de cas. - Implémenter un ensemble de règles de base dans le style de VulFi et VulnFanatic.