エキスパート
Mayhem を使用した OSS-Fuzz ターゲットの実行¶
このレッスンでは、oss-fuzz ファズ ターゲットを Mayhem にアップロードする方法を手順を追って説明します。
学習時間の目安: 10 分
このレッスンを終了すると、以下のことができるようになります。
- OSS-Fuzz プロジェクトとは何かを説明する。 2.OSS-Fuzz サンプルを順を追って説明し、ターゲットを Mayhem にアップロードする。
OSS-Fuzz リポジトリ¶
Google の oss-fuzz プロジェクトは、Google Chrome のさまざまなオープン ソース コンポーネントをファジングするという Google による取り組みです。最近、Google はプロジェクトをオープン ソース化して、オープン ソース プロジェクトのコントリビューターが自分たちのプロジェクトを開発し続けながらワークフローに動的解析を取り入れられるようにしました。Google はそれらの「ファズ ターゲット」を取得して Google の大規模な計算クラスター上で実行し、Google Chrome を構成する幅広いコンポーネントに対して継続的に解析を実行しています。
OSS-Fuzz プロジェクトは大きな成功をおさめ、すでにコード内の何百という重大なバグを発見しています。Google は生成されたテストケースをすべて保存しているため、新しいフィーチャー アップデートが Chrome にプッシュされたとき、テストケースのデータベースがすでに構築され、データセット内で動作が変わっていないかを評価できるので、高いレベルの確実性が保証されます。
現在、この OSS-Fuzz プロジェクトには数百のファズ ターゲットが存在し、Google によって継続的にテストされており、さらにターゲットが追加され続けています。 これらのターゲットは、業界の主導的なインメモリ ファザーである LibFuzzer をサポートするよう作成されているため、すべて Mayhem に取り込むことができます。
Note
LibFuzzer 向けにテスト ドライバーを作成する場合、AFL や Mayhem などの典型的な動的解析ファザー向けにテスト ドライバーを作成する場合に課せられる典型的な要件のすべてがあてはまるほか、より厳しい要件が課せられます。なぜなら、LibFuzzer はメモリ内で動作するため、メモリ内での後続の実行結果に影響をおよぼす可能性があるグローバルな状態の変更やその他の外部的影響を避ける必要があるからです。
OSS-Fuzz ターゲットを Mayhem にアップロードする¶
まず、oss-fuzz リポジトリをクローンしてプロジェクトの zlib をサンプルとして使用します。
- https://github.com/google/oss-fuzz の oss-fuzz リポジトリをクローンします。
- oss-fuzz ディレクトリに移動し、プロジェクトのビルドに必要なイメージをプルします。
cd oss-fuzz && python infra/helper.py pull_images
- イメージおよびファザーをビルドします。
python infra/helper.py build_image zlib
python infra/helper.py build_fuzzers --sanitizer address zlib
- build/out/zlib ディレクトリに zlib ターゲットがビルドされます。
- Mayhem CLI を使用してターゲットの 1 つをパッケージ化します。
mayhem package build/out/zlib/compress_fuzzer -o zlib_compress
- Mayhemfile を参照して
libfuzzer
およびsanitizer
ディレクティブに適切にtrue
が設定されていることを確認します。 mayhem run zlib_compress
を実行して Mayhem による解析を開始します。
✏️ まとめと振り返り¶
このレッスンでは、Google の OSS-Fuzz プロジェクトについて、また OSS-Fuzz ターゲットを Mayhem にアップロードする方法について学びました。
学習内容
1.OSS-Fuzz プロジェクトは何かを説明する。
- Google の oss-fuzz プロジェクトは、Google Chrome のさまざまなオープン ソース コンポーネントをファジングするという Google による取り組みです。最近、Google はプロジェクトをオープン ソース化して、オープン ソース プロジェクトのコントリビューターが自分たちのプロジェクトを開発し続けながらワークフローに動的解析を取り入れられるようにしました。Google はそれらの「ファズ ターゲット」を取得して Google の大規模な計算クラスター上で実行し、Google Chrome を構成する幅広いコンポーネントに対して継続的に解析を実行しています。
2.OSS-Fuzz サンプルを参照し、ターゲットを Mayhem にアップロードする手順を確認する。
- 次の手順を行う必要があります。
- https://github.com/google/oss-fuzz の oss-fuzz リポジトリをクローンします。
- oss-fuzz ディレクトリに移動し、プロジェクトのビルドに必要なイメージをプルします。
cd oss-fuzz && python infra/helper.py pull_images
- イメージおよびファザーをビルドします。
python infra/helper.py build_image zlib
python infra/helper.py build_fuzzers --sanitizer address zlib
- build/out/zlib ディレクトリに zlib ターゲットがビルドされます。
- Mayhem CLI を使用してターゲットの 1 つをパッケージ化します。
mayhem package build/out/zlib/compress_fuzzer -o zlib_compress
- Mayhemfile を参照して
libfuzzer
およびsanitizer
ディレクティブに適切にtrue
が設定されていることを確認します。 mayhem run zlib_compress
を実行して Mayhem による解析を開始します。