Retour aux mises à jour
New releaseAug 20, 2026

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.

Partager

rhabdomancer

build doc

"La route vers les bugs exploitables est pavée de bugs inexploitables."

-- Mark Dowd

Rhabdomancer est un plugin headless IDA ultra-rapide qui localise les appels à des fonctions d'API potentiellement non sécurisées dans un fichier binaire. Les auditeurs peuvent remonter la trace depuis ces points candidats pour trouver des chemins permettant l'accès à des entrées non fiables.

Fonctionnalités

  • Expérience utilisateur headless ultra-rapide grâce à IDA 9.x et aux bindings Rust idalib-rs.
  • Prise en charge des cibles binaires C/C++ compilées 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 emplacements d'appel dans du code de bibliothèque reconnu par IDA (par exemple, un runtime lié statiquement reconnu par les signatures FLIRT) sont étiquetés (lib).
    • Les appels via des stubs (par exemple, les entrées .plt des binaires ELF ou les stubs d'import des binaires PE et Mach-O, listés comme thunks) sont retracés jusqu'à leurs appelants.
    • Dans les binaires ELF, une fonction est délibérément listée deux fois avec les mêmes emplacements d'appel : une fois comme son stub .plt (marqué comme thunk) et une fois comme son import. Chaque emplacement d'appel n'est marqué qu'une seule fois 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é élevée - Fonctions généralement considérées comme non sécurisées.
    • [BAD 1] Priorité moyenne - Fonctions intéressantes qui devraient être vérifiées pour des cas d'utilisation non sécurisés.
    • [BAD 2] Priorité faible - Les chemins de code impliquant ces fonctions devraient être soigneusement vérifiés.
  • La liste des fonctions d'API dangereuses connues est intégrée et peut être facilement personnalisée avec un fichier de configuration basé sur conf/rhabdomancer.toml.
  • Les noms de fonctions sont mis en correspondance sans ces décorations : points et underscores initiaux (par exemple, _strcpy), les préfixes des alias de bibliothèque (par exemple, __o_malloc dans l'Universal CRT, __libc_system et __GI___snprintf dans glibc), et, pour les stubs et ces alias uniquement, le suffixe numérique qu'IDA ajoute aux noms déjà utilisés (par exemple, memset_0).

[!NOTE] Les fonctions fortifiées (par exemple, __strcpy_chk, utilisée à la place de strcpy lors de la compilation avec _FORTIFY_SOURCE) ne sont délibérément pas mises en correspondance, car ce sont les variantes vérifiées des fonctions listées. Pour aussi marquer leurs appels, ajoutez-les explicitement à une configuration personnalisée (par exemple, "__strcpy_chk" avec la même priorité que strcpy).

Articles

Voir aussi

Installation

Le moyen le plus simple d'obtenir la dernière version est via crates.io :

  1. Téléchargez, installez et configurez IDA (voir https://hex-rays.com/ida-pro).
  2. Installez LLVM/Clang (voir https://rust-lang.github.io/rust-bindgen/requirements.html).
  3. Sous Linux/macOS, installez comme suit :
    export IDADIR=/path/to/ida # if not set, the build script will check common locations
    cargo install rhabdomancer --locked
    
    Sous Windows, utilisez plutôt les commandes suivantes :
    $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
    

Compilation

Alternativement, vous pouvez compiler à partir des sources :

  1. Téléchargez, installez et configurez IDA (voir https://hex-rays.com/ida-pro).
  2. Installez LLVM/Clang (voir https://rust-lang.github.io/rust-bindgen/requirements.html).
  3. Sous Linux/macOS, compilez comme suit :
    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
    
    Sous Windows, utilisez plutôt les commandes suivantes :
    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
    

Utilisation

  1. Assurez-vous qu'IDA est correctement configuré avec une licence valide.
  2. Personnalisez éventuellement la liste des fonctions API malveillantes connues : copiez conf/rhabdomancer.toml (choisissez le tag correspondant à votre version installée pour obtenir sa liste intégrée exacte), modifiez la copie, et définissez la variable d'environnement RHABDOMANCER_CONFIG vers son chemin. Le fichier doit définir les tableaux high, medium et low, et aucune autre clé. Sinon, la liste intégrée est utilisée, laquelle est incorporée dans le binaire au moment de la compilation depuis conf/rhabdomancer.toml (modifier ce fichier nécessite une recompilation).
  3. Assurez-vous que la variable d'environnement IDADIR est définie si votre installation d'IDA se trouve dans un emplacement non standard.
  4. Exécutez comme suit :
    rhabdomancer <binary_file>
    
    Tout fichier IDB .i64 existant sera mis à jour ; sinon, un nouveau fichier IDB sera créé.
  5. Ouvrez le fichier IDB .i64 résultant avec IDA.
  6. Sélectionnez View > Open subviews > Bookmarks
  7. 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. Les signets et les commentaires sont tous deux étiquetés comme [BAD n] <function_name>, où n est le niveau de priorité (0 = élevé, 1 = moyen, 2 = faible), afin que les scripts puissent les rechercher dans les IDB. Ce format est stable entre les versions.

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 :

Catégories