プロセス分離は、オペレーティングシステム上の他のプロセスから各プロセスを保護するために設計された、さまざまなハードウェアおよびソフトウェア技術の集合です[ 1 ]。これは、プロセスAがプロセスBに書き込むことを防ぐことによって実現されます。プロセス間のメモリアクセスを禁止することでセキュリティを容易に実現できます。これは、どのプロセスでも他のプロセスのどのメモリにも書き込めるアーキテクチャとは対照的です[ 2 ] 。
プロセス分離は、各プロセスに独自の仮想アドレス空間を与えることで実現できます。プロセスAのアドレス空間はプロセスBのアドレス空間とは異なるため、AがBに書き込むことを防ぐことができます。
プロセス分離が実現されたシステムでは、共有メモリ、ローカルソケット、インターネットソケットなどのプロセス間通信(IPC)チャネルを介して、プロセス間の限定的(制御された)相互作用が依然として許可される場合があります。この方式では、プロセスが協調プロセスからの入力を受け入れる場合を除き、プロセスのメモリはすべて他のプロセスから分離されます。
システムポリシーによっては、状況によってはIPCが禁止される場合があります。たとえば、強制アクセス制御システムでは、機密レベルの異なる主体同士の通信が許可されない場合があります。このような状況におけるセキュリティ上の影響は広範囲に及び、ネットワーク鍵暗号化システムや分散キャッシングアルゴリズムなどのアプリケーションにも影響を及ぼします。基本的なクラウドアクセスアーキテクチャやネットワーク共有などのインターフェース定義プロトコルも同様に影響を受けます。[ 3 ]
各プロセスに個別のアドレス空間を提供することでプロセス分離をサポートするオペレーティングシステムには、以下のようなものがあります。
プロセス分離をサポートするシステムでは、アプリケーションは複数のプロセスを使用して、アプリケーションのコンポーネントを互いに分離することができます。
Internet Explorer 4は、ブラウザのウィンドウインスタンスごとに独自のプロセスを持たせるためにプロセス分離を採用していました。しかし、ブラウザ戦争が激化するにつれ、 Netscape Navigator (インターネットスイート全体を1つのプロセスに集中させることを目指していた)に対抗するため、後のバージョンではこの機能は廃止されました。インスタンスごとにプロセスを割り当てるというこの考え方は、タブブラウジングが普及する10年後まで再び取り上げられることはありませんでした。
Google Chromeの「マルチプロセスアーキテクチャ」[ 4 ]およびInternet Explorer 8の「疎結合 IE (LCIE)」[ 5 ] では、ウェブページを含むタブは独自のプロセス内に含まれ、ブラウザのコアプロセスから分離されているため、1 つのタブ/ページがクラッシュしてもブラウザ全体がクラッシュすることはありません。この方法 (一般的にマルチプロセスまたはタブごとのプロセスとして知られています) は、問題のあるタブがブラウザや他のタブとは別にクラッシュできるようにすることでメモリと処理を管理し、セキュリティを管理することを目的としています。
Firefoxでは、バージョン 3.6.4以降、 Flash や Silverlight などのNPAPIプラグインの実行がプラグインごとに別々のプロセスで分離されるようになりました。[ 6 ]このプロセス分離の基盤は、最終的に Electrolysis または略して e10s と呼ばれるプロジェクトとなり、プロセス分離を Web コンテンツ、ブラウザのクローム、およびアドオンに拡張しました。これはバージョン 57 以降、すべてのユーザーに対してデフォルトで有効になり、副作用としてアドオンをより制限されたWeb Extensionsに書き換える必要が生じました。[ 8 ]その後、e10s は、バージョン 95 で出荷された Project Fission によって、オリジンごとのプロセス分離 (「サイト分離」とも呼ばれる) に拡張されました。[ 9 ]
Pale Moonは、ブラウザのクローム、ウェブコンテンツ、アドオン、その他の非プラグインコンポーネントを意図的に独自のプロセスに分離していない注目すべきウェブブラウザです。マルチプロセスブラウザでは、プロセス間通信の非同期性が同期状態を必要とするウェブ標準(例:Cookieの設定)と競合する、メインのクロームプロセスとウェブコンテンツの間でメッセージをやり取りする必要があるためUIインタラクションの遅延が増加する、ブラウザの解析、レイアウト、レンダリングエンジンがプロセス間で複製されるためリソース使用量が増加する、オペレーティングシステムによって処理されるIPCのセキュリティ(通常のシングルプロセスブラウザやドキュメントビューアにあるアプリケーションコードとドキュメントコンテンツ間の厳密なサンドボックスを必然的に置き換える)を制御できない、といった問題が発生すると主張しています。[ 10 ]
Erlang(プログラミング言語)は、厳密に分離された軽量プロセスを実現することで、ユーザー空間において同様の概念を提供している。
{{cite web}}: CS1 maint: url-status (リンク){{cite web}}: CS1 maint: url-status (リンク){{cite web}}: CS1 maint: url-status (リンク)