Devotd Github
新着セキュリティ

marek-sm/canary — ツールが自ら死亡シグナルを消去できないようにする

marek-sm/canary の 2026 年 11 月 7 日のコミットは、seccomp フィルタによって、サンドボックス内で実行されるツールが自ら死亡シグナルを消去することを遮断し、タイムアウト後も生き残るプロセスを残さないようにした。

リポジトリ情報marek-sm/canary ↗

marek-sm/canary の 2026 年 11 月 7 日のコミットは、seccomp フィルタによって、サンドボックス内で実行されるツールが自ら死亡シグナルを消去することを遮断し、タイムアウト後も生き残るプロセスを残さないようにした。

GitHub の説明: Measures indirect prompt injection against a sandboxed tool-using LLM agent, separating what the model proposes from what the system permits. Cal Poly CS + AI Club research, Fall 2026.

スター
★ 4
フォーク
0
言語
Python
原文を見る ↗GitHub で見る ↗

marek-sm/canary は、サンドボックス内でツールを使う LLM エージェントを対象に間接プロンプトインジェクションを測定する、Cal Poly CS と AI Club の研究リポジトリである。モデルが提案したものとシステムが許可したものを分離して見る構造であり、2026 年 11 月 7 日のコミット 0e26ca5 は PR #83 をマージして、サンドボックス内のツールが自ら死亡シグナルを消去する行為を遮断した。

背景は、Linux ではツールプロセスが seccomp フィルタの背後で動作し、bwrap の --die-with-parent フラグによって終了シグナルを受け取る構造になっている点である。カーネルは新しいインタプリタを exec する際に bwrap が設定したシグナルを消去できるため、tools/no_exec.py は SIGKILL を再び死亡シグナルとして指定している。今回の変更では、そのフィルタが prctl(PR_SET_PDEATHSIG) 呼び出しを EPERM で失敗させるようになり、ツールが自分のシグナルを 0 に戻すことで bwrap の死亡後も生き残ったり子プロセスを残す経路を遮断する。docs/INTERFACES.md と決定記録 docs/decisions/0023-tool-sandbox.md(2026 年 11 月 6 日改訂)も同時に更新された。

検証は二層になっている。tests/test_tool_sandbox.py は、シスコール番号がソースに直接記述された cBPF フィルタをそのまま解釈し、x86_64 の 157 と aarch64 の 167 に該当する prctl において、オプションが PR_SET_PDEATHSIG なら EPERM になり、他のオプションは通過することを確認する。tests/redteam/test_orphan.py は、実行中のツールが ctypes で自分の死亡シグナルを消去しようとしても、シグナルが 9(SIGKILL)のまま残り、prctl が -1 と EPERM(1)を返すことを確認するテストを追加し、タイムアウト後に生存する子プロセスがないことを求める既存のテストにもシグナルを消去するケースを追加した。

ただし、この変更が効くのは Linux の seccomp 経路だけである。macOS はプロファイルがインタプリタの実行だけを許可しているため、この問題の対象外であり、今回のコミットにはライセンスも個別の数値も間接インジェクションの測定結果も示されていない。これはサンドボックス脱出の可能性を狭める防御層が一つ増えたというだけで、測定性能が改善した根拠ではない。検証結果が公開されるまで、実運用に適用する根拠とするには早い段階である。