
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 # если не задано, сценарий сборки проверит стандартные расположения cargo install rhabdomancer --locked$env:LIBCLANG_PATH="\path\to\clang+llvm\bin" $env:PATH="\path\to\ida;$env:PATH" $env:IDADIR="\path\to\ida" # если не задано, сценарий сборки проверит стандартные расположения cargo install rhabdomancer --locked
Компиляция
В качестве альтернативы вы можете собрать из исходного кода:
- Загрузите, установите и настройте 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 # если не задано, сценарий сборки проверит стандартные расположения cargo build --release --lockedgit 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" # если не задано, сценарий сборки проверит стандартные расположения cargo build --release --locked
Использование
- Убедитесь, что 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 через свою программу для участников
Журнал изменений
TODO
- Дальнейшее расширение списка известных небезопасных API-функций (см. https://github.com/0xdea/semgrep-rules).
- Рассмотреть возможность расширения области нормализации в
normalize_nameдля учёта большего числа случаев. - Реализовать базовый набор правил в стиле VulFi и VulnFanatic.