Chromium - News and developments from the open source browser project

Google Chromeではサンドボックスが採用されセキュリティ上のリスクを軽減しているというが、実際にどういった仕組みをサンドボックスと呼んでいるのだろうか。Google, Software Engineer, Nicolas Sylvain氏がA new approach to browser security: the Google Chrome Sandboxにおいて概要を説明している。

Google Chromeをセキュアなブラウザに仕上げるというのは開発チームがもっとも力を注いでいる部分だ。しかしながらWebブラウザクラスのプロダクトになってくるとコードの完璧さを追い求めてセキュリティを確保することは実際問題として難しくなってくる。しかも絶えず信用ならないデータを相手にしてレンダリングやJavaScriptの実行をおこなうというWebブラウザ特有の状況が一層安全性の実現を難しいものにしている。このためコードの完璧さに信頼性を求めるモデルから、問題が発生して場合でも影響が他に飛び火しない構造をベースにしようというのがGoogle Chromeの発想だ。

これを実現する要がマルチプロセスアーキテクチャであることはこれまで何度も説明されてきた(マルチプロセスアーキテクチャはシンプルで効果的だがメモリを大量に消費する問題を構造的に抱えていることも説明されている)。どうもGoogle ChromeではマルチプロセスアーキテクチャでレンダリングエンジンやJavaScriptエンジンをそれぞれシステムプロセスとして分離することと、プロセスごとにリソースへのアクセスに規制を設けることをサンドボックスと呼んでいるようだ。

リソースへのアクセス制御はWindowsの提供している機能に依存している。Windowsではプロセスはアクセストークンと呼ばれるプロセス情報やグループ情報、特権情報などを含んだデータを持っている。OSはこのトークンの情報をチェックしてリソースへのアクセスを許可したり拒否したりする。Google Chromeではまず何の特権もないトークンを生成してから新しくプロセスを生成し、次にプロセスのクラスに応じた特権を付与して動作を開始させる。

ただしWindowsではキーボード、マウス、スクリーン、ユーザオブジェクト、アイコン、ウィンドウなどのリソースはこのアクセス制限の対象になっていない。このためChromeではさらにJob Objectsとログインスクリーンのような別のデスクトップも併用することでアクセス規制を実施している。これがサンドボックスとアクセス制御だ。

このようにマルチプロセスアーキテクチャの発想や構造はシンプルなもので、Google Chromeに限らずほかのプロダクトにも適用できる内容になっている。アクセス制御もOSの提供している機能をそのまま使うなど、特徴的なことはなにもしていない。ただしわかりやすい半面、FAT32であるといったようにこのセキュリティモデルに対応していないリソースへのアクセスは規制できないし、ベンダやユーザの設定ミスで発生した脆弱性を防ぐことはできない。