TL

ブラウザのマルチプロセス・サンドボックスアーキテクチャ

なぜタブが1つ落ちても巻き込まれず、悪意あるサイトに端末を乗っ取られにくいのかが分かる。Chrome のプロセス分離・Site Isolation・サンドボックス設計を原理から解説。

応用ブラウザセキュリティChromeプロセスサンドボックス最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.Chrome はブラウザ(特権)・レンダラ(各サイト)・GPU・ユーティリティの複数プロセスに役割を分け、レンダラを OS サンドボックスへ閉じ込める。1タブのクラッシュや脆弱性が全体へ波及しない。
  • 2.Site Isolation は同一サイト(eTLD+1)ごとに専用レンダラプロセスを割り当て、別オリジンの応答をレンダラのメモリに載せない(CORB/ORB)。Spectre のようなサイドチャネルでも別サイトのデータを読めないようにする防御線。
  • 3.サンドボックス化されたレンダラは OS リソースへ直接触れず、ファイル・ネットワーク・描画はすべて特権側へ IPC で依頼する。攻撃者はレンダラ突破に加えてサンドボックス脱出という二段目の壁を越える必要がある。

なぜブラウザは複数プロセスなのか

ブラウザは「信頼できない他人のコード」を常時実行する、特殊なアプリケーションです。任意のサイトの HTML・CSS・JavaScript・WebAssembly を解釈・実行し、しかもそれらは攻撃者が書いたものかもしれません。レンダリングエンジン(Blink)や JavaScript エンジン(V8)はC++で書かれた巨大なコードであり、メモリ安全性のバグはゼロにできません。そこで Chrome は**「いずれ攻略される」前提**で設計されています。鍵は2つです。

  • 権限分離(privilege separation):信頼できないコードを動かす部分(レンダラ)から、強い権限(ファイル・ネットワーク・デバイス)を取り上げる。
  • 障害分離(fault isolation):1つの部品の異常を、その部品の中に封じ込め、ブラウザ全体やほかのサイトへ波及させない。

この2つを満たすために、Chrome は1つの巨大プロセスではなく、役割の違う複数のOSプロセスに分割されています。プロセスはOSが提供する最も強い隔離境界——別々の仮想アドレス空間と権限——だからです。

プロセスの役割分担

Chrome の代表的なプロセスは次の通りです。タスクマネージャ(Chrome の Shift+Esc)で実際の内訳を確認できます。

プロセス権限担当信頼するコンテンツ
ブラウザ(Browser)高(特権)UI・タブ管理・ネットワーク・ファイル・各プロセス統括自前コードのみ
レンダラ(Renderer)低(サンドボックス)HTML/CSS パース・レイアウト・JS 実行(Blink + V8)信頼しない(サイトのコード)
GPU中(限定サンドボックス)全プロセスの描画コマンドを集約し GPU で合成命令は受けるがコードは実行しない
ユーティリティ(Utility)低〜中(用途別サンドボックス)音声・データ復号・ネットワークサービス等の個別機能用途による

中核はブラウザプロセスとレンダラプロセスの非対称性です。ブラウザプロセスはユーザーの代理として強い権限を持ちますが、サイトのコードを直接は実行しません。レンダラプロセスはサイトのコードを実行しますが、強い権限を持ちません。両者はプロセス間通信(IPC)、Chrome では Mojo と呼ばれるメッセージ機構でやり取りします。レンダラが「このファイルを読みたい」「この URL を取得したい」と思っても、自分ではできず、ブラウザプロセスへ IPC で依頼するしかありません。ブラウザプロセスは依頼を検証してから実行する、いわばリファレンスモニタとして働きます。

“site” と “origin” は別概念

プロセス割り当ての単位は多くの場合サイトで、これは「スキーム + eTLD+1(実効トップレベルドメイン+1ラベル)」です。https://a.example.comhttps://b.example.com同じサイト(example.com)。一方 オリジンは「スキーム + ホスト + ポート」でより細かく、a.example.comb.example.com別オリジンです。プロセス分離は既定でサイト単位、同一オリジンポリシーはオリジン単位、という粒度の違いを押さえておくと混乱しません。

Site Isolation:サイトごとに別プロセス

初期の Chrome はタブ単位でプロセスを分けていましたが、1つのタブが iframe で複数サイトを埋め込むと、別サイトのコンテンツが同じレンダラプロセスに同居してしまいます。同一プロセス内に同居すると、メモリ上に別サイトのデータが載りうる——これが後述する Spectre の文脈で致命的になります。

Site Isolation は、ページ本体と各 iframe をそれぞれの所属サイトのレンダラプロセスへ分ける仕組みです。a.com のページが b.com の iframe を含むと、b.com の iframe は別プロセス(アウトオブプロセス iframe、OOPIF)でレンダリングされます。これにより、あるサイトのコードが触れるメモリにはそのサイトのデータしか存在しない状態を、OSのアドレス空間分離によって物理的に保証します。

さらにネットワーク応答の段階でも防御します。レンダラが b.com のデータを必要としない場面で b.com の機微な応答(例えば JSON や HTML)を受け取ろうとした場合、ブラウザプロセス側でそのバイト列をレンダラのメモリに渡さないようにします。これが CORB(Cross-Origin Read Blocking)、現在の後継が ORB(Opaque Response Blocking) です。クロスオリジンで正当に読めるのは画像・スクリプト・スタイルなど限られた型だけなので、機微なデータ型はそもそもレンダラへ載せない、という発想です。クロスオリジンの読み取り可否のルールは CORS と地続きの世界です。

Site Isolation が効くと何が変わるか

Site Isolation が有効だと、あるサイトのレンダラが完全に乗っ取られても、攻撃者がそのレンダラのメモリから盗めるのは同じサイトのデータだけです。別オリジンの Cookie や別サイトのページ内容は、そもそも別プロセスにあり、同一プロセスのメモリには載っていません。CSRF や XSS とは別レイヤーの、メモリ読み出しに対する構造的な防御線になります。

サンドボックス:レンダラから権限を奪う

レンダラプロセスは「いつか攻略されるコード」を実行する場所なので、最初から無力化しておきます。これがサンドボックスです。具体的には、OSのセキュリティ機構を使って、レンダラプロセスに対し以下を禁じます。

  • 任意のファイルの読み書き(ファイルシステムへの直接アクセスを遮断)
  • 任意の宛先へのネットワーク接続(ネットワークサービス経由のみ)
  • 画面への直接描画やデバイス操作
  • 新しいプロセスの起動や、ほかのプロセスへの干渉

実装はOSごとに異なります。Windows ではジョブオブジェクト・制限付きトークン・別デスクトップ・AppContainer などを組み合わせ、Linux では namespace と seccomp-bpf(許可するシステムコールをホワイトリスト化)、macOS では Seatbelt ベースのサンドボックスプロファイルを使います。

レンダラがやりたいこと          実際の経路
------------------------------  --------------------------------
fetch("https://...")        →   IPC → ブラウザ(ネットワークサービス)が代行
ローカル画像を表示          →   IPC → ブラウザがファイルを開いて中身を渡す
canvas / WebGL を描画       →   IPC → GPU プロセスがコマンドを実行
Cookie を読む               →   IPC → ブラウザが同一オリジンポリシーを検証して返す

ポイントは、禁止された操作はすべて IPC でブラウザプロセスに肩代わりしてもらう点です。そしてブラウザプロセスは依頼ごとに正当性(オリジン、権限、サイズなど)を検証します。攻撃者がレンダラ内で任意コード実行(RCE)に成功しても、できるのは「サンドボックス内でできること」だけ。端末を本当に支配するには、さらにサンドボックス脱出(sandbox escape)——OSカーネルの脆弱性や IPC の検証漏れの悪用——という二段目の壁を越えねばなりません。重大な攻撃は通常「レンダラ RCE + サンドボックス脱出」の**連鎖(チェーン)**として組み立てられます。

GPU プロセスはなぜ別か

GPU ドライバは歴史的にバグが多く、しかも GPU はカーネルに近い強い権限で動きます。全レンダラに直接 GPU を触らせると攻撃面が広がるため、描画コマンドを1つの GPU プロセスへ集約し、そこだけがドライバと対話します。GPU プロセスもサンドボックス化されますが、ドライバとの対話が必要なぶんレンダラより制約は緩く、その分だけ高価値の標的になります。

Spectre とサイトレベル分離の必然性

なぜ「同一プロセスにさえいなければ安全」と言い切るのか。背景に Spectre(2018) があります。Spectre は CPU の投機的実行を悪用するサイドチャネル攻撃で、本来アクセスできないメモリの内容を、キャッシュのタイミング差として間接的に読み出すものです。

決定的なのは、Spectre がソフトウェアのメモリ保護を越えて、同一アドレス空間内のデータを読めてしまう点です。つまり、別サイトのデータが同じレンダラプロセスのメモリに載っていれば、JavaScript からそれを盗み見る現実的な手段が存在します。配列の境界チェックや言語レベルのサンドボックス(V8 のヒープ分離など)は、投機実行の前では完全な壁になりません。

ここから導かれる設計判断が明快です。「同一プロセスのメモリに、別サイトの機微なデータを最初から置かない」。これこそが Site Isolation と CORB/ORB を既定で全面有効化した根拠です。緩和策(投機の抑制、SharedArrayBuffer の制限、高精度タイマーの粒度低下など)も併用されますが、それらは補助線にすぎません。本丸の防御はプロセス境界によるデータの物理的分離である、という割り切りが Chrome のアーキテクチャを貫いています。

