TL;DR
実行中のプログラムを他から隔離し、使えるリソースを制限するセキュリティの仕組み。テストされていないコードや、信頼できないコードを動かすときに使う。
なぜ必要か
Wikipedia によると、サンドボックスは障害やソフトウェアの脆弱性が広がるのを防ぐ。怪しいプログラムを動かしても、ホストのシステムを傷つけられないようにできる。
仕組み
サンドボックスの中のプログラムには、限られたリソースだけを与える。ネットワークや入力デバイスへのアクセスは、禁止されるか強く制限されることが多い。
例
- 仮想マシンは、ホストのコンピュータ全体をエミュレートする。ゲストの OS は、エミュレータを通してしかホストのリソースに触れられない
- Linux の seccomp の strict モードでは、使えるシステムコールが
read、write、exit、sigreturnだけになる - WebAssembly のモジュールは、ホストから隔離されたサンドボックスで動く。WebAssembly のドキュメントによると、適切な API を通さずにサンドボックスから出ることはできない。線形メモリへのアクセスは境界チェックされ、コンパイルされたコードは書き換えられず、実行時に観測もできない