
QilingエミュレーションとAFL++を使用し、自動入力ミューテーションとクラッシュ検出を通じてファームウェアの脆弱性を発見する、UEFI NVRAM変数向けのカバレッジガイド型ファザー。
UEFI NVRAM変数のためのシンプルなカバレッジ誘導型ファザー。
Qiling と AFL++ に基づいています。
作者: Itai Liba (@liba2k) と Assaf Carlsbad (@assaf_carlsbad)。
イメージをビルド:
docker build -t efi_fuzz .
環境をテスト:
docker run -v $PWD:/efi_fuzz -it efi_fuzz sh -c "cd efi_fuzz/tests/ && pytest -s -v -W ignore::DeprecationWarning"
環境を使用:
docker run -v $PWD:/efi_fuzz -it efi_fuzz sh -c "cd /efi_fuzz ; bash"
エミュレートされたNVRAM環境を準備 (ROMイメージを提供する必要があります):
python3 scripts/prepare_nvram.py rom.bin nvram.pickle
NVRAM変数の初期コーパスを準備:
python3 scripts/prepare_afl_corpus.py rom.bin afl_inputs
ファザーのドライランを実行:
python3 efi_fuzz.py <target> <nvram> <varname> <seed>
成功したら、本格的なファジングに移行:
afl-fuzz -i afl_inputs/<varname> -o afl_outputs/ -U -- python3 efi_fuzz.py <target> <nvram> <varname> @@
Windowsで実行している場合は、WSLをインストールしてください。元のWSLは時々遅くなることがあるため、WSL2を推奨します。Windows 10の完全なインストール手順はこちら: https://docs.microsoft.com/en-us/windows/wsl/install-win10
WSLディストリビューション内で、Cソースコードをコンパイルするために必要なパッケージをインストール:
sudo apt install build-essential automake
Unicornモードサポート付きのAFL++をインストール。
3.1. リポジトリをクローン:
git clone https://github.com/AFLplusplus/AFLplusplus
3.2. コアAFL++バイナリをビルド:
make
3.3. Unicornサポート機能をビルド:
cd unicorn_mode
./build_unicorn_support.sh
3.4. すべてをインストール:
make install
ファジングしたいUEFIファームウェアを入手して展開してください。実際の手順に関する完全な技術的詳細は、こちら または こちら を参照してください。
ファザーをクローンして必要な依存関係をインストール:
git clone https://github.com/Sentinel-One/efi_fuzz
pip install -r efi_fuzz/requirements.txt
Tritonはテイント伝播に必要です。
Tritonのインストール手順はこちら:
https://triton.quarkslab.com/documentation/doxygen/#install_sec
エミュレートされたNVRAM環境を準備:
python scripts/prepare_nvram.py rom.bin nvram.pickle
NVRAM変数の初期コーパスを準備:
python scripts/prepare_afl_corpus.py rom.bin afl_inputs
ファザーのドライランを実行:
python efi_fuzz.py <target> <nvram> <varname> <seed>
成功したら、本格的なファジングに移行:
afl-fuzz -i afl_inputs/<varname> -o afl_outputs/ -U -- python efi_fuzz.py <target> <nvram> <varname> @@
-e, --end: エミュレーションの終了アドレスを指定します。-t, --timeout: エミュレーションの新しいタイムアウト値をミリ秒単位で指定します。-o, --output: デバッグ用の出力形式を指定します。有効な値: trace, disasm, debug, off (デフォルトはoff)。-n, --no-sanitize: メモリサニタイザを無効にします (デフォルトはFalse)。-u, --track-uninitialized: Tritonとテイント伝播による未初期化メモリの追跡を有効にします (実験的!)。-x, --extra-modules: ターゲットの依存関係を満たすためにロードする追加モジュールのリスト。UEFIファームウェア全般および efi_fuzz に関する詳細情報はこちら: