Mozilla Security Blog 日本語版

Mozilla Security Blog を日本語に翻訳(非公式)

【翻訳】ASan Nightly Project の紹介

この記事は、2018 年 7 月 19 日付で Mozilla Security Blog に投稿された Introducing the ASan Nightly Project (筆者:decoder)の翻訳です。この翻訳は公式なものではありません。詳しくは こちら をご覧ください。


ユーザの手元へ安定かつ安全な Firefox を確実に届けるため、 多くの Mozillian が長い時間をかけて日々テストを行っています。 しかし、残念なことにバグの無いプロダクトなど存在しないため、 どれほどテストに力を注いでも時としてブラウザはクラッシュしてしまいます。 実際にクラッシュレポートを調査してみると、 中には古典的なセキュリティバグ(解放後使用に代表されるメモリ破壊など)に見えるものもあります。 しかし、そのようなレポートから得られるデータは、 それ単独では何も意味をなさない程度に不十分(つまり、開発者が問題を特定・修正するのに十分でない)なことがしばしばです。 この傾向は、解放後使用といったメモリ破壊の問題において、 原因となるアクセス違反が起きてから実際のクラッシュが起きるまでにかなり時間が空くケースで特に顕著です。

Mozilla は結合テストとファジングを自動化していますが、そのプロセスで AddressSanitizer (ASan) を使用しています。 ASan はコンパイル時に組み込むツールであり、ここ 5 年間で大きな成果を挙げてきました。 解放後使用を例にすると、ASan はメモリのアクセス違反が起きたタイミングのみならず、 そのメモリを以前解放した場所も同時に報告してくれるため、 通常のクラッシュレポートよりも ASan は開発者にとってより有益な情報を提供してくれます。

Nightly のテストで ASan の恩恵をより得られるよう、私達は両者を ASan Nightly Project に統合することにしました。 特殊な ASan レポータアドオンを組み込んだ ASan Nightly ビルドを独自に作成し、 アドオンが ASan のエラーを検知・収集して Mozilla に送信できるようにしました。 このプロジェクトは既に実環境へ展開されており、 実際に見つかった ASan エラーのレポートを利用して、 再現の難しい問題も特定・修正できるようにしています。 現在は Linux 版ビルドにのみ導入していますが、Windows 版と Mac 版のビルドに対しても鋭意取り込んでいます。

当然ながらこのアプローチには欠点があります。 ASan の有無はコンパイル時間にはさほど影響を与えませんが、 解放後使用を検知するには ASan が解放済みのメモリを保持しておく必要があるため、 (既に量の多い)メモリ使用量がさらに増大するにつれて、ブラウザの実行時間がより長くなってしまうのです。 したがって、ASan Nightly ビルドを動かすには十分な量の RAM が必要となり(最低 16 GB 以上を推奨)、 またメモリを解放するために 1 日に 1 ~ 2 回ブラウザを再起動させる必要があります。

しかし、新しい Firefox 環境での web ブラウジングをいとわないのなら、 あなたはバグバウンティの報奨金を受け取る資格があるかもしれません。 あなたの Firefox から自動的に送信されるレポートは、 Bugzilla に報告されるテストケース無しの bug と同じように扱われます。 すなわち、その問題が 1) 適切なセキュリティバグであり、かつ 2) Mozilla の開発者によって修正可能な場合、 バグを報告したあなたにバグバウンティの報奨金が支払われます(Mozilla Bug Bounty Program の規則はすべて通常通り適用されます)。 このプロジェクトに参加してレポートを自分名義のものにする場合は、 Bug Bounty のセクションをよく読んだ上で、設定項目を正しくセットしてください。

このプロジェクトが成果を挙げるためには、十分多くの人がこのプロジェクトに参加してもらう必要があります。 参加規約を理解していただき、是非あなたも参加していただけることをお待ちしています。