エピソード 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 から報告されたバグを修正する: 重大度ヒューリスティックは、 実世界での利用可能性に基づいているのです。 シングルバイト オーバーフローにより、システムによる任意のコードの実行が 可能性があります。
リソース
- Chromium でのファズテスト: 新しいファザーを追加する方法 ClusterFuzz を使用して新しいデータ形式に使用できるほか、 脆弱性を発見するなど
- Chrome ファザー プログラムの更新とハウツー: ファザーは 書いたものです。お客様の体験談や、 すぐに始めることができます。