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

Возможности
- Молниеносно быстрый headless-опыт благодаря IDA 9.x и Rust-биндингам idalib-rs.
- Поддержка бинарных целей на C/C++, скомпилированных для любой архитектуры, реализованной в IDA.
- Местоположения вызовов плохих API-функций выводятся в stdout и помечаются в IDB.
- Местоположения вызовов в библиотечном коде, распознанном IDA (например, статически слинкованный рантайм, сопоставленный FLIRT-сигнатурами), помечаются как
(lib). - Вызовы через заглушки (например, записи
.pltв ELF-бинарниках или импортные заглушки PE- и Mach-O-бинарников, перечисляемые как thunks) трассируются обратно к их вызывающим. - В ELF-бинарниках функция намеренно перечисляется дважды с одинаковыми местоположениями вызовов: один раз как её
.plt-заглушка (помеченная как thunk) и один раз как её импорт. Каждое местоположение вызова помечается в IDB только один раз.
- Местоположения вызовов в библиотечном коде, распознанном IDA (например, статически слинкованный рантайм, сопоставленный FLIRT-сигнатурами), помечаются как
- Известные плохие API-функции сгруппированы по уровням опасности, чтобы помочь расставить приоритеты в аудиторской работе.
- [BAD 0] Высокий приоритет — функции, которые обычно считаются небезопасными.
- [BAD 1] Средний приоритет — интересные функции, которые следует проверить на небезопасные сценарии использования.
- [BAD 2] Низкий приоритет — пути кода, связанные с этими функциями, следует тщательно проверять.
- Список известных плохих API-функций встроен и может быть легко настроен с помощью конфигурационного файла на основе
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).
Статьи
- 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 --locked$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
Компиляция
В качестве альтернативы можно собрать из исходного кода:
- Скачайте, установите и настройте 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 --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" # if not set, the build script will check common locations cargo build --release --locked
Использование
- Убедитесь, что IDA правильно настроена и имеет действующую лицензию.
- При необходимости настройте список известных опасных API-функций: скопируйте
conf/rhabdomancer.toml(выберите тег, соответствующий вашей установленной версии, для получения точного встроенного списка), отредактируйте копию и задайте переменную окруженияRHABDOMANCER_CONFIGс путём к ней. Файл должен определять массивыhigh,mediumиlow, и никаких других ключей. В противном случае используется встроенный список, который встраивается в бинарный файл во время сборки изconf/rhabdomancer.toml(редактирование этого файла требует пересборки). - Убедитесь, что переменная окружения
IDADIRзадана, если ваша установка IDA находится в нестандартном месте. - Запустите следующим образом:
Любой существующий файл базы данныхrhabdomancer <binary_file>.i64будет обновлён; в противном случае будет создан новый файл базы данных. - Откройте полученный файл базы данных
.i64в IDA. - Выберите
View>Open subviews>Bookmarks - Наслаждайтесь результатами, удобно собранными в окне IDA.
[!NOTE] Rhabdomancer также добавляет комментарии в отмеченных местах вызовов. И закладки, и комментарии помечаются как
[BAD n] <function_name>, гдеn— уровень приоритета (0 = высокий, 1 = средний, 2 = низкий), чтобы скрипты могли искать их в базах данных IDA. Этот формат стабилен между релизами.
Совместимость
Официально поддерживается только последний релиз IDA, но более старые версии также могут работать. В следующей таблице приведены последние совместимые релизы для каждой версии IDA: