1. 私たちは何を構築しているのか?
Webプラットフォームは、Webを可能にするオープンでロイヤリティフリーな技術の集合である。ユーザーは、 Webブラウザーやユーザーに代わって動作する別のエージェントなどのユーザーエージェントを通じてWebサイトとやり取りする。
Webサイトには、一連のファイル形式、すなわちフォント、画像、マルチメディアなどの受動的コンテンツと、 HTML、JavaScript、WebAssemblyなどの能動的コンテンツが含まれる。これらはサーバーからユーザーの デバイスへ送信され、Webブラウザーによって解釈される。受動的コンテンツはデコードされてレンダリングされる。 能動的コンテンツは、そのオリジンの権限で実行され、Webの主要な攻撃対象領域を構成する。この区別は 有用だが、絶対的ではない。たとえば、注入されたCSSも、セレクターのマッチングやリソース読み込みを用いて ページ状態を推測または漏えいする場合には、攻撃対象領域になり得る [xsleaks-css-injection]。
したがって、Webサイトは能動的な実行環境である。Webサーバーからのレスポンスには、実行可能な スクリプト、ユーザーインターフェイス定義、サードパーティリソースへの参照、ユーザーエージェントに対して ユーザー入力の読み取り、インターフェイスの更新、Web APIの呼び出し、ローカル状態の保存または取得、 基盤プラットフォームとのやり取り、リモートサービスとの通信を行わせる命令を含めることができる。これが、 この文脈においてWebブラウザーが重要な役割を担う理由である。Webブラウザーは、信頼されておらず ネットワーク越しにアクセスされるWebサイトからのコードを、ユーザーのデバイス上で実行する。
この複雑さのため、本書はWebについて単一で網羅的な脅威モデルを定義しようとはしない。Webは階層化され、 進化し続けるエコシステムであるため、単一のモデルは、開発およびレビュー作業を導くには抽象的すぎるか、 あるいは読みやすく有用であり続けるには詳細すぎるものになる。これはShostackの脅威モデリングにおける 実践的な枠組みに従うものである。モデルとは、何が構築されているのか、何がうまくいかなくなり得るのかを 推論するために用いる抽象化であり、異なる忠実度のレベルで異なるモデルが有用になり得る [shostack-threat-modeling]。したがって、本書は 関連する脅威モデルの集合として機能する。
1.1. 高レベルWeb脅威モデル
高レベルWeb脅威モデルは、本書で最も抽象度の高いモデルである。ユーザーエージェントを単一のプロセスとして扱い、 非常に高いレベルで推論するために、主要な要素、フロー、境界のみを記述する。
1.1.1. 要素辞書
| ID | 名前 | 型 | 説明 |
|---|---|---|---|
| E0 | ユーザー | 外部エンティティ | ユーザーエージェントを通じてWebとやり取りする人間のユーザー。 |
| E1 | リモートWebオリジン | 外部エンティティ | HTML、CSS、JavaScript、WebAssembly、メディア、API、IDエンドポイント、 その他のWebリソースを提供するリモートオリジン。 |
| E2 | ネットワークインフラストラクチャ | 外部エンティティ | リモートコンテンツを取得するために用いられるローカルネットワーク、インターネットルーティング、 名前解決、トランスポートプロトコル、その他のネットワークサービス。 |
| E3 | オペレーティングシステム / デバイス / プラットフォーム | 外部エンティティ | ファイルシステム、クリップボード、カメラ、マイク、GPU、センサー、認証器、 ハードウェア支援機能、およびWebプラットフォーム境界の外側にあるその他のプラットフォームサービス。 |
| P0 | ユーザーエージェント / Webブラウザー | プロセス | ユーザーに代わってWebコンテンツを取得、解釈、実行、仲介、保存、レンダリングし、 表示するブラウザーまたはその他のユーザーエージェント。 |
| S0 | ブラウザー管理状態 | データストア | Cookie、キャッシュ、ストレージ、権限、サイト設定、セッション状態、プロファイルデータ、 認証情報参照、およびユーザーエージェントによって制御または仲介されるその他の状態。 |
| F0 | ユーザー操作 | データフロー | ブラウザーUI、レンダリングされたコンテンツ、プロンプト、その他のユーザーエージェント面を通じた ユーザー入力および出力。 |
| F1 | Webリクエスト / レスポンス | データフロー | 通常HTTP(S)などのネットワークプロトコルを介して、ユーザーエージェントとリモートWebオリジンの間で 交換されるリクエストおよびレスポンス。 |
| F2 | サブリソースおよびサードパーティ読み込み | データフロー | Webコンテンツが、同一または異なるオリジンからスクリプト、フレーム、メディア、フォント、API、 その他のリソースを取得するようユーザーエージェントに行わせること。 |
| F3 | ブラウザー状態アクセス | データフロー | ユーザーエージェントとブラウザー管理状態の間の読み取りおよび書き込み。 |
| F4 | 仲介されたプラットフォームアクセス | データフロー | オペレーティングシステム、デバイス、センサー、認証器、ファイルシステム、 クリップボード、グラフィックス、メディア、その他のプラットフォーム機能への、ブラウザーにより 仲介されたアクセス。 |
1.1.2. 信頼境界
| ID | 名前 | 説明 |
|---|---|---|
| B0 | ユーザーエージェント境界 | ブラウザー制御の動作を、外部Webオリジン、ネットワーク、ユーザー、および基盤プラットフォームから分離する。 |
| B1 | Webオリジン境界 | 相互に信頼しないオリジン同士を分離する。 |
| B2 | ネットワーク境界 | ユーザーエージェントおよびローカル環境を、リモートネットワークインフラストラクチャおよび リモートサービスから分離する。 |
| B3 | ブラウザー状態境界 | ブラウザー管理状態をWebコンテンツおよび外部アクターから分離する。 |
| B4 | オペレーティングシステム / デバイス境界 | Webプラットフォームの仲介を、低レベルのプラットフォームサービスおよび機能から分離する。 |
1.1.3. Webブラウザー脅威モデルとの関係
高レベル脅威モデルは、意図的にほとんどのブラウザー内部構造を視野の外に置く。これにより、レビューの対象が Webプラットフォーム全体である場合、すなわちオリジンの役割、主要なアクター、ユーザー、Webコンテンツ、 ネットワーク、ブラウザー管理状態、基盤プラットフォームの間の信頼境界を扱う場合に有用になる。
設計またはレビューが、ある決定がどこで強制されるのか、どのブラウザーコンポーネントが状態を保持するのか、 権限がどのように仲介されるのか、信頼できないコンテンツがどのように隔離されるのか、あるいはWeb APIが オペレーティングシステムによって公開される機能にどのように到達するのかに依存する場合、そのレベルでは 十分でなくなる。そのような場合には、ブラウザーを開いて見る必要がある。以下のWebブラウザー脅威モデルは、 その目的のためにP0を展開する。
1.2. Webブラウザー脅威モデル
Webブラウザー脅威モデルは、現代のWebブラウザーにおける反復的なアーキテクチャ上の役割を概説する。
Minimalist Web Threat Modelのようにブラウザーを単一のコンポーネントとして扱うのではなく、この抽象化は、 現代のブラウザーが、異なる権限、状態への異なるアクセス、信頼できない入力への異なる露出を持つ複数の プロセスに責任を分散する方法を捉える。また、オリジンベースおよびサイトベースの隔離戦略を含めて、 ブラウザーがWebセキュリティモデルをどのように強制するか、外部Webサーバーからの入力を処理する際に 自身をどのように保護するかも捉える [threat-modeling-guide]。
これら二つの関心事は関連しているが、同一ではない。コンテンツプロセスが隔離されるのは、Webコンテンツが 信頼できないからだけではなく、ブラウザーが同一オリジン隔離、およびブラウザーとOS/プラットフォームの分離を 保持しなければならないからでもある。実際には、実装が同じプロセスアーキテクチャを用いて両方を支える場合でも、 それらは別個の信頼境界である。
各Webブラウザーにおいて、実装の詳細は異なる。それでも共通の構造が見えてくる。
1.2.1. 特権ブラウザープロセス
現代のブラウザーには、ブラウザーUI、ナビゲーション制御、プロセス管理、ポリシー強制、権限仲介、 機密性の高いローカルリソースへのアクセス仲介を担当する、高い権限を持つ制御コンポーネントが含まれる。 ChromiumはこれをBrowser processと呼ぶ。WebKitはUI processと呼ぶ。FirefoxはParent processと呼ぶ [chromium-multiprocess-architecture] [webkit2-architecture-overview] [firefox-process-model]。
このコンポーネントは、ローカルブラウザーアーキテクチャにおける主要な信頼アンカーとして扱うべきである。 ブラウザー管理ポリシーが一般に強制される場所であり、ユーザーに見える仲介が通常発生する場所でもある。 脅威モデリングの目的において、これは重要である。なぜなら、ある決定のセキュリティ上の影響は、その決定が どこで行われるかに一部依存するからである。特権ブラウザーコンポーネントで実行されるチェックは、 サンドボックス化されたコンテンツプロセスで実行されるチェックと同等ではない。
Webブラウザー脅威モデル図では、このプロセスを 「Browser / UI / Parent Process」と呼ぶ。
1.2.2. サンドボックス化されたWebコンテンツの実行とレンダリング
Webコンテンツは、ChromiumのRenderer processes、WebKitの WebContent processes、FirefoxのContent processesのようなプロセス内で 実行される。これらはそれぞれ、信頼できない入力の管理において異なる役割を持つ [chromium-multiprocess-architecture] [webkit2-architecture-overview] [firefox-process-model]。
これらの種類のプロセスは、信頼できないWebコンテンツにさらされる。そのため、信頼できない入力を解析、解釈、 計算することが想定される実行環境としてモデル化される。その価値は、侵害が不可能であると仮定することではなく、 侵害が発生した場合にその後の影響を制約することにある。これが、特権Webブラウザー仲介と Webコンテンツ実行の分離が、Webブラウザーモデルにおける中心的な信頼境界の一つである理由である。 実装はまた、オリジンベースまたはサイトベースの隔離戦略を用いることで、通常利用時または侵害後に、 関係のないWebコンテンツが干渉できないようにする場合がある。ただし、正確な隔離単位はブラウザー固有である [chromium-process-model-site-isolation] [webkit-site-isolation-notes] [firefox-process-model]。
Webブラウザー脅威モデル図では、このプロセスを 「Content / Renderer / WebContent Process」と呼ぶ。
1.2.3. ネットワークとストレージ
現代のWebブラウザーはまた、ネットワーキングおよび永続状態管理を分離するか、少なくとも仲介する。
Chromiumでは、この役割はNetwork Service、プロファイルごとの
NetworkContextオブジェクト、およびStoragePartitionと関連する。WebKitでは、
Networking processがネットワークアクセス、ディスクキャッシュ、およびWeb StorageやIndexedDBなどの
ブラウザー管理の構造化サイトデータを扱う。Firefoxでは、ネットワーキングと永続状態は異なる形で分散されるが、
それでも両者の間には区別が存在する [chromium-process-model-site-isolation] [webkit-storage-documentation] [firefox-process-model]。
この層は重要である。なぜなら、Cookie、キャッシュ、分割された状態、サイトデータ境界が強制される場所であることが 多いからである。仕様がフェッチ、認証情報、ストレージアクセス、レスポンス処理に影響する場合、この層と やり取りする可能性が高い。
Webブラウザー脅威モデル図では、これらをそれぞれ 「Network / Socket / Networking Process」および「Data Store」と呼ぶ。
1.2.4. グラフィックス、メディア、およびヘルパー
現代のWebブラウザーはまた、GPU、コーデック、その他のヘルパー機能を別プロセスへ分離する。これは、 メディアライブラリが一般的な攻撃対象領域であるためでもある。ChromiumはGPU processと 追加のヘルパープロセス群を分離する。FirefoxはGPU Process、RDD Process、GMP Process、Utility Process、および Network (Socket) Processを分離する。WebKitも関連機能のためのプロセスを分離する [inside-browser-part-1] [firefox-gecko-processes] [webkit2-architecture-overview]。
脅威モデリングの観点から、これらのヘルパープロセスは重要である。なぜなら、それらは信頼できないコンテンツと 複雑な実装面との境界に位置するからである。これは一般的な実装パターンでもある。信頼できない実行や クラッシュしやすい機能を特権制御経路から分離することで、不具合が発生した場合の影響を低減する。
Webブラウザー脅威モデル図では、このプロセスを 「GPU / Compositor / Media helper Process」と呼ぶ。
1.2.5. 要素辞書
1.2.5.1. 外部エンティティ
| ID | 名前 | 型 | 説明 |
|---|---|---|---|
| E1 | ユーザー | 外部エンティティ | ブラウザーUI、プロンプト、タブ、レンダリングされたコンテンツとやり取りする人間の操作者。 |
| E2 | リモートWebオリジン | 外部エンティティ | HTML、CSS、JS、メディア、API、IDエンドポイント、その他のWebリソースを提供するリモートサーバー。 |
| E3 | 基盤ネットワークインフラストラクチャ | 外部エンティティ | 物理インフラストラクチャ、ネットワークプロトコル、ネットワークセグメンテーション、localhost。 |
| E4 | オペレーティングシステム | 外部エンティティ | ブラウザー製品境界の外側にある、ファイルシステム、クリップボード、カメラ、マイク、GPUドライバー、 メディアコーデック、および関連するプラットフォームサービス。 |
1.2.5.2. 脅威境界
| ID | 名前 | 型 | 説明 |
|---|---|---|---|
| B1 | Webブラウザー境界 | 脅威境界 | ブラウザー制御の要素を外部エンティティおよびサービスから分離する。 |
| B1.1 | 特権ブラウザープロセス境界 | 脅威境界 | 特権ブラウザー仲介を、サンドボックス化されたコンテンツ実行から分離する。 |
| B1.2 | サンドボックス化されたコンテンツ実行およびレンダリング境界 | 脅威境界 | 低い権限と隔離制約の下でWebコンテンツを実行する責任を持つ要素を、互いに分離する。 |
| B1.3 | Webコンテンツ実行プロセス境界 | 脅威境界 | Webコンテンツの実行を担当するプロセスを分離する。 |
| B1.4 | ヘルパーサービス境界 | 脅威境界 | ネットワーキング、GPU、メディア、または関連するユーティリティ機能などのヘルパー役割を持つ要素を、 ブラウザーアーキテクチャの他の部分から分離する。 |
| B1.5 | プロファイルおよびポリシー状態境界 | 脅威境界 | ブラウザー管理のプロファイル、セッション、設定、および権限メタデータを、 ブラウザーアーキテクチャの他の部分から分離する。 |
| B1.6 | サイト状態境界 | 脅威境界 | ブラウザー管理のCookie、HTTPキャッシュ、Web Storage、IndexedDB、および関連するサイトデータを、 ブラウザーアーキテクチャの他の部分から分離する。 |
| B1.7 | サンドボックス化された特権コンテンツ実行境界 | 脅威境界 | 内部ページまたは拡張機能のためのサンドボックス化された特権実行コンテキストを、 ブラウザーアーキテクチャの他の部分から分離する。 |
| B1.8 | ローカルネットワーク境界 | 脅威境界 | ユーザーのデバイスを公共インターネットから分離する。 |
| B1.9 | Web境界 | 脅威境界 | ユーザーエージェントを信頼できないWebリソースから分離する。 |
| B1.10 | Webオリジン境界 | 脅威境界 | 各Webオリジンを互いに分離する。 |
1.2.5.3. プロセス
| ID | 名前 | 型 | 説明 |
|---|---|---|---|
| P1 | Browser / UI / Parent | プロセス | ChromiumのBrowser process、WebKitのUI process、FirefoxのParent process。特権ブラウザーUI、 ナビゲーション、ウィンドウ管理、プロセス選択、ポリシー強制、権限仲介、ネットワーキングアクセス、 およびプロファイルデータ、Cookieおよびパスワードデータベース、オペレーティングシステム機能などの 機密ローカルリソースへの仲介を調整する。 |
| P2 | Content / Renderer / WebContent | プロセス | ChromiumのRenderer、WebKitのWebContent、FirefoxのContent processファミリー。HTML、CSS、 フォント、画像、メディア、XML、SVG、プレーンテキストなどのWeb形式を解析してレンダリングし、 DOM、スクリプト、ワーカー、JavaScriptエンジンを実行し、サンドボックス化およびオリジンまたは サイト隔離の制約の下で、制約されたWeb APIエントリーポイントをWebコンテンツに公開する。 |
| P3 | Network / Socket / Networking | プロセス | ネットワーク仲介の役割。ChromiumではNetwork Serviceパターンに対応し、WebKitではNetworking processに対応し、FirefoxではSocket processおよび関連するブラウザー制御のネットワーキング責任に対応する。 ブラウザー仲介のHTTP(S)、ソケット、キャッシュ関連ネットワークアクセス、および任意のインターネット上の 場所からのリソース要求を扱う。 |
| P4 | GPU / compositor / media helper(s) | プロセス | 分離されている場合のGPU、コンポジター、コーデック、メディア、およびその他のヘルパー機能。 レンダリングされたコンテンツを表示出力に変換し、信頼できない、または攻撃者が制御する入力を処理する 複雑なグラフィックスまたはメディア実装面を隔離する。 |
| P5 | 特権拡張機能 / 内部コンテンツ | プロセス | 内部ページまたは拡張機能のための、任意のブラウザー管理の特権実行コンテキスト。 機能を追加し、ブラウザーまたはWebコンテンツとやり取りでき、インストールおよびユーザーまたは ブラウザー設定に応じて昇格された権限またはオリジンにスコープされた権限を受け取る場合がある ブラウザー拡張機能および内部コンテンツを対象とする。 |
1.2.5.4. データストア
| ID | 名前 | 型 | 説明 |
|---|---|---|---|
| S1 | プロファイル / セッション / ポリシーストア | データストア | 設定、プロファイルデータ、閲覧履歴、セッション復元状態、保存された認証情報または パスワードデータベース参照、およびブラウザーによって制御される有効期間とアクセス規則を持つ ブラウザー管理設定。 |
| S2 | 権限 / ブラウザーメタデータ | データストア | Webコンテンツまたはブラウザー管理の特権コンテンツが、強力な機能を有効化したり機密機能に アクセスしたりできるかどうかを決定するために用いられる、サイト設定、許可、拡張機能権限、 およびブラウザー制御の権限メタデータ。 |
| S3 | Cookie + HTTPキャッシュ | データストア | ブラウザー管理のCookie jarおよびキャッシュされたレスポンス。Cookieは、セッション、 パーソナライズ、状態管理を支援するために、該当するHTTPリクエストとともに送信され、 オリジン、サイト、プロファイル、または分割規則によってスコープされる場合がある。 |
| S4 | Web storage / IndexedDB / service-worker data | データストア | 永続的およびセッションスコープのサイトデータ。通常はオリジンまたは分割にスコープされ、 localStorage、sessionStorage、IndexedDB、service-worker data、および異なる有効期間と容量特性を 持つ関連するブラウザー管理ストレージ機構を含む。 |
1.2.5.5. フロー
| ID | 名前 | 型 | 説明 |
|---|---|---|---|
| F1 | ユーザー操作 | フロー | ユーザーと特権ブラウザーUIの間の入力および出力。 |
| F2 | ナビゲーション / フレーム制御 / IPC | フロー | 特権ブラウザーロジックとコンテンツ実行の間の制御フロー。 |
| F3 | サブリソースフェッチ / ネットワーク仲介 | フロー | コンテンツによって開始される、ブラウザー制御ネットワーキングへのアクセス経路。 |
| F4 | HTTPS / DNS / リモートデータ | フロー | リモートオリジンとのリクエストおよびレスポンスの交換。 |
| F5 | 表示 / メディア / コンポジット | フロー | グラフィックスおよびメディアヘルパーへのレンダリングおよび表示経路。 |
| F6 | プロファイル/セッションの読み書き | フロー | プロファイルスコープのブラウザー状態への特権アクセス経路。 |
| F7 | 権限 / ブラウザーポリシー | フロー | ブラウザー管理の権限およびポリシーの評価および強制経路。 |
| F8 | Cookie / キャッシュ仲介 | フロー | ブラウザー管理のCookieおよびキャッシュ状態へのアクセス経路。 |
| F9 | Webストレージ経路 | フロー | ブラウザー管理の永続サイトストレージへのアクセス経路。 |
| F10 | 仲介されたOSアクセス | フロー | ブラウザー制御コンポーネントからオペレーティングシステムまたはデバイスサービスへの仲介アクセス。 |
表記はW3C Threat Modeling Guideに従う。Eは外部エンティティ、 Pはプロセス、Fはフロー、Sはデータストア、 Cは脅威コンテナー、Bは脅威境界を表す [threat-modeling-guide]。
1.3. 前提と外部依存関係
システムモデルは、ブラウザーの直接制御の外側にあるが、ブラウザーのセキュリティ態勢に影響する 複数の外部システム、サービス、および責任に依存している。
-
オペレーティングシステム(OS): ブラウザーは、OSによって付与された権限、 すなわちユーザー権限と同等の権限で実行される。ブラウザーのセキュリティ目標は、タブ、Webサイト、 OSの間で正しく実現されなければならない。OSは、ブラウザーよりも直接的なネットワーク接続に対して より高いレベルのセキュリティを提供する。
-
ネットワーク/インターネット: ブラウザーの主要な機能は、インターネット上の任意の場所から 命令およびコンテンツを要求することに関わる。これはTCP/IPのような基盤ネットワークプロトコルに依存しており、 ブラウザーはそれをおそらく信頼している。インターネットの分散的な性質は、暗号化されていないデータが 誰かに読まれている可能性が高いことを意味する。
-
Webサーバーとそのバックエンド: これらは、ブラウザーにとってコンテンツ、 命令(スクリプト、HTML)、リソースの主要な供給源である。ブラウザーは制御を明け渡し、 サーバーによって提供されたコマンドを実行しなければならない。Webサーバーはブラウザーのセキュリティを 低下させることもできる。Webサイトは、データベース、外部ストレージ、企業データセンターとやり取りする。 データはブラウザーコンテキストとこれらのバックエンドシステムの間を流れる。
-
サードパーティ/その他のオリジン: 現代のWebアプリケーションは、しばしば他のオリジンからの リソースやスクリプトを含み、それらも実行されなければならない。Webサイトは広告、分析、 認証データベースについてサードパーティに依存する場合がある。
-
ネイティブアプリケーション: ユーザーのシステムにインストールされた他のアプリケーションは、 潜在的にブラウザー資産へ直接アクセスできる(例: ファイルシステムまたはメモリ検査経由)。
-
暗号技術: 暗号プロトコルの使用および相互作用は、特定の入力ではないものの、 考慮すべき脅威のカテゴリである。特に現在の歴史的時点においては、ポスト量子暗号への移行との関係で 重要である。
-
外部コンポーネント/システム: コンポーネントまたはシステムへのあらゆる外部依存は、 ブラウザーのセキュリティに影響を与える可能性がある。
1.4. エントリーポイントと攻撃対象領域
エントリーポイントは、システムモデル内のフローおよび境界に照らして読み取られる。それらは、攻撃者が システムとやり取りしたり、システムにデータを供給したりできるインターフェイスまたは機構である。 Webブラウザーの場合、これらには次が含まれる。
-
ブラウザーUI: ユーザー入力が提供されるユーザーインターフェイスそのもの。 Trusted UIも含まれる。
-
ネットワークインターフェイス: ブラウザーがネットワーク上で通信するために用いるポートおよび プロトコル(例: ソケット、RPC、HTTP/HTTPSポート)。
-
Webコンテンツ(HTML、CSS、フォント、スクリプト、メディア): Webサーバーから配信される 悪意あるコード、スクリプト、またはコンテンツ。ブラウザーはスクリプトを提示されると、信頼できないソースからの コードを実行する。攻撃者は、ブラウザーに悪意あるコンテンツをレンダリングさせることができる。 具体的な脅威は、具体的なファイル形式に結び付けられる。
-
ユーザー入力フィールド: ユーザーがデータを入力できる任意の領域であり、悪意をもって 操作される可能性がある(例: フォーム、URL)。
-
ブラウザー拡張機能: ブラウザーは、拡張機能がブラウザーおよびWebコンテンツと やり取りするためのインターフェイスを公開する。
-
Web API: 標準Web APIと、ブラウザーが公開する可能性のある新しい興味深いAPIの両方。
-
基盤プラットフォーム: オリジンが基盤プラットフォームへデータを送信できるようにする機能。
1.5. セキュリティ特性、資産、および不変条件
Webブラウザー脅威モデルを考慮する際に保護する必要があるセキュリティ関連の状態、リソース、および特性は、 多様であり、ユーザーのセキュリティとプライバシーにとって重要である。
-
ユーザーデータ: 一般的なユーザーデータ、機密データ、および個人識別情報。
-
ユーザーデータプライバシー: 監視、相関、識別から、ユーザーが自身の私的な情報および 活動を制御し保護する能力。これには、透明性または制御なしに、閲覧セッション内および閲覧セッション間で 識別または相関を行うことを避けることが含まれる。
-
ユーザー認証情報: ログイン情報、ユーザー名、パスワード。
-
ユーザーCookieおよびセッション情報: Cookie、セッションID、セッション状態に保存されるデータ。 これらは訪問をまたいでユーザーを認識するために用いられ得る。
-
ユーザーデバイス/コンピューター: ユーザーのマシンおよびそのリソース。ユーザーの ファイルシステムの機密性および完全性を含む。
-
ローカルストレージ: Cookie、localStorage、indexedDB、キャッシュ、履歴、パスワードを含む、 ブラウザーによってローカルに保存されるデータ。
-
ユーザー閲覧履歴: 訪問したサイトに関する情報。
-
ユーザー環境情報: オペレーティングシステム構成、ブラウザー構成、ハードウェア機能。
-
ユーザーの活動と関心: 購買嗜好、個人的特徴、および過去の活動。
-
保護されたリソース: ユーザーがアクセスできるが、攻撃者によってアクセスされるべきではない あらゆるリソース。
-
プライベートネットワークリソース: ブラウザーがユーザーの明示的な要求なしにアクセスできる 異なるネットワークリソース。
-
認証情報および暗号鍵: ブラウザーは暗号化および署名のための公開鍵および秘密鍵を管理する。
-
Webサイト上の機密情報: Webサイトに表示される、またはWebサイトでアクセス可能なデータ。
以下の特性および不変条件は、脅威分析のための手がかりとして用いられる。
-
相互に信頼しないオリジンは、プラットフォームが明示的で制御された通信経路を定義しない限り、隔離されたままである。
-
Webコンテンツは、ブラウザーにより仲介された機能を通じる場合を除き、オペレーティングシステムの権限を 直接行使できない。
-
ブラウザーにより仲介される権限は、ブラウザー制御のユーザー仲介、ポリシー、または設定を通じて付与される。
-
ブラウザー管理状態は、関連するオリジン、サイト、プロファイル、分割、または権限境界に従ってスコープされる。
-
ブラウザー仲介が必要な場合、セキュリティ上機密なユーザーの意図は、Web制御のUIだけから推測されない。
-
ネットワーク、ストレージ、レンダリング、およびオペレーティングシステムアクセス経路は、システムモデルに 示された境界を保持する。
2. 何が問題になり得るか?
2.1. 脅威分析手法
この脅威モデルは、システムモデル内の層、要素、フロー、ストア、境界を反復的にたどることで Webプラットフォームを分析する。モデルの各関連部分について、分析は、どの特性が維持されることが期待されるか、 何がその特性を破り得るか、誰が影響を受け得るか、どのような害が生じ得るかを問う。脅威源および 高レベルの脅威ファミリーは手がかりとして用いられるが、分析は上記のモデルに基づいている。
2.2. 脅威源
-
ブラウザー拡張機能: ブラウザー拡張機能は有用である一方、多数のセキュリティ脆弱性を 持ち込む。悪意あるアクターは、フィッシング、キーロギング、スパイ行為、データ窃取、セッションハイジャックのような 高度な攻撃にそれらを悪用する。特定のオリジンにアクセスする権限を得るには、それらがインストールされ、 設定されている必要があり、これにより攻撃の複雑さが増す。
-
アプリケーション/Webサイト: Webサイトは侵害され、悪意あるものになり得る。同じWebサイト上の ユーザーセッションを侵害するための攻撃(例: Cookieの窃取、または任意のリクエストの生成 - Cross Site Request Forgery - CSRF、UI Redressing/Clickjacking)、同一オリジンを迂回して異なるWebサイトから 情報を得る攻撃(すなわちCross-Site Leaks - XS Leaks)、またはブラウザー自体を侵害する攻撃(例: ブラウザープロセス内で任意のコードを 実行して、ブラウザー内のデータの制御を得たりユーザーデバイスを侵害したりする)など、さまざまな攻撃が 行われ得る。攻撃者は既存のブラウザー機能を悪用する。
2.3. 高レベル脅威インデックス
これはWebプラットフォーム脅威モデルにとって顕著な脅威ファミリーのインデックスであり、網羅的な一覧ではない。
-
追跡/プライバシー喪失: フィンガープリンティングは、ユーザーの知識または同意なしに ユーザーを識別する方法である。フィンガープリンティングはプライバシーとセキュリティの両方に関わり、 二重の意義を持つ。一方では、攻撃者がユーザーを一意に識別するために用いられ得る(通常はプライバシーに 関連するシナリオ)。すなわち、しばしばユーザーの知識または同意なしに、異なるサイトをまたいで ユーザープロファイルまたは履歴を作成できるようにする。他方では、デバイスの種類を識別するために 用いられ得る(通常はセキュリティに関連するシナリオ。たとえば、その後のデバイス侵害のため)。 仕様によって公開されるデータ、とりわけ基盤プラットフォームに関する情報や永続する状態は、 フィンガープリンティングに寄与し得る。一部のAPIはフィンガープリンティング面を追加する可能性がある。
3. それについて何をするのか?
3.1. セキュリティ機能と制御
Webブラウザーは、先に特定された特性および不変条件を保持するのに役立つ、さまざまなセキュリティ機能および 保護機構を採用している。
-
サンドボックス化: サンドボックス化は、レンダリングエンジンのようなコンポーネントを 閉じ込め、オペレーティングシステムおよびユーザーファイルへのアクセスを制限するための主要な機構である。 OS権限とサブプロセス権限の間の障壁として機能する。
-
同一オリジンポリシー(SOP): あるオリジンから読み込まれた文書またはスクリプトが、 別のオリジンのリソースとどのようにやり取りできるかを制限する、基本的なセキュリティ制御。
-
コンテンツセキュリティポリシー(CSP): どの動的リソースを読み込めるかを指定することで、 XSS、クリックジャッキング、その他のコード注入攻撃を防ぐためのセキュリティ標準。
-
HTTPS/SSL/TLS: ブラウザーとWebサーバーの間で安全かつ暗号化された通信を行うための プロトコルであり、転送中のデータ完全性および機密性を保証する。HTTP Strict Transport Security (HSTS)は関連している。
-
入力検証と出力エンコーディング: XSSのような注入攻撃を防ぐために、ユーザーが提供した データを扱ううえで重要な実践。
-
セキュリティヘッダー: コンテンツを安全に扱う方法をブラウザーに指示するHTTPヘッダー。
-
フィッシング対策およびマルウェア対策: Safe Browsingのような機能は、悪意あるWebサイトについて ユーザーに警告する。
-
混在コンテンツの処理: 安全な(HTTPS)ページが安全でない(HTTP)リソースを読み込む場合に、 ブラウザーがそれをどのように扱うか。
-
レンダラー隔離: レンダリングエンジンのような複雑で誤りを起こしやすいコンポーネントを、 ブラウザーカーネルから分離されたサンドボックス化プロセスまたは保護ドメインに配置するアーキテクチャ。 ブラウザーカーネルは、機密性の高いOS、ネットワーク、ストレージのやり取りを扱う。
-
プロセス間通信(IPC): 隔離されたブラウザーコンポーネント(例: カーネルとレンダラー)の間の 通信のための安全なチャネル。
-
ダウンロードマネージャー: ファイルダウンロードを扱うコンポーネントであり、 セキュリティチェックを含む場合がある。
-
データ最小化とプライバシー設定: 識別につながる可能性のある情報の露出を減らすための 設計原則および構成。
-
Trusted UI: 機密性の高いユーザー操作が、Webコンテンツによって容易に偽装または操作できない ブラウザーインターフェイス内で行われるようにすること。
-
Permission API: 強力な機能を有効化する前に、明示的なユーザー権限を求めること。
-
一時的な有効化: ユーザーが最近ボタンを押した、マウスを動かした、メニューを使用した、 またはその他のユーザー操作を行ったことを示すゲート、すなわちウィンドウ状態である。Web APIが ユーザー操作によってトリガーされた場合にのみ機能できることを保証する仕組みとして用いられることがある。 たとえば、スクリプトは一時的な有効化を必要とするポップアップを任意に起動できない。UI要素の イベントハンドラーからトリガーされなければならない。
4. 十分な仕事ができたか?
5. 謝辞
複数の個人が本書に貢献した。編集者は特にAnna Weineに感謝する。