プロセス分離とは、オペレーティングシステム上の各プロセスを他のプロセスから保護するために設計された、異なるハードウェアおよびソフトウェア技術[1]のセットです。これは、プロセスAがプロセスBへの書き込みを禁止することで実現されます。任意のプロセスが他の任意のプロセスの任意のメモリに書き込み可能なアーキテクチャとは対照的に、プロセス間メモリアクセスを禁止することでセキュリティをより簡単に強化できます。[2]
プロセス分離は、各プロセスに独自の仮想アドレス空間を与えることによって実装できます。この場合、プロセス A のアドレス空間はプロセス B のアドレス空間と異なり、A が B に書き込むことを防ぎます。
プロセス分離を備えたシステムでは、共有メモリ、ローカルソケット、インターネットソケットといったプロセス間通信(IPC)チャネルを介して、プロセス間の限定的な(制御された)相互作用が依然として許可される場合があります。この方式では、プロセスが連携プロセスからの入力を許可している場合を除き、プロセスのメモリはすべて他のプロセスから分離されます。
システムポリシーによっては、IPCが禁止される場合があります。例えば、強制アクセス制御システムでは、機密性レベルが異なる主体間の通信が許可されない場合があります。このような状況におけるセキュリティへの影響は広範囲に及び、ネットワーク鍵暗号化システムや分散キャッシュアルゴリズムといったアプリケーションにも及びます。基本的なクラウドアクセスアーキテクチャやネットワーク共有といったインターフェース定義プロトコルも同様の影響を受けます。[3]
各プロセスに個別のアドレス空間を提供することでプロセス分離をサポートするオペレーティング システムには、次のものがあります。
プロセス分離をサポートするシステムでは、アプリケーションは複数のプロセスを使用して、アプリケーションのコンポーネントを相互に分離できます。
Internet Explorer 4は、ブラウザのウィンドウ化されたインスタンスごとに独自のプロセスを割り当てるためにプロセス分離を採用していました。しかし、ブラウザ戦争の真っ只中、 Netscape Navigator (インターネットスイート全体を1つのプロセスに集中させようとした)との競争のため、以降のバージョンではこのプロセス分離は廃止されました。インスタンスごとにプロセスを割り当てるというこの考え方は、タブブラウジングがより一般的になった10年後まで再考されることはありませんでした。
Google Chromeの「マルチプロセスアーキテクチャ」[4]とInternet Explorer 8の「Loosely Coupled IE (LCIE)」[5] では、ウェブページを含むタブはブラウザのコアプロセスから分離された独自のプロセス内に収められており、1つのタブ/ページのクラッシュがブラウザ全体のクラッシュにつながるのを防いでいます。この方式(一般的にはマルチプロセスまたはタブごとのプロセスとして知られています)は、問題のあるタブをブラウザや他のタブとは別にクラッシュさせることでメモリと処理の両方を管理し、セキュリティも確保することを目的としています。
Erlang (プログラミング言語)は、厳密に分離された軽量プロセスを実現することで、ユーザー空間で同様の概念を提供しています。