Cloudflare security-audit-skill: 코딩 에이전트를 위한 오픈소스 다단계 보안 감사 프레임워크
TL;DR
Cloudflare는 코딩 에이전트가 6단계의 독립적으로 검증된 보안 감사 파이프라인을 수행하여 기계 판독 가능한 결과물과 변경 불가능한 보고서를 생성할 수 있도록 하는 오픈소스 "security-audit-skill"을 공개했습니다. 이 프레임워크는 코드베이스에 대해 반복적이고 누적적인 감사를 수행하도록 설계되었으며 Skills CLI를 통해 설치할 수 있습니다.
이 스킬의 기능 – 6가지 구체적인 단계
이 스킬은 독립된 하위 에이전트들을 조정하여 서명된 보고서로 끝나는 결정론적 감사를 수행합니다.
- 정찰(Reconnaissance) – 신뢰 경계, 입력 표면 및 이전 증거를 설명하는
architecture.md및coverage-ledger.json을 생성합니다. - 커버리지 기반 탐색(Coverage-led hunting) – 원장에서 헌터를 할당하고 각 검사를 기록하며, 비평가를 사용하여 다루지 않은 격차를 찾아냅니다.
- 후보 검증(Candidate validation) – 모든 고유 후보를 이를 반증하려는 새로운 검증자에게 보냅니다.
- 구조화된 출력(Structured output) – 세 가지 판정(
confirmed,needs_validation,rejected)이 포함된findings.json을 작성하고report-schema.json에 대해 파일의 유효성을 검사합니다. - 독립적 기록 검증(Independent record verification) – 새로운 에이전트가 최종 소스 주장을 재검증하며, 중요한 변경 사항이 발생하면 또 다른 독립적인 검사를 트리거합니다.
- 대상 중립적 보고(Target-neutral reporting) – 검증된 기록과 커버리지 원장에서
REPORT.md,FINDINGS-DETAIL.md,NEEDS-VALIDATION.md를 도출합니다.
각 단계는 진행하기 전에 스키마 준수를 보장하기 위해 제로 의존성 검증기(validate-coverage-ledger.cjs 또는 validate-findings.cjs)를 실행합니다.
워크플로우가 신뢰할 수 있는 결과를 보장하는 방법
- 명확한 판정 –
confirmed는 완전한 소스 추적과 경계가 지정된 관찰 결과를 포함하며,needs_validation은 심각도 없이 해결되지 않은 정확한 사실을 기록하고,rejected는 반증된 후보를 표시합니다. - 적대적 검증 – 결과를 발견한 에이전트는 이를 검증하지 않으므로 자기 확증 편향을 제거합니다.
- 누적 실행 – 후속 감사는 이전 원장과 결과를 재사용하여 다루지 않은 격차만 대상으로 하며, 변경된 코드를 재검증하되 오래된 작업을 완료된 것으로 처리하지 않습니다.
- 독립적 검증 – 4단계 이후, 새로운 에이전트가 모든 주장을 재확인하며, 교체 시 또 다른 검증 라운드가 트리거되어 단일 에이전트가 임의로 취약점을 선언할 수 없도록 합니다.
설치 및 사용 방법
# Skills CLI를 통해 전역(또는 프로젝트별)으로 스킬 설치
npx skills add https://github.com/cloudflare/security-audit-skill \
--skill security-audit \
--global # 선택 사항, 사용자 수준 설치용
대상 코드베이스가 포함된 디렉토리에서 감사를 실행합니다:
security audit this codebase
# 또는
find security vulnerabilities in ./src
# 또는
do a security review, output to ~/audits/my-project
이 스킬은 트리거 문구(예: "security audit", "find vulnerabilities")를 자동 감지하고 전체 6단계 워크플로우를 시작합니다. 전체 감사 모드에서 출력은 명시적인 디렉토리가 제공되지 않는 한 기본적으로 ~/security-audit-skill/<repo-name>/run-<N>으로 설정됩니다.
안전한 실행을 위한 필수 환경
- 코딩 에이전트 – 도구 사용 및 병렬 하위 에이전트를 지원해야 합니다.
- Node.js – 제로 의존성 검증기에 필요합니다.
- OS 수준 샌드박스 – 빌드, 테스트, 브라우저, 퍼저 등을 격리하고 외부 네트워킹을 비활성화하며 리소스 제한을 적용하고 지정된 스크래치 경로에 대한 쓰기를 제한합니다. 샌드박싱 없이는 스킬이 대상 코드를 실행하는 대신 리드를
needs_validation으로 표시합니다.
감사를 형성하는 설계 원칙
- 확립된 경계 실패만 확인 – 해결되지 않은 사실은
needs_validation에 남습니다. - 심각도에는 영향이 필요함 – 체크리스트 편차가 아닌 실제 영향력에 가능성을 곱한 값입니다.
- 심층 방어 격차는 강화 참고 사항 – 누락된 계층이 자동으로 취약점으로 분류되지는 않습니다.
- 반복 실행으로 커버리지 향상 – Cloudflare의 내부 테스트에 따르면 단일 실행은 여러 번의 실행에 걸쳐 발견된 전체 취약점의 약 절반을 찾아냅니다.
Hacker News 커뮤니티 반응
"뻔뻔한 홍보: 혹시 너무 많은 토큰이 필요하다고 생각하시는 분들을 위해, 저희가 자체 사내 감사 스킬을 구축한 방법을 공유합니다. 이를 통해 다양한 환경에 쉽게 복제하고 조정할 수 있습니다" – gbrindisi
"중간 규모 코드베이스에서 아무것도 얻지 못한 채 100만 토큰을 낭비했습니다." – drchaim
"LLM을 사용하는 보안 전문가를 위한 팁: 작업을 보안 연구로 명시적으로 프레임화하는 감사 스킬은 때때로 OpenAI 및 Anthropic의 최상위 모델에서 오용 방지 기능 때문에 거부 반응을 일으킵니다. 저에게 효과적인 방법은 보안 프레임 없이 버그 클래스(및 일반적인 버그)에 대한 별도의 스킬을 사용하고, 그 결과를 결합하여 보안 버그를 찾아내는 또 다른 스킬을 사용하는 것입니다." – wslh
"프롬프트에 14개의 전체 스키마를 덤프하는 것은 게으른 설계입니다. 토큰을 낭비하고 이유 없이 지연 시간만 급증시킵니다" – qsbuilder
이러한 의견들은 토큰 비용, 모델 거부 처리, 풍부한 스키마 정의와 프롬프트 효율성 사이의 절충안이라는 실질적인 우려를 강조합니다.
스킬 사용 시기(및 사용하지 말아야 할 시기)
- 이상적인 경우 – 재현 가능하고 감사 가능한 결과가 필요하며 샌드박스 실행 환경을 프로비저닝할 수 있는 대규모 코드베이스.
- 덜 이상적인 경우 – 토큰 비용이 이점보다 크거나 LLM 제공업체가 보안 프레임이 적용된 프롬프트를 차단하는 환경.
도움을 받거나 기여하는 방법
AI 기반 보안 도구에 대한 질문, 피드백 또는 협업은 security-ai-research@cloudflare.com으로 이메일을 보내주십시오. 저장소는 MIT 라이선스가 적용되어 제한 없는 수정 및 재배포가 가능합니다.
Sources
관련
- 프로젝트
- Dispatch
- 프로젝트
- Dispatch
- 프로젝트