
HYPERPOM
Apple Silicon ハイパーバイザーに基づく AArch64 ファジングライブラリ
Hyperpom は、Apple Silicon Hypervisor 上に構築されたカバレッジガイド型ミューテーションベースのファジングフレームワークです。AArch64 ユーザーランドバイナリを簡単にインストルメントし、ファジングできるように設計されています。
このプロジェクトの背後にあるアイデアは、Apple Silicon の機能を活用した効率的で高速なファザーを作ることでした。しかし現段階では、ファザーは動作するものの、まだほとんどが概念実証(proof of concept)であり、より優れた機能、使いやすさ、性能を提供するには多くの改良が必要です。
お使いのユースケースには十分かもしれませんが、プロジェクト設計時に考慮されていなかった制限に遭遇する可能性があることを覚えておいてください。いずれにせよ、お気軽に issue を開いてください。私たちが問題への対処を試みます。
rustup をインストールします。rustup toolchain install nightly
このチャンネルをコンパイル時に使用するには、次のいずれかを行います:
rustup default nightly でデフォルトに設定する。cargo でバイナリをコンパイルするたびに +nightly を追加する。たとえば brew を使って Cmake をインストールします:
brew install cmake
Hypervisor Framework にアクセスするには、バイナリ実行ファイルに ハイパーバイザー権限 が付与されている必要があります。
この権限は、Hyperpom リポジトリのルートにある entitlements.xml ファイルと次のコマンドを使用して、/path/to/binary にあるバイナリに追加できます:
codesign --sign - --entitlements entitlements.xml --deep --force /path/to/binary
Rust プロジェクトを作成し、Cargo.toml の依存関係に Hyperpom を追加します。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 の章を参照してください。そこでは、ファザーの使用方法とターゲットのハーネス化の例が紹介されています。
フレームワークの動作をより深く理解し、使い始めるための 4 つの例が用意されています:
Executor を使って VM 内で任意のコードを実行する方法を示します。tests も参照できます。
プロジェクトに付属の Makefile を使ってテストを実行するには、まず jq をインストールする必要があります。brew を使ってインストールできます:
brew install jq
その後、次のコマンドで提供されている Makefile を使ってテストを実行できます:
make tests