
rhabdomancer v0.10.0
Asistente de investigación de vulnerabilidades que localiza llamadas a funciones de API potencialmente inseguras en un archivo binario.
rhabdomancer
"El camino hacia los bugs explotables está pavimentado con bugs no explotables."
-- Mark Dowd
Rhabdomancer es un plugin headless de IDA extremadamente rápido que localiza llamadas a funciones de API potencialmente inseguras en un archivo binario. Los auditores pueden trazar hacia atrás desde estos puntos candidatos para encontrar rutas que permitan el acceso a entradas no confiables.

Características
- Experiencia de usuario headless y extremadamente rápida gracias a IDA 9.x y los bindings de Rust de idalib-rs.
- Soporte para binarios C/C++ compilados para cualquier arquitectura implementada por IDA.
- Las ubicaciones de llamadas a funciones de API peligrosas se imprimen en stdout y se marcan en la IDB.
- Las funciones de API peligrosas conocidas se agrupan en niveles de peligrosidad para ayudar a priorizar el trabajo de auditoría.
- [BAD 0] Prioridad alta - Funciones que generalmente se consideran inseguras.
- [BAD 1] Prioridad media - Funciones interesantes que deberían revisarse para detectar casos de uso inseguros.
- [BAD 2] Prioridad baja - Las rutas de código que involucran estas funciones deben revisarse cuidadosamente.
- La lista de funciones de API peligrosas conocidas se puede personalizar fácilmente editando
conf/rhabdomancer.toml.
Artículos
- https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings
- https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust
Ver también
- 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
Instalación
La forma más sencilla de obtener la última versión es a través de crates.io:
- Descarga, instala y configura IDA (consulta https://hex-rays.com/ida-pro).
- Instala LLVM/Clang (consulta https://rust-lang.github.io/rust-bindgen/requirements.html).
- En Linux/macOS, instala de la siguiente manera:
En Windows, por el contrario, usa los siguientes comandos:
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
Compilación
Alternativamente, puedes compilar desde el código fuente:
- Descarga, instala y configura IDA (consulta https://hex-rays.com/ida-pro).
- Instala LLVM/Clang (consulta https://rust-lang.github.io/rust-bindgen/requirements.html).
- En Linux/macOS, compila de la siguiente manera:
En Windows, por el contrario, usa los siguientes comandos:
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
Uso
- Asegúrate de que IDA esté correctamente configurado con una licencia válida.
- Personaliza la lista de funciones de API peligrosas conocidas en
conf/rhabdomancer.tomlsi es necesario. Puedes anular la ubicación predeterminada del archivo de configuración estableciendo la variable de entornoRHABDOMANCER_CONFIG. - Asegúrate de que la variable de entorno
IDADIResté definida si tu instalación de IDA se encuentra en una ubicación no estándar. - Ejecuta de la siguiente manera:
Cualquier archivo IDB
rhabdomancer <binary_file>.i64existente se actualizará; de lo contrario, se creará un nuevo archivo IDB. - Abre el archivo IDB
.i64resultante con IDA. - Selecciona
View>Open subviews>Bookmarks - Disfruta de tus resultados recopilados cómodamente en una ventana de IDA.
[!NOTE] Rhabdomancer también añade comentarios en las ubicaciones de llamadas marcadas.
Compatibilidad
Solo se admite oficialmente la última versión de IDA, pero las versiones anteriores también pueden funcionar. La siguiente tabla resume la versión compatible más reciente para cada versión de IDA:
| Versión de IDA | Última versión 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 | current release |
[!NOTE] Consulta la documentación de idalib-rs para obtener información adicional.
Créditos
El desarrollo de este proyecto ha contado con el apoyo de las siguientes organizaciones:
- HN Security
- Hex-Rays a través de su Programa de Colaboradores
Registro de cambios
TODO
- Ampliar aún más la lista de funciones de API peligrosas conocidas (consulta https://github.com/0xdea/semgrep-rules).
- Considerar ampliar el alcance de la normalización en
normalize_namepara cubrir más casos. - Implementar un conjunto de reglas básico al estilo de VulFi y VulnFanatic.