All posts
Open Source & Dev Tools

6단계 AI 보안 감사, Cloudflare가 오픈소스로

Cloudflare가 공개한 security-audit 스킬은 에이전트를 6단계 감사자로 바꿔요. 발견과 검증을 서로 다른 에이전트가 맡고, 3종 판정을 정형 스키마로 검증해 신뢰할 수 있는 취약점 결과만 남겨요. 이번 주 GitHub 트렌드 11k 스타의 설계 철학을 살펴봐요.

Sep 18, 2026 5분 읽기

왜 지금 이 스킬이 화제일까

"AI 에이전트가 코드를 읽고 취약점을 찾는다"는 말이 이제 현실이 됐어요. 그런데 진짜 문제는 취약점을 찾는 것보다, 찾아낸 결과를 믿을 수 있게 만드는 데 있어요. 에이전트는 엉뚱한 취약점을 "증명했다"고 탁월하게 보고하기도 하고, 실행은 되지만 위협 모델 자체가 틀린 가짜 취약점을 만드는 경우도 흔해요. Cloudflare가 이번 주 GitHub 트렌드에 오른 오픈소스 스킬 security-audit(현재 약 11k 스타)은 정확히 이 지점을 노렸어요. 발견을 넘어 독립 검증과 기계가 읽을 수 있는 정형화까지 갖춘 게 핵심이에요.

배경: 보안 감사가 에이전트에게 어려운 이유

Cloudflare는 앞서 Cyber Frontier Models 기고에서 프론티어 보안 모델을 실제 엔터프라이즈 코드베이스에 돌려본 결과를 공개했어요. 핵심 주장은 분명했어요. 범용 코딩 에이전트는 한 번에 가설 하나만 품고, 레포 일부를 덮는 순간 컨텍스트가 차 버려 정보를 잃는다는 거예요. 그리고 단일 모델에 묶인 시스템은 같은 코드 경로를 똑같은 렌즈로만 보기 때문에 발견 범위가 본질적으로 제한돼요.

그래서 Cloudflare는 모델을 교체 가능한 부품으로 다루는 철학을 세웠어요. 발견에는 모델 A, 검증에는 완전히 다른 모델 B를 쓰고, 그 둘이 서로를 적대적으로 교차 검증하게 만든 거예요. 이 스킬은 그 '모델 불가지론' 설계를 그대로 담은, 레포 하나부터 시작할 수 있는 단일 시작점이에요. 더 큰 규모의 harness는 Build your own vulnerability harness 글에서 설명돼요.

이 스킬이 하는 일: 6단계 감사 워크플로

이 스킬은 에이전트를 6단계 보안 감사자로 바꿔요. 각 단계는 명확하게 분리돼 있어요.

  1. 정찰(Reconnaissance)** — 아키텍처, 신뢰 경계(trust boundary), 입력 표면을 architecture.mdcoverage-ledger.json으로 정리해요.
  2. 커버리지 기반 훈련(Hunting)** — 원장의 단위별로 격리된 hunter들이 체크를 기록하고, 그 결과를 coverage critic이 다시 봐서 빈틈을 찾아요.
  3. 후보 검증(Validation)** — 유일한 후보마다 그걸 찾지 않은 새로운 verifier가 반박을 시도해요. 찾은 에이전트가 자기 결과를 채점하지 못하게 하는 '적대적 검증'이에요.
  4. 정형 출력(Structured output)** — confirmed, needs_validation, rejected 세 판정을 findings.json에 쓰고, report-schema.json과 검증 스크립트로 기계 검사해요.
  5. 독립 기록 검증(Independent verification)** — 또 다른 신선한 에이전트가 최종 소스 주장을 재확인해요. 자료가 바뀌면 독립 verifier를 다시 투입해요.
  6. 타깃 중립 보고(Reporting)** — 검증된 기록에서 REPORT.md, FINDINGS-DETAIL.md, NEEDS-VALIDATION.md를 만듭니다.

신뢰를 만드는 세 가지 설계 철학

