「いつでもどこでも,自分の見たい情報をチェックしたい」。そんなワガママなニーズを満たしてくれそうなツールが登場した。Webアプリケーションのオフライン利用を可能にする「Google Gears」(ベータ版)である。今回は,このGoogle Gearsのセキュリティについて考えてみよう。

 Google Gearsを使うと,HTMLコードやJavaScriptをあらかじめローカル・ディスクにキャッシュし,ブラウザからこれを読み出すことで,オフラインでもWebアプリケーションを利用できるようになる。

 従来,Webアプリケーションは主にサーバー側で処理されていたが,Ajax(asynchronous JavaScript+XML)ブームなどにより,最近はクライアント側での処理の比重が大きくなってきた。ユーザーにとっての利便性を考えると,クライアントにWebアプリケーションの処理を移行することは容易に想像がつく。画面表示を高速化できる点,ネットワークに接続していない状態でアプリケーションを利用できる点など,Webアプリケーションをローカル環境で処理することにより生まれるメリットは大きい。

 実際,ブラウザをオフラインに対応させる動きはGoogle Gears以外にもある。「Firefox」や「The Dojo Offline Toolkit」などである。ただ,いずれもベータ版の域を出ていない。その理由の一つにはセキュリティ上の課題がありそうだ。

基本的なアクセス制御は実装済み

 元々,ブラウザのオフライン利用については,セキュリティ面の懸念事項がいくつかあった。例えば,ローカル・ディスクにデータをキャッシュする際には,保存したデータへのアクセス権限を考慮しなければならない。また,アプリケーションとアプリケーションが利用するデータ(GmailならGmailそのものとメール・データ)ではリスク・レベルが異なるため,そのための配慮も欠かせない。

 グーグルはGoogle Gearsに,こうした点を配慮した仕組みを盛り込んだ。ここで,仕組みを見ておこう。

 Google Gearsは,ローカル・サーバー,データベースなどから構成される。このうちローカル・サーバーはクライアント上で稼働するWebサーバー・ソフトで,Webアプリケーションが動作するURLをキャッシュする。WebブラウザからのHTTPリクエストをインターセプトし,キャッシュから読み出したコンテンツを応答として返す。もう一つのデータベースは,簡易版のリレーショナル・データベース管理システム「SQLite」を搭載。JavaScriptによりデータベースにSQLを発行する。

 ローカル・サーバーとSQLiteのフォルダは,写真1のように「C:¥Documents and Settings¥」配下のユーザーのアプリケーション・データ・フォルダとして作成される。これらは一般のファイルと同様に,パソコンにログインしているユーザーだけがアクセスできる。複数ユーザーが同一のパソコンを使う場合でも,ログイン名を分けていれば,ほかのユーザーからアプリケーション・データにアクセスされる恐れはない。

写真1●Google Gearsはローカル・ディスクにデータを保存する
写真1●Google Gearsはローカル・ディスクにデータを保存する
[画像のクリックで拡大表示]

「オフライン」は見かけだけ

 こう考えると,Google Gearsは安全な仕組みに見える。ネットワークから切り離された状態で利用していると考えれば,外部からの攻撃も受けないと考えるのが普通だ。

 しかし,必ずしもそうとは言い切れない。まずGoogle Gearsでは,データの問い合わせのインタフェースがSQLiteに依存する。SQLを利用できる環境があれば,データベースに蓄積されたデータには容易にアクセスできる(写真2)。データベースが自由に管理できるということは,クライアントにSQLインジェクション攻撃を仕掛けられる可能性があるということになる。

写真2●ローカル・ディスクのデータにはSQLでアクセスできる
写真2●ローカル・ディスクのデータにはSQLでアクセスできる
[画像のクリックで拡大表示]

 一方,オフラインという点では,Gearsはかなりグレーな状態である。現在のバージョンでは,複数のサイトのコンテンツをまとめてキャッシュすることはできない。指定したWebページとアプリケーション・データをローカル上で処理する仕組みであり,キャッシュしたページにリンクが張られている場合や,HTML中で指定されたJavaScriptが他のサーバーに設置されている場合は,バックグラウンドで該当するWebサイトにアクセスして差分を読み込む(写真3)。

写真3●ほかのサイトにあるJavaScriptは自動的に呼び出す
写真3●ほかのサイトにあるJavaScriptは自動的に呼び出す

 パソコンが物理的にネットワークに接続されている状態では外部からの攻撃対象になり得るし,あらかじめ外部に設置したJavaScriptマルウエアを参照するようにしておけば,従来通りの攻撃が成り立つことになる。オフライン機能を持たない場合に比べると,むしろ,簡易版とはいえサーバー機能が搭載されている分,クライアントに関する危険は膨らむ。ユーザーはオフラインだと思っているので効果は絶大だ。

キャッシュ常駐型マルウエアも

 これらのことから思いつく攻撃の手口は,JavaScriptを悪用したSQLiteへのクエリー発行だ。ローカル・サーバーが管理するコンテンツに悪質なJavaScriptを埋め込んで,不正な処理を実行させるのである。

 実際には,Google Gearsは,複数のサイトのコンテンツを一つのアプリとして取得する,いわゆるクロスドメインのアクセスを拒否する仕様になっていて,外部からローカル・サーバーに不正なスクリプトを埋め込むことは難しい。ただ,オフライン対応のWebアプリケーションにクロスサイト・スクリプティングのぜい弱性があれば,キャッシュされるコンテンツに不正なスクリプトを埋め込むことはできる。

 (1)メールなどを使ってユーザーを特定のサイトに誘導し,(2)オフライン用アプリとしてJavaScriptマルウエアをキャッシュさせるというように,段階的な仕掛けによって攻撃は成り立つ。こうすると,キャッシュにマルウエアが常駐し,ユーザーがアクセスするたびにマルウエアが稼働する。

 冒頭にも述べたが,Google Gearsはまだベータ版である。ブラウザのオフライン対応によってユーザーの利便性が高まることは間違いない。今後の改良に期待したい。


岩井 博樹(いわい・ひろき) ラックコンピュータセキュリティ研究所 所長
ラックのコンピュータセキュリティ研究所に勤務。IDS/IPS導入設計,コンサルティングなどに従事した後,同社のJapan Security Operation Center(JSOC)にて監視業務に携わる。現在は,セキュリティ技術の研究開発,フォレンジック業務を手掛ける。