HTML5の登場で変わる可能性が高いが、Webブラウザのセキュリティモデルは基本的に「Same origin policy」と呼ばれる「同じサイトからしかドキュメントの読み込みを許可しない」ポリシーで成り立っている。しかしこれはPCのローカルファイルとなると話が違ってくる。ローカルファイルに対しては「Same origin policy」は必ずしも有効になっておらず、ブラウザごとに対応はまちまちだ。このあたりの話がChromium Blog, Security in Depth: Local Web PagesにまとまっているためWebデベロッパは一度目を通しておきたい。
説明ではまず次のようにローカルファイルの閲覧に規制が設けられていない場合の脆弱パターンを説明してから、それぞれのブラウザの対応を紹介している。
- 攻撃者が作成したWebページデータを含んだメールを受信する
- ブラウザでローカルに保存されたWebページを開く
- Webページはhttps://mail.google.com/mail/をソースとしたiframeを作成する
- Gmailにログインしている場合はinboxのメッセージが読み込まれる
- JavaScriptでframes[0].document.documentElement.innerHTMLにアクセスしてメールデータを取得する
- ローカルWebページでtextareaに取得したデータを追加してPOST経由で攻撃者のWebサーバへ送信する
こうした想定されるセキュリティ上の懸念に対する各ブラウザの対応は次のとおり。
- Safari 3.2: ローカルWebページから任意のWebサイトにアクセス可能(ステップ5を許可)。ネット上のWebページからローカルファイルへのアクセスを困難にすることで対処(ステップ2は困難)
- IE7: Safari 3.2と同じ。加えてデフォルトでローカルWebページにおけるJavaScript実行を拒否(ステップ5は困難)。ただし設定次第では実行可能にもなる
- Opera 9.6: ローカルWebページからアクセスできるのをローカルファイルシステム上のファイルに限定(ステップ5は困難)
- Firefox 3: Opera 9.6と同じ。加えて読み込めるファイルを同じディレクトリ以下のファイルに限定
こうしたブラウザの対応状況を鑑み、Google Chromeでは次のポリシーを採用している。OperaのポリシーをベースにSafari/IEの特徴も取り込んだ形だ。
- Chrome: ローカルWebページからのアクセスをローカルファイルシステム上のファイルに限定(ステップ5は困難)。ネット上のWebページからローカルファイルへのアクセスは拒否(ステップ2は困難)。開発の利便性や現状を加味してローカルWebページにおけるJavaScriptの実行は許可
Chromをインストールして使うようなケースではほかのブラウザもインストールしてあることがほとんどだ。このためブラウザを組み合わせて巧みにそれぞれの制限をくぐり抜けて攻撃を実現する方法がある。このためChromeではダウンロードしたファイルにMark of the Webを追加したり、ファイルダウンロード時にユーザに確認を促すようにするといったように、ブラウザを組み合わせた場合でも可能な限り危険性を減らすようにする処理も実装されている。
今後はFirefox 3で実現されているディレクトリ以下へのアクセス限定機能やローカルWebページからネットへデータバックを不可能にする方法などの取り込みが検討されているという。さすがに後発のブラウザということもありChromeのセキュリティモデルはよく考えられているようだ。