gVisor 対 seccomp-bpf:攻撃ツールのサンドボックス化
agent にエクスプロイトを実行させるなら、不都合な問いに向き合う。起動するツールが悪意あるものだったら、あるいは agent 自身が誤ったら、どうなるのか。最初の答えは seccomp-bpf。より高リスクな処理向けの二つ目が gVisor だ。両者は競合せず積み重なる。
seccomp-bpf:安価で鋭い
seccomp-bpf はカーネルレベルで syscall をほぼゼロコストで濾過する。既知のツールに最適だ。nmap や ffuf が必要とする syscall のホワイトリストを定義すれば、それ以外は SIGSYS で死ぬ。難点はプロファイルが脆く、許可しすぎた syscall ひとつが脱出経路になりうること。
seccomp:
default_action: SCMP_ACT_ERRNO
syscalls:
- names: [read, write, openat, connect, socket]
action: SCMP_ACT_ALLOW
gVisor:あなたと本物のカーネルの間に立つカーネル
gVisor は Go で書かれたユーザー空間カーネルで syscall を横取りする。バイナリは Linux と話していると思い込むが、実際は Sentry と話している。露出する本物のカーネル表面は劇的に縮む。性能の代償を払うが、カーネル 0-day への隔離を得る。
選び方
- 信頼できるツール、既知のプロファイル: seccomp-bpf。
- 信頼できないバイナリ、サードパーティのエクスプロイト、解析中のマルウェア: gVisor、内側にも seccomp-bpf。
- 常に: CPU/メモリ制限の cgroups と、スコープ単位のネットワークポリシー。
私たちが提供するもの
Gwaihir はグローバル既定でなく、ツールの信頼度でサンドボックスを選ぶ。一般的なケースは速度のため seccomp-bpf、危険なケースは gVisor に落ちる。単一の壁ではなく多層防御だ。