高精度タイマーが絞られた理由

Spectre はメモリ内容をタイミング差へ変換して読み出すため、高精度な時計があるほど成功率が上がります。対策として performance.now() の分解能を粗くし、SharedArrayBufferクロスオリジン分離(COOP/COEP 設定)された文脈に限定しました。共有メモリ + ビジーループは事実上の高精度タイマーを作れてしまうからです。これらの制約は、Spectre 対策がブラウザの API 設計そのものを変えた具体例です。

トレードオフと運用

プロセス分割はタダではありません。各プロセスは独自のメモリ常駐(V8 のヒープ、Blink のオブジェクト等)を持つため、サイトが増えるほどメモリ使用量が増加します。これが「Chrome はメモリを食う」と言われる主因の1つで、Site Isolation の全面有効化はこのコストと引き換えに安全性を取った判断です。Chrome はメモリ逼迫時にプロセスをまとめる(同一サイトを共有させる)などの調整も行います。

観点単一プロセスマルチプロセス + Site Isolation
1タブのクラッシュブラウザ全体が落ちるそのレンダラだけ落ち他タブは生存
RCE 時の被害端末全体が危険サンドボックス内に限定、脱出が別途必要
別サイトのデータ窃取同一メモリで容易別プロセスのため Spectre でも届かない
メモリ消費少ない多い(プロセスごとに常駐)
IPC のオーバーヘッドなしあり(描画・通信が IPC 経由)

実務的には、この設計は開発者の前提も変えます。クロスオリジンの埋め込みは別プロセスで動くため、SharedArrayBuffer のような強力な機能は COOP/COEP によるクロスオリジン分離をページが宣言しないと使えません。マルチスレッド WASM や正確なメモリ計測を使いたいなら、これらのヘッダ設定が前提になります。タブ間で重い JS を動かしてもUIが固まりにくいのは、レンダラとブラウザUIが別プロセスだからで、JS 実行モデルの詳細は イベントループ詳説 を、データ保存の分離は Web ストレージ を併読すると、どこで何が隔離されるかの地図が完成します。描画側の続きは ブラウザのレンダリング へ。

押さえどころ

試験・面接で問われやすいのは、(1) ブラウザ(特権)/レンダラ(サンドボックス)の権限非対称と IPC 経由の依頼モデル、(2) Site Isolation の分離単位が**サイト(eTLD+1)**であってオリジンより粗い点、(3) CORB/ORB が「機微な応答をレンダラのメモリに載せない」防御である点、(4) Spectre が同一アドレス空間内のデータを越境読み取りするため、プロセス境界による物理分離が本丸の対策になる点、の4つです。

まとめ

まとめ

Chrome は信頼できないコードを「いずれ破られる」前提で扱い、ブラウザ(特権)・レンダラ(サンドボックス)・GPU・ユーティリティへ役割を分けます。レンダラは権限を奪われ、ファイル・通信・描画はすべて IPC でブラウザプロセスへ依頼し、ブラウザがリファレンスモニタとして検証します。Site Isolation はサイト(eTLD+1)ごとに専用レンダラを割り当て、CORB/ORB で別サイトの機微な応答をレンダラのメモリに載せません。これは Spectre が同一アドレス空間のデータを越境読み取りできてしまうため、プロセス境界による物理分離を本丸の防御に据えた設計判断です。代償はメモリ消費と IPC コストですが、1タブのクラッシュや RCE が全体へ波及しない堅牢さと引き換えに、Chrome はこの道を選びました。

Web/フロントエンド Article

ブラウザのマルチプロセス・サンドボックスアーキテクチャを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

ブラウザ

比較で見る軸

難易度: advanced / カテゴリ: Web/フロントエンド / タグ数: 5

導入後に効く点

Site Isolation は同一サイト(eTLD+1)ごとに専用レンダラプロセスを割り当て、別オリジンの応答をレンダラのメモリに載せない(CORB/ORB)。Spectre のようなサイドチャネルでも別サイトのデータを読めないようにする防御線。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
Web/フロントエンド
タグ数
5

判断チェックリスト

  • 自社の用途が「ブラウザ / セキュリティ」に近いか確認する。
  • 強みである「Chrome はブラウザ(特権)・レンダラ(各サイト)・GPU・ユーティリティの複数プロセスに役割を分け、レンダラを OS サンドボックスへ閉じ込める。1タブのクラッシュや脆弱性が全体へ波及しない。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

ブラウザセキュリティChromeプロセスサンドボックスブラウザセキュリティChrome
参考: 公式情報