
rhabdomancer v0.10.0
Assistente de pesquisa de vulnerabilidades que localiza chamadas a funções de API potencialmente inseguras em um arquivo binário.
rhabdomancer
"O caminho para bugs exploráveis é pavimentado com bugs não exploráveis."
-- Mark Dowd
Rhabdomancer é um plugin headless extremamente rápido do IDA que localiza chamadas a funções de API potencialmente inseguras em um arquivo binário. Os auditores podem fazer backtrace a partir desses pontos candidatos para encontrar caminhos que permitam acesso a entrada não confiável.

Recursos
- Experiência de usuário extremamente rápida e headless graças ao IDA 9.x e aos bindings Rust idalib-rs.
- Suporte a alvos binários C/C++ compilados para qualquer arquitetura implementada pelo IDA.
- As localizações das chamadas a funções de API inseguras são impressas em stdout e marcadas no IDB.
- Funções de API inseguras conhecidas são agrupadas em níveis de periculosidade para ajudar a priorizar o trabalho de auditoria.
- [BAD 0] Prioridade alta - Funções geralmente consideradas inseguras.
- [BAD 1] Prioridade média - Funções interessantes que devem ser verificadas quanto a usos inseguros.
- [BAD 2] Prioridade baixa - Caminhos de código que envolvem essas funções devem ser verificados com cuidado.
- A lista de funções de API inseguras conhecidas pode ser facilmente personalizada editando
conf/rhabdomancer.toml.
Artigos
- https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings
- https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust
Veja também
- 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
Instalação
A maneira mais fácil de obter a versão mais recente é via crates.io:
- Baixe, instale e configure o IDA (veja https://hex-rays.com/ida-pro).
- Instale o LLVM/Clang (veja https://rust-lang.github.io/rust-bindgen/requirements.html).
- No Linux/macOS, instale da seguinte forma:
No Windows, por outro lado, use os seguintes 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
Compilação
Alternativamente, você pode compilar a partir do código-fonte:
- Baixe, instale e configure o IDA (veja https://hex-rays.com/ida-pro).
- Instale o LLVM/Clang (veja https://rust-lang.github.io/rust-bindgen/requirements.html).
- No Linux/macOS, compile da seguinte forma:
No Windows, por outro lado, use os seguintes 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
- Certifique-se de que o IDA esteja configurado corretamente com uma licença válida.
- Personalize a lista de funções de API inseguras conhecidas em
conf/rhabdomancer.tomlse necessário. Você pode substituir o local padrão do arquivo de configuração definindo a variável de ambienteRHABDOMANCER_CONFIG. - Certifique-se de que a variável de ambiente
IDADIResteja definida se a sua instalação do IDA estiver em um local não padrão. - Execute da seguinte forma:
Qualquer arquivo IDB
rhabdomancer <binary_file>.i64existente será atualizado; caso contrário, um novo arquivo IDB será criado. - Abra o arquivo IDB
.i64resultante com o IDA. - Selecione
View>Open subviews>Bookmarks - Aproveite seus resultados convenientemente reunidos em uma janela do IDA.
[!NOTE] O Rhabdomancer também adiciona comentários nos locais de chamada marcados.
Compatibilidade
Apenas a versão mais recente do IDA é oficialmente suportada, mas versões mais antigas também podem funcionar. A tabela a seguir resume a última versão compatível para cada versão do IDA:
| Versão do IDA | Última versão compatível |
|---|---|
| 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 | versão atual |
[!NOTE] Consulte a documentação do idalib-rs para obter informações adicionais.
Créditos
O desenvolvimento deste projeto foi apoiado pelas seguintes organizações:
- HN Security
- Hex-Rays por meio do Programa de Contribuidores
Registro de alterações
A fazer
- Enriquecer ainda mais a lista de funções de API inseguras conhecidas (veja https://github.com/0xdea/semgrep-rules).
- Considerar ampliar o escopo da normalização em
normalize_namepara cobrir mais casos. - Implementar um conjunto básico de regras no estilo de VulFi e VulnFanatic.