Site Isolation(サイト分離)の改善
2019年11月12日火曜日
この記事はサイト分離者、Alex Moshchuk、Łukasz Anforowicz による Chromium Blog の記事 "Recent Site Isolation improvements" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
2018 年 7 月、私たちは Chrome で Site Isolation をリリースしました。Site Isolation は、Spectre のようなサイドチャネル攻撃のリスクからパソコンのブラウザを保護する手法です。先日、このリリースのメリットについて取り上げた USENIX Security カンファレンス論文を発表しました。本日は、Chrome 77 でロールアウトした以下の改善についてお知らせします。
私たちは、Android のようなリソースに制約のある環境で、Site Isolation がユーザー エクスペリエンスに悪影響を及ぼさないようにしたいと考えました。そのため、すべてのサイトを分離する PC プラットフォームとは異なり、Android 版 Chrome の Site Isolation はスリム化され、保護対象のサイトを少なくしてオーバーヘッドを低く抑えています。具体的には、ユーザーがパスワードを使ってログインする重要なサイトでのみ、Site Isolation が有効になります。これにより、ユーザーが心配するプライベートなデータを扱うサイト(銀行やショッピングなど)を保護しつつ、そこまで重要でないサイトではプロセスの共有を許可しています。
Chrome がウェブサイトでのパスワードのやり取りを検出すると、次回以降そのサイトにアクセスしたときに Site Isolation で保護されるようになります。その結果、サイトは他のサイトから切り離され、専用のレンダラー プロセスでレンダリングされます。他のサイトに移動すると、タブのプロセスが切り替わります。また、クロスサイト iframe は別のプロセスで処理され、「プロセス外 iframe」となります。Chrome は端末のローカルに分離されたサイトのリストを保持しています。ユーザーが閲覧履歴などのサイトデータを削除すると、リストもクリアされます。また自衛策として、Chrome モバイル ユーザーが特に頻繁にパスワードを入力しているサイトに関する、クラウドソースから取得したリストも分離します。
Site Isolation の大部分は、舞台裏で行われるアーキテクチャの変更です。これによってユーザーやデベロッパーの表示や操作が変わるべきではありません。ただし、PC プラットフォームと同様に、Chrome が作成するプロセスの数が多くなるため、パフォーマンスとのトレードオフが発生します。プラスの面は、それぞれのレンダラー プロセスが小さく短命になり、内部的な衝突も少なくなります。しかし、実際のワークロードでは、合計約 3~5% のメモリのオーバーヘッドが発生します。私たちは、Chrome の速さと安全性を保つため、懸命にこの動作の最適化を続けています。
Chrome 77 では、十分な RAM(現在は 2 GB)を搭載した Android 端末ユーザーの 99%(残りの 1% は、パフォーマンスのモニタリングと改善のために保留)で、パスワードをトリガーとする Site Isolation が有効になっています。私たちはこの機能を他の端末にも広げる方法を検討していますが、自分の端末で完全な保護を実現したいユーザーは、chrome://flags/#enable-site-per-process から手動で Site Isolation をオプトインすることもできます。これにより、すべてのウェブサイトが分離されるようになりますが、メモリの消費量は増加します。
将来的には、Site Isolation によって保護すべきサイトを検出するために、他の手法も追加する予定です。たとえば、ユーザーのログインを必要とせずに、ウェブサイトの運営者が任意のサイトを Site Isolation にオプトインできるようにする作業を進めています。
たとえば、攻撃者が Chrome のレンダリング エンジンである Blink にメモリ破損バグがあることを発見し、それを悪用したとしましょう。このバグにより、Blink のセキュリティ チェックによる制約を受けることがなくなり、攻撃者はサンドボックス化されたレンダラー プロセス内で任意のネイティブ コードを実行できるかもしれません。しかし、Chrome のブラウザ プロセスはどのサイト用のレンダラー プロセスであるかを把握しているので、プロセス全体が受け取ることができる Cookie、パスワード、サイトデータを制限できます。そのため、攻撃者がクロスサイト データを盗むのははるかに難しくなります。
Chrome 77 の Site Isolation は、侵害されたレンダラー プロセスから以下のようなさまざまな種類のプライベートなデータを保護します。
Reviewed by Eiji Kitamura - Developer Relations Team
2018 年 7 月、私たちは Chrome で Site Isolation をリリースしました。Site Isolation は、Spectre のようなサイドチャネル攻撃のリスクからパソコンのブラウザを保護する手法です。先日、このリリースのメリットについて取り上げた USENIX Security カンファレンス論文を発表しました。本日は、Chrome 77 でロールアウトした以下の改善についてお知らせします。
- Chrome for Android で、ユーザーがパスワードを入力するサイトの分離が可能になりました。
- PC プラットフォームの Site Isolation は、サイドチャネル攻撃だけでなく、完全に侵害されたレンダラー プロセスからの攻撃に対する保護にも対応しました。
Android の Site Isolation
Chrome 77 では、Android ユーザーが Site Isolation とそれによるメリットを得られるようになりました。パソコンでの Site Isolation と同様に、このリリースでも OS のプロセスを活用して、攻撃者が他のウェブサイトからデータを盗むのを難しくしています。特に、この仕組みは Spectre のような CPU 脆弱性に対する保護に抜群の効果を発揮します。私たちは、Android のようなリソースに制約のある環境で、Site Isolation がユーザー エクスペリエンスに悪影響を及ぼさないようにしたいと考えました。そのため、すべてのサイトを分離する PC プラットフォームとは異なり、Android 版 Chrome の Site Isolation はスリム化され、保護対象のサイトを少なくしてオーバーヘッドを低く抑えています。具体的には、ユーザーがパスワードを使ってログインする重要なサイトでのみ、Site Isolation が有効になります。これにより、ユーザーが心配するプライベートなデータを扱うサイト(銀行やショッピングなど)を保護しつつ、そこまで重要でないサイトではプロセスの共有を許可しています。
Chrome がウェブサイトでのパスワードのやり取りを検出すると、次回以降そのサイトにアクセスしたときに Site Isolation で保護されるようになります。その結果、サイトは他のサイトから切り離され、専用のレンダラー プロセスでレンダリングされます。他のサイトに移動すると、タブのプロセスが切り替わります。また、クロスサイト iframe は別のプロセスで処理され、「プロセス外 iframe」となります。Chrome は端末のローカルに分離されたサイトのリストを保持しています。ユーザーが閲覧履歴などのサイトデータを削除すると、リストもクリアされます。また自衛策として、Chrome モバイル ユーザーが特に頻繁にパスワードを入力しているサイトに関する、クラウドソースから取得したリストも分離します。
Site Isolation の大部分は、舞台裏で行われるアーキテクチャの変更です。これによってユーザーやデベロッパーの表示や操作が変わるべきではありません。ただし、PC プラットフォームと同様に、Chrome が作成するプロセスの数が多くなるため、パフォーマンスとのトレードオフが発生します。プラスの面は、それぞれのレンダラー プロセスが小さく短命になり、内部的な衝突も少なくなります。しかし、実際のワークロードでは、合計約 3~5% のメモリのオーバーヘッドが発生します。私たちは、Chrome の速さと安全性を保つため、懸命にこの動作の最適化を続けています。
Chrome 77 では、十分な RAM(現在は 2 GB)を搭載した Android 端末ユーザーの 99%(残りの 1% は、パフォーマンスのモニタリングと改善のために保留)で、パスワードをトリガーとする Site Isolation が有効になっています。私たちはこの機能を他の端末にも広げる方法を検討していますが、自分の端末で完全な保護を実現したいユーザーは、chrome://flags/#enable-site-per-process から手動で Site Isolation をオプトインすることもできます。これにより、すべてのウェブサイトが分離されるようになりますが、メモリの消費量は増加します。
将来的には、Site Isolation によって保護すべきサイトを検出するために、他の手法も追加する予定です。たとえば、ユーザーのログインを必要とせずに、ウェブサイトの運営者が任意のサイトを Site Isolation にオプトインできるようにする作業を進めています。
侵害されたレンダラーの封じ込め
PC プラットフォームでは、Chrome 77 の Site Isolation がかなり強力な攻撃からの防御に貢献しています。Site Isolation の最初のリリースでは、特定のレンダラー プロセスから任意のデータを漏洩させる Spectre のような攻撃を対象としていました。現在の Site Isolation は、メモリ破損バグや Universal Cross-Site Scripting(UXSS)のロジックエラーなどのセキュリティ バグにより、レンダラー プロセスが完全に侵害されている状況で行われる激しい攻撃にも対処できます。たとえば、攻撃者が Chrome のレンダリング エンジンである Blink にメモリ破損バグがあることを発見し、それを悪用したとしましょう。このバグにより、Blink のセキュリティ チェックによる制約を受けることがなくなり、攻撃者はサンドボックス化されたレンダラー プロセス内で任意のネイティブ コードを実行できるかもしれません。しかし、Chrome のブラウザ プロセスはどのサイト用のレンダラー プロセスであるかを把握しているので、プロセス全体が受け取ることができる Cookie、パスワード、サイトデータを制限できます。そのため、攻撃者がクロスサイト データを盗むのははるかに難しくなります。
Chrome 77 の Site Isolation は、侵害されたレンダラー プロセスから以下のようなさまざまな種類のプライベートなデータを保護します。
- 認証: Cookie や保存されたパスワードには、対応するサイトに結び付けられたプロセスのみがアクセスできます。
- ネットワーク データ: Site Isolation はクロスオリジン読み込みブロックを使ってプロセスからプライベートなリソースタイプ(例: HTML、XML、JSON、PDF)をフィルタリングします。この点は、プロセスが Chrome のネットワーク スタックに対してオリジンを偽装しようとした場合でも変わりません。Cross-Origin-Resource-Policy ヘッダーによってラベル付けされているリソースも保護されます。
- 保存されたデータとパーミッション: レンダラー プロセスは、プロセスのサイトロックに基づき、保存されたデータ(例: localStorage)やパーミッション(例: マイク)にのみアクセスできます。
- クロスオリジン メッセージング: Chrome のブラウザ プロセスは、postMessage および BroadcastChannel メッセージのソースオリジンを検証できます。これにより、レンダラー プロセスによるメッセージ送信元の偽装を防ぐことができます。
- 前述の保護を Chrome for Android でも実現: これには、追加の作業を行って一部のサイトのみが分離される場合に対処することが必要です。
- CSRF に対する保護: 侵害されたレンダラーがリクエスト ヘッダー Sec-Fetch-Site および Origin を偽装するのを防ぐため、これらのヘッダーを検証できます。
- 保護対象となるデータの種類を追加: デフォルトでクロスオリジン読み込みブロックが保護するデータの種類を増やす方法を検討しています。
- 例外の削減: 保護の適用外となるケースを減らす作業を行っています。たとえば、新しいセキュリティ モデルにアップデートしていない一部の拡張機能は、現在もコンテンツのスクリプトから幅広いクロスサイト アクセスを行っています。私たちは、拡張機能の作成者と連携し、影響を受ける Chrome ユーザーの数を既に 14% から 2% にまで削減しました。さらに、その他の拡張機能のセキュリティの問題も厳格化しています。また、Flash には Site Isolation が適用されません。Flash は現在デフォルトで無効になっており、サポート終了パスの途上にあります。
Reviewed by Eiji Kitamura - Developer Relations Team