
Fuzzer AArch64 basato sull'hypervisor Apple Silicon
HYPERPOM
Libreria di fuzzing AArch64 basata sull'hypervisor Apple Silicon
Hyperpom è un framework di fuzzing mutation-based guidato dalla copertura del codice, costruito sopra l'Apple Silicon Hypervisor. È stato progettato per instrumentare e fare fuzzing facilmente di binari AArch64 in userland.
L'idea alla base di questo progetto era creare un fuzzer efficiente e veloce che sfruttasse le funzionalità di Apple Silicon. Tuttavia, in questa fase, sebbene il fuzzer funzioni, è ancora per lo più una proof of concept e richiede moltissimi miglioramenti per offrire migliori funzionalità, usabilità e prestazioni.
Potrebbe essere sufficiente per i tuoi casi d'uso, ma tieni presente che potresti incontrare limitazioni non considerate durante la progettazione del progetto. In ogni caso, non esitare ad aprire una issue e cercheremo di risolvere il tuo problema.
rustup seguendo la guida ufficiale.rustup toolchain install nightly
Per usare questo canale durante la compilazione puoi:
rustup default nightly;+nightly ogni volta che compili un binario con cargo.Installa Cmake, ad esempio con brew:
brew install cmake
Per poter accedere all'Hypervisor Framework, a un binario eseguibile deve essere stato concesso l'entitlement per l'hypervisor.
Puoi aggiungere questo entitlement a un binario situato in /path/to/binary usando il file entitlements.xml che si trova nella radice del repository Hyperpom e il seguente comando:
codesign --sign - --entitlements entitlements.xml --deep --force /path/to/binary
Crea un progetto Rust e aggiungi Hyperpom come dipendenza in Cargo.toml. Puoi prelevarlo da crates.io ...
# Check which version is the latest, this part of the README might not be updated
# in future releases.
hyperpom = "0.1.0"
... oppure direttamente dal repository GitHub.
hyperpom = { git="https://github.com/impalabs/hyperpom", branch="master" }
Crea un file chiamato entitlements.txt nella directory principale del progetto e aggiungi quanto segue:
<?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>
Scrivi del codice e poi compila il progetto.
cargo build --release
Firma il binario e concedi l'entitlement dell'hypervisor.
codesign --sign - --entitlements entitlements.xml --deep --force target/release/${PROJECT_NAME}
Esegui il binario.
target/release/${PROJECT_NAME}
La documentazione è disponibile online al seguente indirizzo: https://docs.rs/hyperpom
In alternativa, puoi generarla usando cargo:
cargo doc --open
La documentazione contiene informazioni sull'uso del framework e sui suoi interni. Per una guida approfondita, dai un'occhiata al capitolo Loader, che fornisce esempi su come usare il fuzzer e creare l'harness per i tuoi target.
Sono forniti quattro esempi per farti capire meglio come funziona il framework e per iniziare:
Executor.Puoi anche dare un'occhiata ai test.
Per eseguire i test usando il Makefile fornito con il progetto, dovrai prima installare jq. Puoi farlo usando brew:
brew install jq
Puoi quindi eseguire i test con il Makefile fornito usando il seguente comando:
make tests