
Ассистент для исследования уязвимостей, который находит вызовы потенциально небезопасных функций API в бинарном файле.
"Дорога к эксплуатируемым уязвимостям вымощена неэксплуатируемыми уязвимостями."
-- Mark Dowd
Rhabdomancer — это молниеносно быстрый headless-плагин для IDA, который находит вызовы потенциально небезопасных API-функций в бинарном файле. Аудиторы могут выполнить обратную трассировку от этих кандидатных точек, чтобы найти пути, позволяющие получить доступ к недоверенному вводу.

(lib)..plt в ELF-бинарниках или импортные заглушки PE- и Mach-O-бинарников, перечисляемые как thunks) трассируются обратно к их вызывающим..plt-заглушка (помеченная как thunk) и один раз как её импорт. Каждое местоположение вызова помечается в IDB только один раз.conf/rhabdomancer.toml._strcpy), префиксов библиотечных псевдонимов (например, __o_malloc в Universal CRT, __libc_system и __GI___snprintf в glibc) и, только для заглушек и подобных псевдонимов, числового суффикса, который IDA добавляет к уже используемым именам (например, memset_0).[!NOTE] Укреплённые функции (например,
__strcpy_chk, используемая вместоstrcpyпри сборке с_FORTIFY_SOURCE) намеренно не сопоставляются, поскольку они являются проверяемыми вариантами перечисленных функций. Чтобы также помечать их вызовы, добавьте их явно в пользовательскую конфигурацию (например,"__strcpy_chk"с тем же приоритетом, что иstrcpy).
Самый простой способ получить последнюю версию — через 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 задана, если ваша установка IDA находится в нестандартном месте.rhabdomancer <binary_file>
Любой существующий файл базы данных .i64 будет обновлён; в противном случае будет создан новый файл базы данных..i64 в IDA.View > Open subviews > Bookmarks[!NOTE] Rhabdomancer также добавляет комментарии в отмеченных местах вызовов. И закладки, и комментарии помечаются как
[BAD n] <function_name>, гдеn— уровень приоритета (0 = высокий, 1 = средний, 2 = низкий), чтобы скрипты могли искать их в базах данных IDA. Этот формат стабилен между релизами.
Официально поддерживается только последний релиз IDA, но более старые версии также могут работать. В следующей таблице приведены последние совместимые релизы для каждой версии IDA: