信頼できないコードをサンドボックス化することは、ソースコードにアクセスできないサードパーティの開発用ソフトウェアに依存する必要がある場合や、ソースコード評価を実行するためのリソースがない場合に便利です。サンドボックス化は、独自のコードの強化されたセキュリティ境界としても役立ちます。
ユースケースに応じて、コードを自動格納するためのさまざまなツールを利用できます。以下の表に、各プロダクトとその適用可能なユースケースの概要を示します。一部の製品は Google 内部で使用され、Google のエンジニアによって開発されています。
Sandbox2 と Sandboxed API は、Google セキュリティ チームのサンドボックス部門が開発した 2 つのプロダクトです。
プロダクト | 説明 | ユースケース |
---|---|---|
サンドボックス 2 | 名前空間、リソースの上限、seccomp-bpf syscall フィルタを使用した Linux サンドボックス化。Sandboxed API の基盤となるサンドボックス技術を提供します。 | 一般的なサンドボックス化 |
gVisor | アプリケーション カーネル内にシステムコールを実装します。ptrace またはハードウェア仮想化を使用してシステムコールをインターセプトします。 | 一般的なサンドボックス化 |
バブルラップ | ユーザーの名前空間のサブセットで実装されるサンドボックス化ツール。Flatpak などの実行エンジンとして使用されます。 | CLI ツール |
ミニジャイル | Chrome OS と Android で使用されるサンドボックスとコンテインメント ツール他のプログラムやコードを起動およびサンドボックス化するために使用される実行可能ファイルとライブラリを提供します。 | CLI ツール |
NSJail 氏 | 名前空間、リソースの上限、seccomp-bpf syscall フィルタを使用した Linux のプロセス分離。必要に応じて、Kkel(カスタム ドメイン固有の言語)を利用してシステムコール ポリシーを指定できます。 | CLI ツール |
サンドボックス化された API | Sandbox2 を使用した C/C++ ライブラリ用の再利用可能なサンドボックス。 | C/C++ コード |
ネイティブ クライアント | 非推奨 x86(NaCl)/ LLVM バイトコード(PNaCl)の制限付きサブセットにコンパイルすることで、C / C++ バイナリをサンドボックス化する高度な手法。 後継者(WebAssembly)の設計に影響を与え、主に後者に置き換えました。 |
C/C++ コード |
WebAssembly(WASM) | ポータブル バイナリのバイナリ形式。WASM モジュールは隔離されたランタイム環境で実行されます。 | C/C++ コード |
RLBox | さまざまな実行バックエンド(ネイティブ クライアント、WebAssembly、リモート プロセス)を使用できるサンドボックス化 API(C++17 で記述)。 | C/C++ コード |
Flatpak | バブルラップの上に構築され、Linux デスクトップ アプリケーションでサンドボックスを実現します。ネイティブ アプリのパッケージ化と配布に重点を置いている。 | デスクトップ アプリケーション |
サンドボックス 2
Sandbox2 は、Linux 用のオープンソースの C++ セキュリティ サンドボックスです。Sandbox2 を使用すると、ランタイム環境を正規のオペレーションに必要な最小限に制限できるため、コード実行の脆弱性を回避できます。
Sandbox2 を使用すると、C または C++ で記述されたプログラム全体または一部をサンドボックス化できます。
サンドボックス化された API
Sandboxed API(SAPI)は、C/C++ ライブラリをサンドボックス化するオープンソース プロジェクトです。Sandboxed API でサンドボックス化されたライブラリは簡単に再利用でき、将来のプロジェクトにかかる負担が軽減されます。Sandboxed API 以前、Google で使用できるサンドボックスでは、同じソフトウェア ライブラリを再利用する場合でも、サンドボックス化するはずだったプロジェクトの新しいインスタンスごとに実装作業が必要でした。サンドボックス化されたプロセスに適用される Sandbox2 のポリシーやその他の制限は、毎回再実装する必要があり、コードの信頼できる部分と信頼できない部分との間のデータ交換メカニズムは、ゼロから設計する必要がありました。