
カバレッジ誘導型ファザー。シンボリック実行を行わずに、テイントトラッキングとスカラー最適化を用いてパス制約を解決し、脆弱性発見のための分岐カバレッジを向上させます。
Angora は、ミューテーションに基づくカバレッジガイド型ファザーです。Angora の主な目標は、シンボリック実行を使わずにパス制約を解決することでブランチカバレッジを向上させることです。
Arxiv: Angora: Efficient Fuzzing by Principled Search、S&P 2018。
PREFIX=/path-to-install ./build/install_llvm.sh を実行してください。シェル設定ファイル (~/.bashrc、~/.zshrc) に以下のエントリを追加してください。
export PATH=/path-to-clang/bin:$PATH
export LD_LIBRARY_PATH=/path-to-clang/lib:$LD_LIBRARY_PATH
ビルドスクリプトがほとんどの依存関係を解決し、実行時環境をセットアップします。
./build/build.sh
AFL と同様に、システムのコアダンプを無効にする必要があります。
echo core | sudo tee /proc/sys/kernel/core_pattern
Angora が正しくビルドされたかテストします。
cd /path-to-angora/tests
./test.sh mini
Angora はプログラムを、それぞれ固有の計測を施した 2 つの別々のバイナリにコンパイルします。autoconf プログラムを例として、必要な手順は以下のとおりです。
# 計測用コンパイラを使用
CC=/path/to/angora/bin/angora-clang \
CXX=/path/to/angora/bin/angora-clang++ \
LD=/path/to/angora/bin/angora-clang \
PREFIX=/path/to/target/directory \
./configure --disable-shared
# テイント追跡サポート付きでビルド
USE_TRACK=1 make -j
make install
# コンパイル済みターゲットバイナリを新しいディレクトリに保存し、
# uniq.taint のように .taint 接尾辞を付けてリネーム
# 軽量計測サポート付きでビルド
make clean
USE_FAST=1 make -j
make install
# コンパイル済みバイナリを先ほど作成したディレクトリに保存し、
# uniq.fast のように .fast 接尾辞を付けてリネーム
この方法でビルドできない場合は、ターゲットプログラムのビルド で説明されている wllvm と gllvm を試してください。
また、DFSan の代わりに libdft64 を使ったテイント解析も実装しています (テイント追跡に libdft64 を使用)。
./angora_fuzzer -i input -o output -t path/to/taint/program -- path/to/fast/program [argv]
詳細については、docs/ ディレクトリ内のドキュメントを参照してください。