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 脅威モデル (L0)
高レベル Web 脅威モデルは、L0 における汎用 Web API モデルです。これは、Document / Origin Execution Context からブラウザー制御の Web API 仲介を区別しながら、ユーザーおよびリモート Web サイトまたはサービスとの交換を示します。このモデルは論理的であり、実装に依存しません。Chromium、Gecko、または WebKit のプロセス境界を主張するものではありません。
1.1.1. L0 要素辞書
| ID | 名前 | 種類 | 説明 |
|---|---|---|---|
| EE-01 | ユーザー | 外部エンティティ | ブラウザー入力またはナビゲーションの意図を提供し、レンダリングされた出力またはブラウザーによる仲介を受け取る人物。 |
| EE-02 | リモート Web サイト / サービス | 外部エンティティ | ページリソースおよび実行時レスポンスを提供し、アプリケーション要求を受け取るリモート Web プリンシパル。 |
| PO-01 | Web ブラウザー | プロセス | ユーザー操作を仲介し、Web API 要求およびその結果、イベント、またはエラーを処理する、ブラウザー制御の論理プロセス。 |
| PO-02 | Document / Origin Execution Context | プロセス | リモートリソースを消費し、実行時 Web 通信を実行し、Web API を呼び出す、読み込まれたページおよびオリジンにバインドされた実行コンテキスト。 |
| DF-01 | ユーザー入力 / ナビゲーション | データフロー | ブラウザー制御の処理に入る、ユーザーが提供したナビゲーションの意図、操作、またはブラウザー制御入力。 |
| DF-02 | レンダリング出力 / ブラウザー仲介 | データフロー | ブラウザー制御の処理からユーザーに提示されるレンダリング出力、ブラウザー UI、状態、または仲介。 |
| DF-03 | Web コンテンツ / レスポンスデータ | データフロー | リモート Web サイトまたはサービスからドキュメントコンテキストへ提供されるページリソース、レスポンスペイロード、および接続データ。 |
| DF-04 | 要求 / 送信データ | データフロー | ドキュメントコンテキストからリモート Web サイトまたはサービスへ送信される要求、送信ペイロード、および接続データ。 |
| DF-05 | Web API 要求 | データフロー | ドキュメントコンテキストからブラウザー制御の API 処理へ送信される汎用 Web API 呼び出し、オプション、引数、または制御要求。 |
| DF-06 | Web API 結果 / イベント / エラー | データフロー | ブラウザー制御の API 処理によってドキュメントコンテキストへ渡される汎用戻り値、Promise の決着、コールバック、イベント、状態、またはエラー。 |
| TB-01 | Web ユーザーエージェント境界 | 信頼境界 | ブラウザー制御の API 仲介およびドキュメント実行コンテキストを囲む、外側の論理的な Web ユーザーエージェント境界。 |
| TB-02 | Web コンテキスト分離境界 | 信頼境界 | Web オリジンおよびコンテキストの権限を分離する境界の抽象的な集合。下位レベルのモデルでは、オリジン、ブラウジングモード、ライフサイクル、サンドボックス、または実装による分離を区別する場合がある。 |
1.1.2. Web ブラウザー脅威モデルとの関係
高レベル Web 脅威モデルでは、ブラウザー内部のコンポーネントは表示対象外です。以下の Web ブラウザー脅威モデルでは、どの場所で決定が適用されるか、どのコンポーネントが状態を保持するか、どのように権限が仲介されるか、どのように信頼されないコンテンツが分離されるか、または Web API がネットワーク、ストレージ、グラフィックス、メディア、およびオペレーティングシステムの機能に到達する方法がレビューで依存する場合に、ブラウザーおよび Web コンテンツの役割を拡張します。
1.2. Webブラウザー脅威モデル
Webブラウザー脅威モデルは、現代のWebブラウザーにおける反復的なアーキテクチャ上の役割を概説する。
高レベル Web 脅威モデル (L0) のように、ブラウザー制御の Web API 仲介を単一の論理プロセスとして扱うのではなく、この抽象化は、現代のブラウザーが異なる権限、状態への異なるアクセス、および信頼されない入力への異なる露出を持つ複数のプロセス間で責任を分散する方法を捉えます。また、オリジンおよびサイトに基づく分離戦略を含む 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 | 基盤となるネットワークインフラストラクチャ | 外部エンティティ | 物理インフラストラクチャ、ネットワークプロトコル、ネットワークセグメント化、ローカルホスト。 |
| 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 ストレージ、IndexedDB、および関連するサイトデータを、ブラウザーアーキテクチャのその他の部分から分離する。 |
| B1.7 | サンドボックス化された特権コンテンツ実行境界 | 脅威境界 | 内部ページまたは拡張機能のためのサンドボックス化された特権実行コンテキストを、ブラウザーアーキテクチャのその他の部分から分離する。 |
| B1.8 | ローカルネットワーク境界 | 脅威境界 | ユーザーのデバイスをパブリックインターネットから分離する。 |
| B1.9 | Web 境界 | 脅威境界 | ユーザーエージェントを信頼されない Web リソースから分離する。 |
| B1.10 | Web オリジン境界 | 脅威境界 | 各 Web オリジンを相互に分離する。 |
1.2.5.3. プロセス
| ID | 名前 | 種類 | 説明 |
|---|---|---|---|
| P1 | ブラウザー / UI / Parent | プロセス | Chromium Browser プロセス、WebKit UI プロセス、Firefox Parent プロセス。特権ブラウザー UI、ナビゲーション、ウィンドウ管理、プロセス選択、ポリシー適用、権限仲介、ネットワークアクセス、およびプロファイルデータ、Cookie とパスワードデータベース、オペレーティングシステム機能などの機密ローカルリソースへの仲介を調整する。 |
| P2 | コンテンツ / Renderer / WebContent | プロセス | Chromium Renderer、WebKit WebContent、Firefox Content プロセスファミリー。HTML、CSS、フォント、画像、メディア、XML、SVG、プレーンテキストなどの Web 形式を解析およびレンダリングし、DOM、スクリプト、ワーカー、JavaScript エンジンを実行し、サンドボックス化およびオリジンまたはサイト分離の制約下で Web コンテンツに制限された Web API エントリーポイントを公開する。 |
| P3 | ネットワーク / Socket / Networking | プロセス | ネットワーク仲介の役割。Chromium では Network Service パターン、WebKit では Networking プロセス、Firefox では Socket プロセスおよび関連するブラウザー制御のネットワーク責務に対応する。ブラウザーによって仲介される HTTP(S)、ソケット、キャッシュ関連のネットワークアクセス、および任意のインターネット上の場所からのリソース要求を処理する。 |
| P4 | GPU / compositor / media helper(s) | プロセス | 分離される場合の GPU、コンポジター、コーデック、メディア、およびその他のヘルパー機能。レンダリングされたコンテンツを表示出力へ変換し、信頼されない入力または攻撃者によって制御された入力を処理する複雑なグラフィックスまたはメディア実装サーフェスを分離する。 |
| P5 | 特権拡張機能 / 内部コンテンツ | プロセス | 内部ページまたは拡張機能向けの、オプションのブラウザー管理による特権実行コンテキスト。ブラウザー拡張機能および、ブラウザーまたは Web コンテンツと対話し、機能を追加できる内部コンテンツを対象とし、インストールおよびユーザーまたはブラウザー設定に応じて昇格された権限またはオリジン範囲の権限を受け取る場合がある。 |
1.2.5.4. データストア
| ID | 名前 | 種類 | 説明 |
|---|---|---|---|
| S1 | プロファイル / セッション / ポリシーストア | データストア | ブラウザーによって制御される有効期間およびアクセス規則を持つ、設定、プロファイルデータ、閲覧履歴、セッション復元状態、保存された資格情報またはパスワードデータベース参照、およびブラウザー管理の構成。 |
| S2 | 権限 / ブラウザーメタデータ | データストア | Web コンテンツまたはブラウザー管理の特権コンテンツが強力な機能を有効化したり機密性の高い機能へアクセスしたりできるタイミングを決定するために使用される、サイト設定、許可、拡張機能の権限、およびブラウザー制御の権限メタデータ。 |
| S3 | Cookie + HTTP キャッシュ | データストア | ブラウザー管理の Cookie ジャーおよびキャッシュされたレスポンス。Cookie はセッション、パーソナライゼーション、および状態管理をサポートするために該当する HTTP リクエストとともに送信され、オリジン、サイト、プロファイル、またはパーティション化規則によってスコープ設定される場合がある。 |
| S4 | Web ストレージ / IndexedDB / service worker データ | データストア | localStorage、sessionStorage、IndexedDB、service worker データ、および関連するブラウザー管理ストレージメカニズムを含む、永続的およびセッションスコープのサイトデータ。通常はオリジンまたはパーティションをスコープとし、異なる有効期間および容量特性を持つ。 |
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. 付録:MITRE ATT&CK技法
MITRE ATT&CK Enterprise技法は、Webブラウザーが関与する攻撃を 分析する際の手掛かりとして使用できます。以下の一覧は網羅的なものではなく、この文書のためにレベル別に 分類されています。掲載されているからといって、ある技法がすべてのブラウザー アーキテクチャーまたはシナリオに適用されることを意味するものではありません。
5.1. Webレベル
-
T1087 アカウント探索
-
T1539 WebセッションCookieの窃取
-
T1059 コマンドおよびスクリプトインタープリター
-
T1550 代替認証情報の使用
-
T1595 アクティブスキャン
-
T1071 アプリケーション層プロトコル
-
T1110 総当たり攻撃
-
T1659 コンテンツインジェクション
-
T1491 改ざん
-
T1592 被害者ホスト情報の収集
-
T1596 公開技術データベースの検索
-
T1594 被害者所有Webサイトの検索
-
T1133 外部リモートサービス
-
T1484 ドメインまたはテナントポリシーの変更
-
T1189 ドライブバイ侵害
-
T1667 メール爆撃
-
T1114 メール収集
-
T1684.002 メールスプーフィング
-
T1499 エンドポイントサービス拒否
-
T1567 Webサービスを介したデータ持ち出し
-
T1190 公開アプリケーションの脆弱性悪用
-
T1212 認証情報アクセスのための脆弱性悪用
-
T1657 金銭窃取
-
T1187 強制認証
-
T1606 Web認証情報の偽造
-
T1684.001 なりすまし
-
T1201 パスワードポリシーの探索
-
T1566 フィッシング
-
T1598 情報収集を目的としたフィッシング
-
T1593 公開Webサイト/ドメインの検索
-
T1681 脅威ベンダーデータの検索
-
T1505 サーバーソフトウェアコンポーネント
-
T1528 アプリケーションアクセストークンの窃取
-
T1204 ユーザーによる実行
-
T1078 有効なアカウント
-
T1102 Webサービス
-
T1211 隠密化のための脆弱性悪用
-
T1203 クライアント実行のための脆弱性悪用
5.2. ネットワークレベル
-
T1557 中間者攻撃
-
T1071 アプリケーション層プロトコル
-
T1132 データエンコーディング
-
T1001 データ難読化
-
T1573 暗号化チャネル
-
T1041 C2チャネルを介したデータ持ち出し
-
T1048 代替プロトコルを介したデータ持ち出し
-
T1011 その他のネットワーク媒体を介したデータ持ち出し
-
T1008 フォールバックチャネル
-
T1592 被害者ホスト情報の収集
-
T1589 被害者の識別情報の収集
-
T1590 被害者ネットワーク情報の収集
-
T1591 被害者組織情報の収集
-
T1665 インフラストラクチャーの隠蔽
-
T1105 侵入ツールの転送
-
T1056 入力の取得
-
T1036 偽装
-
T1111 多要素認証の傍受
-
T1104 多段階チャネル
-
T1599 ネットワーク境界の橋渡し
-
T1498 ネットワークサービス拒否
-
T1046 ネットワークサービスの探索
-
T1040 ネットワークスニッフィング
-
T1095 非アプリケーション層プロトコル
-
T1571 非標準ポート
-
T1027 難読化されたファイルまたは情報
-
T1588 能力の取得
-
T1572 プロトコルトンネリング
-
T1090 プロキシ
-
T1563 リモートサービスセッションの乗っ取り
-
T1021 リモートサービス
-
T1018 リモートシステムの探索
-
T1496 リソースハイジャック
-
T1669 Wi-Fiネットワーク
-
T1565 データ操作
-
T1600 暗号化の弱体化
5.3. Webブラウザーレベル
-
T1559 プロセス間通信
-
T1176 ソフトウェア拡張機能
-
T1056 入力の取得
5.4. オリジンレベル
-
T1068 権限昇格のための脆弱性悪用
6. 謝辞
複数の方々がこの文書に貢献しました。編集者は、特にAnna Weine氏に感謝します。