Chromium Chronicle #9: ClusterFuzz

エピソード 9: Adrian Taylor 氏、マウンテン ビュー(2019 年 12 月)
前のエピソード

チームによって検出された優先度の高いセキュリティ バグの修正を求められることがあります。 ClusterFuzz です。概要: バグを真剣に受け止めるべき?どうすれば どうすればよいですか?

ファジングのフローチャート

ClusterFuzz は Chrome に入力をフィードし、クラッシュを監視します。その一部 Chrome ビルドでは、AddressSanitizer など、追加のチェックがオンになっています。 メモリ安全性エラーを探します

ClusterFuzz は、クラッシュした場所に基づいてコンポーネントを割り当て、 重大度に基づいて、サンドボックス内で発生したか プロセスをご覧ください。たとえば、次の場合を除き、解放後のヒープ使用の重大度は「高」になります。 ブラウザ プロセス内にある場合、その場合に重要です(サンドボックスによる制限は あります)。

class Foo {
  Widget* widget;
};

void Foo::Bar() {
  delete widget;
  ...
  widget->Activate();  // Bad in the renderer process, worse in the
                       // browser process. Obviously, real bugs are
                       // more subtle. Usually.

ClusterFuzz は、ファザーまたは外部に送信されたバグから入力を生成します。 一部のファザーは libFuzzer を利用しています。これは、入力を進化させ、 コード カバレッジを拡大できます。入力した言語の文法を理解できる protobufs に変換されます。ClusterFuzz はクラッシュを検出すると、 入力テストケースを最小限に抑え、さらに bisect して問題のある commit を見つけます。 いろんなものが見つかる...

以下の方法をお試しください。

  • オブジェクトのライフタイムとサポートしています。
  • 特に信頼できないデータや IPC を処理する場合は、新しいファザーを追加します( 以下のリンク(多くの場合、<20 行のコードなど)。
  • ClusterFuzz から報告されたバグを修正する: 重大度ヒューリスティックは、 実世界での利用可能性に基づいているのです。 シングルバイト オーバーフローにより、システムによる任意のコードの実行が 可能性があります。

リソース