
rhabdomancer v0.10.0
Ассистент для исследования уязвимостей, который находит вызовы потенциально небезопасных функций API в бинарном файле.
rhabdomancer
«Дорога к эксплуатируемым ошибкам вымощена неэксплуатируемыми ошибками.»
-- Марк Дауд
Rhabdomancer — это молниеносно быстрый headless-плагин для IDA, который находит вызовы потенциально небезопасных функций API в бинарном файле. Аудиторы могут выполнить обратную трассировку от этих точек-кандидатов, чтобы найти пути, допускающие доступ к недоверенным входным данным.

Возможности
- Молниеносно быстрый headless-режим работы благодаря IDA 9.x и Rust-привязкам idalib-rs.
- Поддержка C/C++ бинарных целей, скомпилированных для любой архитектуры, реализованной в IDA.
- Местоположения вызовов небезопасных функций API выводятся в stdout и помечаются в IDB.
- Известные небезопасные функции API сгруппированы по уровням опасности, чтобы помочь расставить приоритеты в работе аудита.
- [BAD 0] Высокий приоритет — функции, которые обычно считаются небезопасными.
- [BAD 1] Средний приоритет — интересные функции, которые следует проверить на небезопасные сценарии использования.
- [BAD 2] Низкий приоритет — пути выполнения кода, затрагивающие эти функции, следует тщательно проверять.
- Список известных небезопасных функций API можно легко настроить, отредактировав
conf/rhabdomancer.toml.
Статьи
- https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings
- https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust
См. также
- 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
Установка
Самый простой способ получить последний релиз — через crates.io:
- Загрузите, установите и настройте IDA (см. https://hex-rays.com/ida-pro).
- Установите LLVM/Clang (см. https://rust-lang.github.io/rust-bindgen/requirements.html).
- В Linux/macOS установите следующим образом:
В Windows вместо этого используйте следующие команды:
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
Сборка
Кроме того, вы можете собрать из исходников:
- Загрузите, установите и настройте IDA (см. https://hex-rays.com/ida-pro).
- Установите LLVM/Clang (см. https://rust-lang.github.io/rust-bindgen/requirements.html).
- В Linux/macOS скомпилируйте следующим образом:
В Windows вместо этого используйте следующие команды:
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
Использование
- Убедитесь, что IDA правильно настроена и имеет действующую лицензию.
- При необходимости настройте список известных небезопасных функций API в
conf/rhabdomancer.toml. Вы можете переопределить расположение файла конфигурации по умолчанию, задав переменную окруженияRHABDOMANCER_CONFIG. - Убедитесь, что переменная окружения
IDADIRустановлена, если ваша установка IDA находится в нестандартном месте. - Запустите следующим образом:
Существующий файл IDB
rhabdomancer <binary_file>.i64будет обновлён; в противном случае будет создан новый файл IDB. - Откройте полученный файл IDB
.i64в IDA. - Выберите
View>Open subviews>Bookmarks - Удобно просматривайте результаты, собранные в окне IDA.
[!NOTE] Rhabdomancer также добавляет комментарии в отмеченных местах вызовов.
Совместимость
Официально поддерживается только последний релиз 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 | текущий релиз |
[!NOTE] Дополнительную информацию смотрите в документации idalib-rs.
Благодарности
Разработка этого проекта была поддержана следующими организациями:
- HN Security
- Hex-Rays через их Contributor Program
Журнал изменений
TODO
- Дополнительно расширить список известных небезопасных функций API (см. https://github.com/0xdea/semgrep-rules).
- Рассмотреть возможность расширения области нормализации в
normalize_nameдля учёта большего числа случаев. - Реализовать базовый набор правил в стиле VulFi и VulnFanatic.