こんにちは。リサーチエンジニアの丹田です。前回はInternet Explorerのセキュリティ機能「保護モード」のお話をしました。
Windows Vistaからの保護機能:保護モードと整合性レベル
http://blog.fourteenforty.jp/blog/2010/03/windows-vista-e.html
今回もウェブブラウザのセキュリティつながりということで、Google Chromeのお話をしたいと思います。ポイントは、Google ChromeはXPでもセキュアに動く、です。
■ プログラムの脆弱性はなくならない
前回にも触れたとおり、ウェブブラウザのセキュリティの確保はほとんどのPC利用者にとってとても大切です。しかし、ウェブブラウザは攻撃者から見たとき非常に脆弱性を悪用しやすいソフトウェアであるため、攻撃者が最初に脆弱性を見つけて悪用してしまう「ゼロデイ」が頻繁に発生しています。意識して見ると、Microsoftの定例外更新の対象がInternet Explorerであったり、Firefoxが毎月のように更新していたりすることに気付きます。
このことは、ウェブブラウザの脆弱性を開発段階で洗い出すのは難しいということを示しています。この事実に対して、Internet Explorerは保護モードを導入し、「攻撃されても被害を抑える」戦略をとったと言えそうです。
そしてこの戦略をさらに強力に実現したのがGoogle Chromeです。Google Chromeは2008年末に公開された後発のウェブブラウザです。複数のプロセスで構成するマルチプロセスアーキテクチャを持ち、サンドボックスと呼ばれる仕組みを使ってセキュリティを提供しています。そこで今回は、このサンドボックスと、サンドボックスに関連するGoogle Chromeの特徴を紹介してみたいと思います。
■ 危険性の高いコードを分離する
Google Chromeは、バッファオーバーフローなど致命的な脆弱性を生み出す可能性が高いと見込まれるコードを、別のプロセスとして分離しています。この結果、高い安定性と、サンドボックスによる強いセキュリティが実現できています。
プロセスを分離するマルチプロセスアーキテクチャは、Internet Explorer 8でも採用されました。Firefoxでも同様に、プラグインを別プロセスに分離する計画があることが告知されています。
・IE8 と Loosely-Coupled IE (LCIE)
http://msdn.microsoft.com/ja-jp/ie/cc787974.aspx
・Firefox の安定性が大幅に改善しているという調査結果が発表されました
http://mozilla.jp/blog/entry/5425/
Google Chromeは、タブ、エクステンション、プラグインひとつひとつまで単一のプロセスとして動作する点でやや異なります。これはとりわけ安定性に貢献します。
■ 分離したプロセスの権限を落とす
分離された危険性の高いコードは、極めて権限の抑えられたプロセスとして動作します。権限が抑えられ、できることが限られているため、攻撃者に制御を奪われても被害を最小限に抑えることができます。この権限を抑え、被害を最小化する仕組みが「サンドボックス」です。
もしWindows Vista以降をお使いでしたら、Google Chromeを起動して、Process Explorerから「Integrity」列を確認してみてください。Chrome.exeのうちいくつかが、整合性レベル「Low」で動作していることが確認できます。
これは、分離されたプロセスの権限が抑えられていることを示しています。前回お話したInternet Explorerの保護モードと同じ仕組みです。
■ 保護モード以上に厳しい制約を課す
Google Chromeのサンドボックスの面白いところは、整合性レベル以外にもさまざまな制約を課す点です。たとえば、子プロセスを生成することができません。クリップボードの読み書きが禁止されています。サンドボックスの外とウインドウメッセージをやり取りすることも許されていません。また、ファイルを読み取ることもできません。保護モードのInternet Explorerは、ファイルの読み取りは可能(書き込みは禁止)であるため、攻撃者の手に落ちた場合、情報漏えいを防ぐことができませんでした。
■ UAC無効でも、XPでも機能する
私はXPも頻繁に使っています そんな私ですから、この点は特に感心しています。前回も少し触れましたが、UACが無効の場合、Internet Explorerの保護モードは無効になります。またXPでは保護モードは使えません。
それに対して、Google Chromeのサンドボックスは、これらの状況にあっても変わりなく動作します。もちろんXPに整合性レベルはありませんが、XPだからといってサンドボックスの機能が損なわれることはありません。
■ なぜ?
端的にいえば、サンドボックスの実装は、保護モードで使われていた整合性レベルの機能に依存していません。ドキュメントを読むと分かるのですが、整合性レベルの調整はオマケのような扱いです。実装は古くからあるWindows APIを巧みに組み合わせたもので、サンドボックスのドキュメントには、この仕組み自体はWindows 2000から動作すると書かれています。
サンドボックスの実装は、具体的には以下のような仕組みが使われています。
•制限トークンの利用で各種カーネルオブジェクト(ファイルもここに含む)へのアクセスを制限
•デスクトップの変更でウインドウアクセスやウインドウメッセージの送受信を制限
•ジョブオブジェクトの制限機能でクリップボードへのアクセスなどを制限
疑わしい!と思った方や、実装に興味がある方は、ぜひドキュメントやソースコードをあたってみてください。なかなか面白い仕組みを学ぶことができると思います。
・The Chromium Projects > Design Documents > Sandbox
http://dev.chromium.org/developers/design-documents/sandbox
・The Security Architecture of the Chromium Browser
http://seclab.stanford.edu/websec/chromium/
・ソースツリー
http://src.chromium.org/viewvc/chrome/releases/
・Google Chrome の内部構造
http://code.google.com/intl/ja/events/developerday/2009/sessions.html
■ 余談
実は、Google Chrome 4.1では、フラッシュプレイヤーのようなプラグインは上記のサンドボックス機能の管理下にありません。つまりプラグインに脆弱性があり、プラグインプロセスの制御が攻撃者の手に渡った場合には保護されないことを意味します。
先ほどの画像を見てみましょう。整合性レベル「Medium」になっているChrome.exeうちの1つが「--type=plugin」になっています。これがプラグインプロセスです。
プラグインにサンドボックスが適用されないのは、プラグインの仕様上やむをえない措置だったようです。この問題に対してブラウザ利用者ができることは、プラグインを利用しないか、プラグインを確実にアップデートすることだけです。
この問題を解決するために、GoogleやMozilla、Adobeは共同でプラグインの新しいAPIを策定しています。
・Bringing improved support for Adobe Flash Player to Google Chrome
http://blog.chromium.org/2010/03/bringing-improved-support-for-adobe.html
次のバージョンとなるGoogle Chrome 5では、この新しいAPIを利用したプラグインがサンドボックスの管理下に入り、プラグイン経由の攻撃からも保護できるようになるかもしれませんね。
ではまた。
---
このブログ中における株式会社フォティーンフォティ技術研究所(以下FFR)の社員による発言やコメントは、FFRの正式な見解またはコメントではありません。このブログは、FFRおよびココログの倫理規定に即して運営されており、倫理規定に反する内容のトラックバックは、事前のお知らせなしに削除させていただく場合があります。予めご了承ください。