ソフトウェアサンドボックスとは、管理者の権限を必要とせずに、プログラム的にプロセスの権限を制限する手法です。歴史的には複雑でレガシーな技術に依存することが多かったものの、現代のサンドボックスは「裁量的な権限剥奪(discretionary privilege dropping)」に焦点を当てています。これは、開発者がプロセスの実行可能な操作を明示的に制限する設計であり、システム全体の管理ポリシーを置き換えるのではなく、それを補完するものです。サンドボックス化における主な課題は、標準的なUNIXファイルシステム権限のような従来のオペレーティングシステムのインターフェースが、Webブラウザ内のサードパーティ製プラグインを分離するといった現代のアプリケーションのニーズに対して不十分な場合が多いことです。開発者は歴史的に「suid」バイナリやカーネルレベルのハックを用いて制限を強制してきましたが、これらの手法はカーネルの攻撃対象領域を拡大したり、セキュリティ上の脆弱性を導入したりすることがよくあります。例えば、一般的なサンドボックス化のためにLinuxユーザー名前空間を誤用した結果、スーパーユーザーのみを対象としたカーネルコードパスが意図せず露出してしまうなど、重大なセキュリティ上の懸念が生じています。このような広範なメカニズムに頼るのではなく、現在のベストプラクティスではプロセスレベルでのコンパートメント化(区画化)が推奨されています。アプリケーションの各コンポーネントを独立したプロセスとして扱うことで、開発者は各コンパートメントに特定の権限を割り当て、メッセージパッシングを通じて通信を管理できます。このアプローチはアクターモデルと一致しており、プロセスはメモリを共有せず、UNIXドメインソケットのような定義されたインターフェースを介して通信する独立したエンティティとして機能します。このモデルにより、ファイル記述子の安全な交換が可能となり、サンドボックス化されたプロセスにシステム全体へのアクセス権を与えることなく、ファイル、パイプ、共有メモリといったリソースに対するきめ細かな制御を実現できます。FreeBSDがこの目的のためにCapsicumのような専門的なメカニズムを提供し、OpenBSDがpledge(2)やunveil(2)のような簡素化されたツールを提供しているように、プラットフォームは異なりますが、核心となる原則は同じです。それは、プロセスの機能を果たすために必要な最小限の範囲まで、そのプロセスが持つ環境的な権限(ambient authority)を削減することです。

この記事では、現代のサンドボックス化が、従来のシステム全体の権限とは対照的に、プロセスの機能を果たすために必要な最小限の範囲まで環境的な権限を削減することを目指している点について論じています。

本文では、従来のファイルシステム権限がサードパーティ製プラグインの分離といった現代のニーズには不十分な場合が多いことを説明し、コンパートメント化によってどのように厳格な制御を強制できるかを示しています。