코딩 에이전트에게 "이 코드베이스를 보안 감사해 달라"고 요청하면, 대개는 그럴듯하지만 검증되지 않은 지적이 쏟아진다. 존재하지 않는 취약점을 지어내거나, 반대로 실제 위험을 놓치거나, 근거가 불분명한 채로 심각도만 붙이는 식이다. 클라우드플레어가 공개한 Security-Audit-Skill은 이 문제를 구조로 풀려는 시도다. 단발성 프롬프트가 아니라 여러 단계로 나뉜 워크플로우를 통해, 에이전트가 스스로 발견한 결과를 다시 독립적으로 검증하고 기계가 읽을 수 있는 형태로 기록하도록 강제한다.
이 스킬은 클라우드플레어가 사내에서 운영하는 취약점 발견 하네스의 출발점이 된 코드로 소개된다. 회사 설명에 따르면 그 하네스는 이후 다단계·전사 규모의 시스템으로 성장했고, 지금 공개된 스킬은 단일 저장소를 대상으로 하는 초기 형태에 해당한다. 즉 대규모 자동 감사 인프라의 축소판이자, 개별 개발팀이 자기 코드베이스에 곧바로 적용해 볼 수 있는 진입점인 셈이다.
6단계로 나눈 감사 흐름
스킬은 정찰(reconnaissance), 커버리지 중심의 취약점 탐색, 후보 검증(candidate validation), 구조화된 출력, 독립적인 기록 검증, 그리고 대상 중립적 보고까지 총 여섯 단계를 오케스트레이션한다. 핵심은 각 단계를 격리된(isolated) 에이전트가 맡는다는 점이다. 하나의 에이전트가 탐색부터 결론까지 한 번에 처리하면 자기가 세운 가설을 스스로 확증하는 편향이 생기기 쉽지만, 검증을 별도 주체가 담당하면 그 고리를 끊을 수 있다.
검증의 실효성을 뒷받침하는 것은 두 개의 스크립트다. 부모 프로세스는 커버리지 원장(coverage ledger)을 만든 직후와 이후 갱신할 때마다 validate-coverage-ledger.cjs를 실행하고, 4단계에서 validate-findings.cjs를 돌린 뒤 5단계에서 항목을 교체할 때마다 다시 실행한다. 사람이 리뷰를 잊더라도 원장과 발견 목록이 정해진 형식과 근거를 갖췄는지 기계적으로 되짚는 구조다.
판정을 세 가지로 나눈 이유
이 스킬이 만들어내는 결과에는 명확히 구분된 판정(verdict)이 붙는다. confirmed는 완전한 소스 추적과 한정된 관찰 결과를 갖춘 확정 취약점이고, needs_validation은 아직 풀리지 않은 정확한 사실 하나가 남아 있어 심각도를 매기지 않은 상태이며, rejected는 검토 끝에 반증된 후보를 기록으로 남긴다. 특히 needs_validation에 심각도를 부여하지 않는다는 원칙은 실무적으로 중요하다. 근거가 미완인 지적에 등급이 붙으면 대응 우선순위가 왜곡되는데, 이를 애초에 차단하기 때문이다. 반증된 후보까지 남기는 rejected는 반복 감사에서 같은 오탐을 다시 파고드는 낭비를 줄여 준다.
같은 저장소를 여러 번 감사하면 결과가 누적(additive)된다는 점도 눈여겨볼 만하다. 스킬은 이전 원장과 발견 내역을 활용해 빈틈을 겨냥하고, 변경된 소스를 다시 검증하며, 현재 소스에 기반한 증거를 이어받는다. 오래됐거나 미해결인 작업을 이미 다룬 것으로 간주하지 않는다는 원칙이 명시돼 있다. 코드가 계속 바뀌는 실제 개발 환경에서, 한 번의 감사로 끝내지 않고 상태를 추적하며 이어가는 방식은 현실적이다.
설치와 동작 방식
사용은 감사하려는 코드베이스 안에서, 혹은 그 코드베이스를 가리킨 상태로 코딩 에이전트를 띄운 뒤 보안 감사를 요청하면 된다. 스킬은 "보안 감사", "취약점을 찾아라", "코드를 펜테스트하라" 같은 트리거에 자동으로 활성화된다. 코드베이스 감사나 펜테스트 요청이면 전체 감사(full audit) 모드로, 보안 관련 질문이나 좁은 범위의 작업이면 보고서 산출물을 명시적으로 요청하지 않는 한 안내(guidance) 모드로 동작한다. 전체 감사 모드에서 출력 디렉터리를 지정하지 않으면 ~/security-audit-skill//run- 경로가 기본값으로 쓰이며, 워크플로우가 대상 저장소 안에 파일을 쓰는 경우는 사용자가 버전 관리에서 무시되는 디렉터리를 직접 선택했을 때로 한정된다. 감사 산출물이 실수로 리포지터리에 섞여 커밋되는 사고를 막으려는 설계다. 설치는 사용자 수준 설치를 위한 --global 옵션을 지원하고, npx skills --help로 에이전트 선택과 비대화형 옵션을 확인할 수 있다.
결국 이 스킬의 가치는 "AI가 취약점을 찾아준다"는 약속 자체보다, 찾은 것을 어떻게 신뢰 가능한 형태로 만드느냐에 대한 답에 있다. 단계 분리, 독립 검증, 판정 구분, 누적 추적이라는 장치는 모두 AI 감사의 고질적 약점인 오탐과 근거 부족을 겨냥한다. 다만 공개된 정보만으로는 실제 탐지 성능이나 오탐률 같은 정량 지표를 알 수 없고, 단일 저장소를 전제로 한 출발점이라는 한계도 분명하다. 자동 감사를 곧바로 신뢰하기보다, 검증 절차를 갖춘 보조 도구로 파이프라인에 얹어 시험해 보는 접근이 현실적이다. 클라우드플레어는 AI 기반 보안 도구에 대한 의견 교환 창구로 security-ai-research@cloudflare.com을 열어 두고 있다.