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

(lib)..plt de binários ELF ou os stubs de importação de binários
PE e Mach-O, listados como thunks) são rastreadas de volta até seus chamadores..plt (marcado como thunk) e uma vez como sua importação. Cada local de chamada é marcado apenas uma vez no IDB.conf/rhabdomancer.toml._strcpy), os
prefixos de aliases de biblioteca (por exemplo, __o_malloc no Universal CRT, __libc_system e __GI___snprintf na
glibc) e, apenas para stubs e tais aliases, o sufixo numérico que o IDA acrescenta a nomes já em uso (por exemplo,
memset_0).[!NOTE] Funções fortificadas (por exemplo,
__strcpy_chk, usada em vez destrcpyao compilar com_FORTIFY_SOURCE) são deliberadamente não correspondidas, pois são as variantes verificadas das funções listadas. Para também marcar suas chamadas, adicione-as explicitamente a uma configuração personalizada (por exemplo,"__strcpy_chk"com a mesma prioridade questrcpy).
A maneira mais fácil de obter a versão mais recente é via crates.io:
export IDADIR=/path/to/ida # if not set, the build script will check common locations
cargo install rhabdomancer --locked
No Windows, em vez disso, use os seguintes comandos:
$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
Como alternativa, você pode compilar a partir do código-fonte:
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
No Windows, em vez disso, use os seguintes comandos:
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 (escolha a tag
que corresponde à sua versão instalada para obter sua lista interna exata), edite a cópia e defina a variável de ambiente RHABDOMANCER_CONFIG
com o caminho dela. O arquivo deve definir os arrays high, medium e low, e nenhuma outra chave.
Caso contrário, a lista interna é usada, a qual é incorporada ao binário no momento da compilação a partir de conf/rhabdomancer.toml
(editar esse arquivo requer uma recompilação).IDADIR esteja definida se a sua instalação do IDA estiver em um local não padrão.rhabdomancer <binary_file>
Qualquer arquivo IDB .i64 existente será atualizado; caso contrário, um novo arquivo IDB será criado..i64 resultante com o IDA.View > Open subviews > Bookmarks[!NOTE] O Rhabdomancer também adiciona comentários nos locais de chamada marcados. Tanto os marcadores quanto os comentários são etiquetados como
[BAD n] <function_name>, ondené o nível de prioridade (0 = alto, 1 = médio, 2 = baixo), para que os scripts possam procurá-los nos IDBs. Este formato é estável entre versões.
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 versão compatível mais recente para cada versão do IDA: