
AArch64 фаззер на основе гипервизора Apple Silicon
HYPERPOM
Библиотека для фаззинга AArch64 на основе гипервизора Apple Silicon
Hyperpom — это фреймворк для фаззинга на основе покрытия и мутаций, построенный поверх гипервизора Apple Silicon. Он спроектирован для простой инструментации и фаззинга AArch64-бинарных файлов пользовательского режима.
Идея этого проекта заключалась в создании эффективного и быстрого фаззера, использующего возможности Apple Silicon. Однако на данном этапе, хотя фаззер и работает, он всё ещё по большей части является доказательством концепции и требует огромного количества доработок для улучшения функциональности, удобства использования и производительности.
Возможно, этого будет достаточно для ваших задач, но имейте в виду, что вы можете столкнуться с ограничениями, которые не были учтены при проектировании проекта. В любом случае, не стесняйтесь открывать issue, и мы постараемся решить вашу проблему.
rustup, следуя официальному руководству.rustup toolchain install nightly
Чтобы использовать этот канал при компиляции, вы можете либо:
rustup default nightly;+nightly каждый раз при компиляции бинарного файла с помощью cargo.Установите Cmake, например с помощью brew:
brew install cmake
Чтобы получить доступ к Hypervisor Framework, исполняемому бинарному файлу должен быть предоставлен энтайтлмент гипервизора.
Вы можете добавить этот энтайтлмент к бинарному файлу, расположенному по пути /path/to/binary, используя файл entitlements.xml, находящийся в корне репозитория Hyperpom, и следующую команду:
codesign --sign - --entitlements entitlements.xml --deep --force /path/to/binary
Создайте проект Rust и добавьте Hyperpom в качестве зависимости в Cargo.toml. Вы можете либо загрузить его с crates.io ...
# Check which version is the latest, this part of the README might not be updated
# in future releases.
hyperpom = "0.1.0"
... либо напрямую из репозитория GitHub.
hyperpom = { git="https://github.com/impalabs/hyperpom", branch="master" }
Создайте файл с именем entitlements.txt в корневом каталоге проекта и добавьте следующее:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.hypervisor</key>
<true/>
</dict>
</plist>
Напишите код, а затем соберите проект.
cargo build --release
Подпишите бинарный файл и предоставьте ему энтайтлмент гипервизора.
codesign --sign - --entitlements entitlements.xml --deep --force target/release/${PROJECT_NAME}
Запустите бинарный файл.
target/release/${PROJECT_NAME}
Документация доступна онлайн по следующему адресу: https://docs.rs/hyperpom
Кроме того, вы можете сгенерировать её с помощью cargo:
cargo doc --open
Документация содержит информацию об использовании фреймворка и его внутреннем устройстве. Подробное руководство можно найти в главе Loader, где приведены примеры использования фаззера и создания харнесов для целевых программ.
Предоставлены четыре примера, которые помогут вам лучше понять, как работает фреймворк, и начать работу:
Executor.Вы также можете посмотреть тесты.
Чтобы запустить тесты с помощью Makefile, входящего в состав проекта, сначала потребуется установить jq. Это можно сделать с помощью brew:
brew install jq
Затем вы можете запустить тесты с помощью Makefile, используя следующую команду:
make tests