
Fuzzer AArch64 basé sur l'hyperviseur Apple Silicon.
HYPERPOM
bibliothèque de fuzzing AArch64 basée sur l'hyperviseur Apple Silicon
Hyperpom est un framework de fuzzing par mutation guidé par la couverture, construit sur l'hyperviseur Apple Silicon. Il a été conçu pour instrumenter et fuzzer facilement des binaires AArch64 en espace utilisateur.
L'idée derrière ce projet était de créer un fuzzer efficace et rapide qui tirerait parti des fonctionnalités d'Apple Silicon. Cependant, à ce stade, bien que le fuzzer fonctionne, il s'agit encore principalement d'une preuve de concept et il nécessite énormément d'améliorations pour offrir de meilleures fonctionnalités, une meilleure ergonomie et de meilleures performances.
Il peut suffire pour vos cas d'usage, mais gardez à l'esprit que vous pourriez rencontrer des limitations qui n'ont pas été prises en compte lors de la conception du projet. Dans tous les cas, n'hésitez pas à ouvrir une issue et nous essaierons de résoudre votre problème.
rustup en suivant le guide officiel.rustup toolchain install nightly
Pour utiliser ce canal lors de la compilation, vous pouvez soit :
rustup default nightly;+nightly à chaque fois que vous compilez un binaire avec cargo.Installez Cmake, en utilisant brew par exemple :
brew install cmake
Pour pouvoir accéder au framework Hypervisor, un binaire exécutable doit avoir reçu l'entitlement hyperviseur.
Vous pouvez ajouter cet entitlement à un binaire situé à /path/to/binary en utilisant le fichier entitlements.xml trouvé à la racine du dépôt Hyperpom et la commande suivante :
codesign --sign - --entitlements entitlements.xml --deep --force /path/to/binary
Créez un projet Rust et ajoutez Hyperpom comme dépendance dans Cargo.toml. Vous pouvez soit le récupérer depuis 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 directement depuis le dépôt GitHub.
hyperpom = { git="https://github.com/impalabs/hyperpom", branch="master" }
Créez un fichier nommé entitlements.txt à la racine du projet et ajoutez ce qui suit :
<?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>
Écrivez le code puis compilez le projet.
cargo build --release
Signez le binaire et accordez-lui l'entitlement hyperviseur.
codesign --sign - --entitlements entitlements.xml --deep --force target/release/${PROJECT_NAME}
Exécutez le binaire.
target/release/${PROJECT_NAME}
La documentation est disponible en ligne à l'adresse suivante : https://docs.rs/hyperpom
Vous pouvez également la générer avec cargo :
cargo doc --open
La documentation contient des informations sur l'utilisation du framework et de ses composants internes. Pour un guide approfondi, consultez le chapitre Loader, qui fournit des exemples sur la façon d'utiliser le fuzzer et de harnacher vos cibles.
Quatre exemples sont fournis pour vous permettre de mieux comprendre le fonctionnement du framework et de démarrer :
Executor.Vous pouvez également jeter un coup d'œil aux tests.
Pour exécuter les tests à l'aide du Makefile fourni avec le projet, vous devrez d'abord installer jq. Vous pouvez le faire avec brew :
brew install jq
Vous pouvez ensuite exécuter les tests avec le Makefile fourni en utilisant la commande suivante :
make tests