Chromium Chronicle #5: サンドボックス外のコーディング

エピソード 5: Ade、カリフォルニア州マウンテンビュー(2019 年 8 月)
前のエピソード

Chrome は複数のプロセスに分割されています。一部はサンドボックス化されているため、システムやユーザー アカウントへのアクセスが制限されています。サンドボックス化されたプロセスでは、悪意のあるコードの実行を許可するバグはそれほど深刻ではありません。

ブラウザ プロセスにはサンドボックスがないため、バグによって悪意のあるコードにデバイス全体へのフルアクセス権が付与される可能性があります。何か違うことをしますか?他のプロセスはどうでしょうか?

サンドボックスの図

すべてのコードにバグがある。ブラウザのプロセスでは、これらのバグにより、悪意のあるコードによるプログラムのインストール、ユーザーデータの盗用、パソコン設定の調整、すべてのブラウザタブのコンテンツへのアクセス、ログインデータなどが可能になります。

他のプロセスでは、OS へのアクセスはプラットフォーム固有の制限によって制限されます。詳しくは、Chrome のサンドボックス実装ガイドをご覧ください。

次のようなよくある誤りに注意してください。

2 の法則

  • ブラウザ プロセスで C++ を使用して信頼できないデータを解析または解釈しないでください。
  • レンダラが表現すると主張するオリジンを信頼しない。ブラウザの RenderFrameHost を使用すると、現在のオリジンを安全に取得できます。


推奨事項

代わりに、次のベスト プラクティスに従ってください。

  • コードがブラウザ プロセス内にある場合は特に留意してください。
  • 他のプロセスの IPC をすべて検証します。他のすべてのプロセスがすでに侵害され、ユーザーを欺いているとします。
  • レンダラやユーティリティ プロセス、またはその他のサンドボックス プロセスで処理を行う。また、JavaScript などのメモリセーフな言語を使用することが理想的です(セキュリティ バグの 50% 以上を解決します)。

長年にわたり、Google はブラウザ プロセスでネットワーク スタック(HTTP、DNS、QUIC など)を実行しており、これが重大な脆弱性につながりました。一部のプラットフォームでは、ネットワーキングに独自のプロセスがあり、サンドボックスも用意されています。

参考情報

  • Chromium の 2 の法則: 安全でないデータ、安全でないコード、安全でないプロセスの 2 つ以下。
  • IPC データの検証: レンダラ プロセスからの IPC に Fib や不実表示がいっぱいにならないようにするためのガイド。