TL;DR

実行中のプログラムを他から隔離し、使えるリソースを制限するセキュリティの仕組み。テストされていないコードや、信頼できないコードを動かすときに使う。

なぜ必要か

Wikipedia によると、サンドボックスは障害やソフトウェアの脆弱性が広がるのを防ぐ。怪しいプログラムを動かしても、ホストのシステムを傷つけられないようにできる。

仕組み

サンドボックスの中のプログラムには、限られたリソースだけを与える。ネットワークや入力デバイスへのアクセスは、禁止されるか強く制限されることが多い。

例

  • 仮想マシンは、ホストのコンピュータ全体をエミュレートする。ゲストの OS は、エミュレータを通してしかホストのリソースに触れられない
  • Linux の seccomp の strict モードでは、使えるシステムコールが read、write、exit、sigreturn だけになる
  • WebAssembly のモジュールは、ホストから隔離されたサンドボックスで動く。WebAssembly のドキュメントによると、適切な API を通さずにサンドボックスから出ることはできない。線形メモリへのアクセスは境界チェックされ、コンパイルされたコードは書き換えられず、実行時に観測もできない

関連

出典