marek-sm/canary는 샌드박스 안에서 도구를 쓰는 LLM 에이전트를 대상으로 간접 프롬프트 인젝션을 측정하는 Cal Poly CS와 AI Club의 연구 저장소다. 모델이 제안한 것과 시스템이 허용한 것을 분리해 보는 구조이며, 2026년 11월 7일 커밋 0e26ca5는 PR #83을 머지해 샌드박스 안의 도구가 스스로 사망 시그널을 지우는 행위를 차단했다.
배경은 리눅스에서 도구 프로세스가 seccomp 필터 뒤에서 돌아가고 bwrap의 --die-with-parent 플래그로 종료 시그널을 받는 구조다. 커널은 bwrap가 설정한 시그널을 새 인터프리터를 exec할 때 지울 수 있어 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)을 돌려주는지 보는 테스트를 추가했고, 타임아웃 뒤 생존 자식이 없어야 한다는 기존 테스트에도 시그널을 지우는 경우가 추가됐다.
다만 이 변경은 리눅스 seccomp 경로에만 걸린다. macOS는 프로필이 인터프리터 실행만 허용해 이 문제 대상이 아니며, 이번 커밋에는 라이선스나 별 수, 간접 인젝션 측정 결과가 제시되지 않았다. 샌드박스 탈출 가능성을 좁히는 방어 지층 하나가 더해진 것이지 측정 성능이 나아졌다는 근거는 없다. 검증 결과가 공개되기 전까지 실전 적용의 근거로 삼기엔 이른 단계다.