
AArch64 fuzzer baseado no hypervisor do Apple Silicon
HYPERPOM
Biblioteca de fuzzing AArch64 baseada no hypervisor Apple Silicon
O Hyperpom é um framework de fuzzing baseado em mutação e guiado por cobertura, construído sobre o Hypervisor Apple Silicon. Ele foi projetado para instrumentar e fuzzar facilmente binários userland AArch64.
A ideia por trás deste projeto foi criar um fuzzer eficiente e rápido que aproveitasse os recursos do Apple Silicon. No entanto, nesta fase, embora o fuzzer funcione, ele ainda é principalmente uma prova de conceito e requer muitas melhorias para oferecer melhores funcionalidades, usabilidade e desempenho.
Pode ser suficiente para os seus casos de uso, mas lembre-se de que você pode encontrar limitações que não foram consideradas durante o design do projeto. De qualquer forma, sinta-se à vontade para abrir uma issue e tentaremos resolver o seu problema.
rustup usando o guia oficial.rustup toolchain install nightly
Para usar este canal ao compilar, você pode:
rustup default nightly;+nightly sempre que compilar um binário com cargo.Instale o Cmake, usando brew por exemplo:
brew install cmake
Para ser capaz de acessar o Hypervisor Framework, um executável binário precisa ter recebido o entitlement de hypervisor.
Você pode adicionar este entitlement a um binário localizado em /path/to/binary usando o arquivo entitlements.xml encontrado na raiz do repositório Hyperpom e o seguinte comando:
codesign --sign - --entitlements entitlements.xml --deep --force /path/to/binary
Crie um projeto Rust e adicione o Hyperpom como dependência no Cargo.toml. Você pode obtê-lo a partir do crates.io ...
# Check which version is the latest, this part of the README might not be updated
# in future releases.
hyperpom = "0.1.0"
... ou diretamente do repositório GitHub.
hyperpom = { git="https://github.com/impalabs/hyperpom", branch="master" }
Crie um arquivo chamado entitlements.txt no diretório raiz do projeto e adicione o seguinte:
<?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>
Escreva o código e depois compile o projeto.
cargo build --release
Assine o binário e conceda o entitlement de hypervisor.
codesign --sign - --entitlements entitlements.xml --deep --force target/release/${PROJECT_NAME}
Execute o binário.
target/release/${PROJECT_NAME}
A documentação está disponível online no seguinte endereço: https://docs.rs/hyperpom
Alternativamente, você pode gerá-la usando cargo:
cargo doc --open
A documentação contém informações sobre como usar o framework e seus detalhes internos. Para um guia aprofundado, dê uma olhada no capítulo Loader, que fornece exemplos de como usar o fuzzer e instrumentar seus alvos.
Quatro exemplos são fornecidos para que você entenda melhor como o framework opera e comece a usar:
Executor.Você também pode dar uma olhada nos testes.
Para executar os testes usando o Makefile fornecido com o projeto, primeiro você precisará instalar o jq. Você pode fazer isso usando brew:
brew install jq
Em seguida, você pode executar os testes com o Makefile fornecido usando o seguinte comando:
make tests