가장 인상 깊은 점은 '스스로 채점하지 않는다'는 원칙이에요. 이 스킬의 핵심 원칙 몇 가지를 보면 의도가 선명해요.

  • 오직 확립된 경계 위반만 confirmed로. 소스에 근거가 막혀 있는 건 needs_validation으로 남기고, 정확히 해결되지 않은 사실만 적어요.
  • 심각도는 영향 기준. 체크리스트에서 벗어났다는 이유가 아니라 '우도 × 영향'으로 등급을 매기고, 깊이 방어(Defense-in-depth)의 빈 틈은 취약점이 아니라 강화 노트로만 남겨요.
  • 기계 검증을 병행. 취약점 판정만 모델에 맡기지 않아요. validate-findings.cjsvalidate-coverage-ledger.cjs는 의존성 없는 Node 스크립트로, 판정 형식과 커버리지 원장이 스키마에 맞는지 기계로 확인해요.

report-schema.json을 보면 취약점 하나가 트레이스(경유 경로), 근본 원인, 의도된 동작, 증거까지 구조로 담겨요. 트레이스는 진입점→전파→싱크로 명시돼서, 사람이 재현하기 좋게 돼요. 판정마다 fingerprint(식별자)를 유지해 여러 번 실행해도 같은 근본 원인을 새 레코드로 중복 생성하지 않도록 해요. 같은 레포를 여러 번 돌리면 이전 원장과 결과를 읽어 빈틈을 겨냥하고, 근거가 변한 소스는 재검증해요. 테스트 실행에서 같은 레포를 한 번 돌리면 전체에서 찾을 수 있는 취약점의 대략 절반가량만 잡는다는 점도 명시돼 있어요.

실행 안전이 곧 품질 기준

이 스킬은 코드를 그냥 읽는 것에서 멈추지 않아요. hunter는 타깃이 조종하는 빌드·테스트·프로세스·브라우저·퍼저를 실행할 수 있는데, 반드시 OS 강제 샌드박스 안에서만 돌려요. 외부 네트워크 차단, 화이트리스트 환경, 리소스 상한, 할당된 scratch 경로에만 쓰기 허용 같은 통제가 전제예요. 이런 통제를 못 지키면 타깃 코드를 실행하지 않고 안전한 검증 계획을 제시해요. 실전 환경 테스트, 라이브 제어 플레인, 프로덕션 아이덴티티를 건드리지 말라는 원칙도 분명해요.

어떻게 시작하고, 한계는 무엇일까

설치는 Skills CLI로 간단해요: npx skills add https://github.com/cloudflare/security-audit-skill --skill security-audit. 그다음 "이 코드베이스 보안 감사해줘"처럼 요청하면 스킬이 자동 활성화돼요. 보안 질문·특정 취약점 조사는 가이던스 모드, 전체 감사·펜테스트는 풀 모드로 나뉘고, 애매하면 한 가지 질문부터 해요. 라이선스는 MIT예요.

다만 요구 사항을 꼭 짚어야 해요. 도구 사용과 병렬 서브에이전트를 지원하는 코딩 에이전트, 그리고 Node.js가 필요해요. 샌드박스가 전제라서 단순히 프롬프트만 넣어 바로 '만능 감사자'가 되진 않아요. 그리고 Cloudflare 스스로도 강조하듯 한 번의 실행으로 모든 취약점을 잡을 수는 없고, 반복 실행이 커버리지를 키워요. 큰 레포는 감사가 몇 시간 걸릴 수 있으니 작은 레포부터 시작하는 걸 권장해요. "AI가 취약점을 찾아준다"는 기대보단, '찾은 결과를 사람이 검토하기 편한 신뢰할 만한 파이프라인을 만드는 참고자료'로 보는 게 가장 현실적이에요.

참고 링크

#보안 감사#AI 에이전트#취약점 분석#오픈소스#Cloudflare
Robeedau

Curated, fact-checked, and edited by a single operator before publishing.