
"The road to exploitable bugs is paved with unexploitable bugs."
-- Mark Dowd
Rhabdomancerは、バイナリファイル内の潜在的に安全でないAPI関数への呼び出しを特定する、超高速なIDAヘッドレスプラグインです。監査担当者はこれらの候補ポイントからバックトレースを行い、信頼できない入力へのアクセスを可能にする経路を見つけることができます。

(lib)というラベルが付きます。.pltエントリ、またはPEおよびMach-Oバイナリのインポートスタブで、サンクとしてリストされるもの)は、呼び出し元までトレースバックされます。.pltスタブ(サンクとしてマーク)として、もう1回はそのインポートとしてです。各呼び出し箇所はIDB内で1回だけマークされます。conf/rhabdomancer.tomlに基づく設定ファイルで簡単にカスタマイズできます。_strcpy)、ライブラリアリアスのプレフィックス(例:Universal CRTの__o_malloc、glibcの__libc_systemおよび__GI___snprintf)、そしてスタブおよびそのようなエイリアスに限り、既に使用されている名前にIDAが付加する数値サフィックス(例:memset_0)。[!NOTE] 強化関数(例:
_FORTIFY_SOURCEを指定してビルドした際にstrcpyの代わりに使用される__strcpy_chk)は、リストされた関数のチェック済みバリアントであるため、意図的にマッチングされません。それらの呼び出しもマークするには、カスタム設定に明示的に追加してください(例:strcpyと同じ優先度で"__strcpy_chk"を追加)。
最新リリースを入手する最も簡単な方法は、crates.io経由です:
export IDADIR=/path/to/ida # if not set, the build script will check common locations
cargo install rhabdomancer --locked
Windows では、代わりに次のコマンドを使用してください:
$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
あるいは、ソースからビルドすることもできます:
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
Windows では、代わりに次のコマンドを使用してください:
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 をコピーし(組み込みリストの正確な内容については、インストール済みのバージョンに一致するタグを選択してください)、コピーを編集して、RHABDOMANCER_CONFIG 環境変数にそのパスを設定します。ファイルには high、medium、low の配列のみを定義する必要があり、他のキーを含めてはなりません。
そうでない場合は、ビルド時に conf/rhabdomancer.toml からバイナリに埋め込まれた組み込みリストが使用されます(そのファイルを編集するには再ビルドが必要です)。IDADIR 環境変数が設定されていることを確認してください。rhabdomancer <binary_file>
既存の .i64 IDB ファイルは更新されます。存在しない場合は、新しい IDB ファイルが作成されます。.i64 IDB ファイルを IDA で開きます。View > Open subviews > Bookmarks を選択します。[!NOTE] Rhabdomancer はマークされた呼び出し箇所にコメントも追加します。ブックマークとコメントはどちらも
[BAD n] <function_name>としてタグ付けされます。ここでnは優先度ティア(0 = 高、1 = 中、2 = 低)であり、 スクリプトが IDB 内でそれらを検索できるようにするためです。この形式はリリース間で安定しています。
公式にサポートされているのは最新の IDA リリースのみですが、古いバージョンでも動作する場合があります。次の表は、 各 IDA バージョンに対応する最新の互換リリースをまとめたものです:
| IDAバージョン | 最新の互換リリース |
|---|---|
| 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 | 現在のリリース |
| v9.4.260915 | 現在のリリース |
[!NOTE] 追加情報については idalib-rs のドキュメントを確認してください。
このプロジェクトの開発は、以下の組織によって支援されています:
.plt セグメント外のサンク(例:MSVC のインクリメンタルリンクによる j_ サンク)を介した呼び出しを追跡する。(lib) とラベル付けされるのみ)。