TL;DR

ブラウザが、異なる Web サイトのリソースを別々のプロセスで実行することで、サイト間の攻撃を防ぐセキュリティの仕組み。

なぜ必要か

2018 年に Spectre と Meltdown の脆弱性が発表されてから、サイト分離の重要性は急に高まった。

Spectre は CPU の投機的実行を悪用し、サイドチャネル攻撃で機密データを漏らす攻撃である。投機的実行とは、CPU がプログラムの命令を実行するときに、この先の命令を予測して前もって実行する機能である。攻撃者は、あるプロセスの投機的実行で機密データを CPU のキャッシュメモリに読み込ませ、別のプロセスからキャッシュの情報を参照して、その機密データを読み取る。

Meltdown は CPU の保護機構をすり抜けて、カーネルメモリにアクセスできる脆弱性である。通常、アプリケーションは OS のカーネルメモリにアクセスできないように保護されている。

仕組み

異なるプロセスはそれぞれ独立したメモリ空間を持つので、異なるサイトで動くプログラムが互いに干渉することはない。現在のブラウザはマルチプロセスアーキテクチャを採用しており、サイトの単位でプロセスを分けることが多い。

スキームと、有効なトップレベルドメインとその 1 つ上のドメイン(eTLD+1)が同じであれば、同じサイト(Same-site)とみなし、同じプロセスで実行する。 異なるサイトのことを Cross-site と呼ぶ。

例

URL 1URL 2同じサイトか
https://www.example.com:443https://www.evil.com:443Cross-site(eTLD+1 が異なる)
https://www.example.com:443https://abc.example.com:443Same-site
https://www.example.com:443http://www.example.com:443Cross-site(スキームが異なる)
https://www.example.com:443https://www.example.com:80Same-site(ポート番号は関係ない)

注意点

サイトはオリジンとは判定の基準が違う。同一生成元ポリシーのオリジンはポート番号やサブドメインの違いも区別するが、サイトはそれらを区別しない。

関連

出典