
Fuzzer AArch64 basado en el hipervisor de Apple Silicon
HYPERPOM
Biblioteca de fuzzing para AArch64 basada en el hipervisor de Apple Silicon
Hyperpom es un framework de fuzzing basado en mutaciones guiadas por cobertura, construido sobre el hipervisor de Apple Silicon. Ha sido diseñado para instrumentar y fuzzear fácilmente binarios AArch64 de espacio de usuario.
La idea detrás de este proyecto era crear un fuzzer eficiente y rápido que aprovechara las características de Apple Silicon. Sin embargo, en esta etapa, aunque el fuzzer funciona, sigue siendo en su mayoría una prueba de concepto y requiere una gran cantidad de mejoras para ofrecer mejores características, usabilidad y rendimiento.
Puede ser suficiente para tus casos de uso, pero ten en cuenta que podrías encontrarte con limitaciones que no se tuvieron en cuenta al diseñar el proyecto. En cualquier caso, no dudes en abrir un issue e intentaremos resolver tu problema.
rustup siguiendo la guía oficial.rustup toolchain install nightly
Para usar este canal al compilar, puedes:
rustup default nightly;+nightly cada vez que compiles un binario con cargo.Instala Cmake, usando brew por ejemplo:
brew install cmake
Para poder acceder al Hypervisor Framework, un binario ejecutable debe habérsele concedido el entitlement de hipervisor.
Puedes añadir este entitlement a un binario ubicado en /path/to/binary usando el archivo entitlements.xml que se encuentra en la raíz del repositorio de Hyperpom y el siguiente comando:
codesign --sign - --entitlements entitlements.xml --deep --force /path/to/binary
Crea un proyecto de Rust y añade Hyperpom como dependencia en Cargo.toml. Puedes obtenerlo desde crates.io ...
# Check which version is the latest, this part of the README might not be updated
# in future releases.
hyperpom = "0.1.0"
... o directamente desde el repositorio de GitHub.
hyperpom = { git="https://github.com/impalabs/hyperpom", branch="master" }
Crea un archivo llamado entitlements.txt en el directorio raíz del proyecto y añade lo siguiente:
<?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>
Escribe código y luego compila el proyecto.
cargo build --release
Firma el binario y concede el entitlement de hipervisor.
codesign --sign - --entitlements entitlements.xml --deep --force target/release/${PROJECT_NAME}
Ejecuta el binario.
target/release/${PROJECT_NAME}
La documentación está disponible en línea en la siguiente dirección: https://docs.rs/hyperpom
Alternativamente, puedes generarla usando cargo:
cargo doc --open
La documentación contiene información sobre el uso del framework y sus componentes internos. Para una guía en profundidad, echa un vistazo al capítulo Loader, que proporciona ejemplos sobre cómo usar el fuzzer y armar el harness para tus objetivos.
Se incluyen cuatro ejemplos para que comprendas mejor cómo funciona el framework y puedas empezar:
Executor.También puedes echar un vistazo a los tests.
Para ejecutar los tests usando el Makefile proporcionado con el proyecto, primero necesitarás instalar jq. Puedes hacerlo usando brew:
brew install jq
A continuación, puedes ejecutar los tests con el Makefile proporcionado usando el siguiente comando:
make tests