HyperAIHyperAI

Command Palette

Search for a command to run...

サンドボックス Sandbox

サンドボックス(Sandbox)とは、制限された実行環境のことです。プログラムはそこで実行され、明示的に許可されたリソースにのみアクセスできます。エラーが発生したり、悪意ある利用を受けたりしても、ホストシステムや他のプログラムに影響を及ぼすことは困難です。サンドボックスが対処すべき前提は「信頼できないコード」です。つまり、サードパーティ、ユーザー入力、またはモデルによって生成されたプログラムは、安全であると仮定できません。

サンドボックスの思想的な源流は、オペレーティングシステムのプロセス分離にあります。1979年、Version 7 Unix は chroot システムコールを導入し(1982年に Bill Joy により BSD に追加)、プロセスのルートディレクトリを特定のサブツリーに閉じ込め、ファイルシステムの残りの部分を「見えない」ようにしました。1993年、Wahbe らは論文 Efficient Software-Based Fault Isolation でソフトウェア障害分離(SFI)を提案し、命令書き換えによって信頼できないモジュールのメモリアクセスを自身のアドレス空間内に制限することで、仮想マシンを起動せずに障害を分離しました。1990年代半ば、Java アプレットにより「サンドボックス」という用語が一般的になりました。ブラウザ内のコードはデフォルトで限定的な操作しかできず、権限を越える操作には明示的な許可が必要でした。Dean らは論文 Java Security: From HotJava to Netscape and Beyond でこのモデルを体系的に分析しました。

現代のサンドボックスの実装は、カーネルプリミティブ、仮想化、言語ランタイムの3層構造で成り立っています。カーネル層では、seccomp を用いてシステムコールをフィルタリングし、namespaces と cgroups を用いてビューとリソースを分離することで、コンテナが同一カーネル上で互いに分離できるようになります。仮想化層では、軽量なマイクロ仮想マシンを用いてより強力な境界を提供します。Firecracker は簡素化されたデバイスモデルにより、起動時間とメモリオーバーヘッドをミリ秒単位まで抑制します(Firecracker: Lightweight Virtualization for Serverless Applications, NSDI 2020)。言語層では、サンドボックスをランタイムに組み込みます。WebAssembly の線形メモリとインポート機構により、モジュールは明示的に渡されたオブジェクトにのみアクセスできます。近年、AI エージェントがモデル生成コードを実行するようになり、サンドボックスは「セキュリティメカニズム」から「デフォルトのインフラストラクチャ」へと変化しました。

サンドボックスの価値は、障害や攻撃の影響を境界内に限定し、信頼できないコードを安心して実行、繰り返し評価、いつでもロールバックできるようにすることにあります。しかし、それは絶対的な安全を保証するものではありません。カーネルの脆弱性、共有キャッシュによるサイドチャネル攻撃、設定ミスなどにより分離が破られる可能性があり、「エスケープ」は常に攻防の焦点です。一方でコストもあります。分離が強力であればあるほど、利用可能なシステム機能は減少し、ファイル、ネットワーク、GPU などは個別に許可する必要があります。サンドボックスの工学的な難点は、タスクに応じて「閉じ込められる」と「利用可能」の間の適切な境界を引くことにあります。

AIでAIを構築

アイデアからローンチまで — 無料のAIコーディング支援、すぐに使える環境、最高のGPU価格でAI開発を加速。

AI コーディング補助
すぐに使える GPU
最適な料金体系

HyperAI Newsletters

最新情報を購読する
北京時間 毎週月曜日の午前9時 に、その週の最新情報をメールでお届けします
メール配信サービスは MailChimp によって提供されています