AI가 보안 취약점을 찾는 흐름은 이제 데모 단계를 지나고 있습니다. 코드베이스 전체를 훑고, 의심 경로를 설명하고, 재현 스크립트까지 제안하는 도구가 늘어나면서 보안팀과 플랫폼팀이 받을 후보 이슈의 양은 계속 늘어납니다. 그런데 최근 사례들이 보여주는 핵심은 조금 다릅니다. 병목은 “AI가 취약점을 찾을 수 있는가"가 아니라 그 후보를 누가, 어떤 기준으로, 얼마나 빨리 확정·기각·패치·공개할 것인가입니다.
최근 2026-05-11 개발 뉴스에서도 비슷한 신호를 다뤘습니다. AI 보안 도구가 여러 “confirmed vulnerability"를 제시했지만 maintainer 검토 후 실제 보안 취약점은 일부로 줄고, 나머지는 false positive나 일반 버그로 분류되는 상황이 반복되고 있습니다. 이건 AI 보안 도구가 쓸모없다는 뜻이 아닙니다. 오히려 반대입니다. 공격자도 같은 자동 탐색 능력을 쓰게 될 것이므로, 방어팀도 이 능력을 받아들여야 합니다. 다만 받아들이는 방식은 자동 공개나 자동 패치가 아니라 AI Vulnerability Triage Pipeline이어야 합니다.
이 흐름은 Synthetic Replay + Eval Gate, Test Evidence Pipeline, Review Ops, Policy Shadow Rollout과 같은 축 위에 있습니다. AI가 발견을 늘릴수록 팀의 경쟁력은 발견량이 아니라 판정 처리량과 증거 품질에서 갈립니다.
이 글에서 얻는 것
- AI 보안 스캐너를 붙일 때 왜 triage pipeline이 먼저 필요한지 이해할 수 있습니다.
- 취약점 후보를 confirmed, duplicate, bug, hardening, false positive로 나누는 운영 기준을 잡을 수 있습니다.
- 재현 증거, 심각도 판정, 패치 검증, 공개 정책을 하나의 큐로 묶는 실무 기준을 가져갈 수 있습니다.
핵심 개념/이슈
1) AI 리포트는 취약점이 아니라 후보 신호다
AI 도구가 “SQL injection 가능성”, “path traversal”, “auth bypass” 같은 문장을 만들었다고 해서 바로 취약점이 확정되는 것은 아닙니다. 보안 리포트가 되려면 최소한 아래 질문에 답해야 합니다.
- 영향을 받는 버전과 설정은 무엇인가?
- 공격자가 필요한 권한과 전제조건은 무엇인가?
- 실제로 민감 데이터 접근, 권한 상승, 서비스 중단 같은 영향이 발생하는가?
- 재현 입력 또는 최소 PoC가 있는가?
- 기존 테스트나 정책이 왜 이 경로를 잡지 못했는가?
- 패치하면 어떤 동작이 바뀌고, 회귀 위험은 무엇인가?
이 답이 없으면 아직 “후보"입니다. 후보를 무시하자는 뜻은 아닙니다. 후보를 후보로 다뤄야 한다는 뜻입니다. 내부 큐에서는 candidate 상태로 받고, 재현이 되면 confirmed, 이미 알려진 문제면 duplicate, 보안 영향이 없으면 bug 또는 hardening, 근거가 틀리면 false_positive로 닫습니다.
2) false positive보다 더 큰 문제는 처리 큐 붕괴다
AI 스캐너 도입 논의는 보통 false positive 비율에 집중합니다. 물론 중요합니다. 하지만 실무에서는 큐 붕괴가 더 먼저 옵니다. 리포트가 주당 10건일 때는 보안 담당자가 다 읽을 수 있습니다. 주당 100건이 되면 중복과 낮은 심각도 후보가 P1 후보를 가립니다. 주당 500건이 되면 팀은 알림을 무시하기 시작합니다.
초기 지표는 아래 다섯 개면 충분합니다.
| 지표 | 권장 시작 기준 | 의미 |
|---|---|---|
| confirmed rate | 15~40% | 너무 낮으면 프롬프트·룰 품질 문제 |
| duplicate rate | 20% 이하 | 중복 병합이 안 되면 큐가 부풀어 오름 |
| median triage time | P1 24시간, P2 3영업일 | 판정 대기 시간이 길면 발견 가치가 감소 |
| P1 SLA miss | 5% 이하 | 고위험 후보가 방치되는지 확인 |
| patch verification pass rate | 90% 이상 | 수정 PR이 실제 재현 케이스를 닫는지 확인 |
여기서 confirmed rate가 낮다고 바로 AI 도구를 버릴 필요는 없습니다. 후보 생성 범위를 줄이거나, 특정 취약점 클래스만 허용하거나, 재현 템플릿 없이는 큐에 넣지 않도록 바꾸면 됩니다. 중요한 것은 숫자 없이 “AI가 시끄럽다"고 느끼는 상태를 벗어나는 것입니다.
3) triage packet은 자유 서술 리포트보다 강하다
AI 보안 리포트를 이메일이나 Markdown 장문으로 받으면 처리 품질이 흔들립니다. 어떤 리포트는 근거가 있고, 어떤 리포트는 추측만 있으며, 어떤 리포트는 같은 문제를 다른 이름으로 반복합니다. 그래서 후보는 구조화된 triage packet으로 받아야 합니다.
finding_id: ai-sec-20260513-017
status: candidate
class: path_traversal
affected_component: file-export-service
affected_versions: ["2.4.0", "2.4.1"]
entrypoint: "GET /exports/{fileName}"
attacker_precondition: "authenticated user with export:read"
impact_claim: "read arbitrary tenant export files"
repro_steps:
- "create export as tenant_a"
- "request ../tenant_b/report.csv with crafted fileName"
expected_security_boundary: "tenant_id must match session tenant"
evidence_refs:
- "test: ExportPathTraversalCandidateTest#blocksParentDirectory"
- "trace: sec-replay-1821"
confidence: medium
owner: security-platform
embargo: internal
이 구조가 있으면 duplicate merge, severity routing, 재현 자동화, 패치 검증이 쉬워집니다. Reproduction Bundle처럼 재현 가능한 증거 묶음과 연결하면 더 좋습니다. 핵심은 AI가 만든 설명을 그대로 믿는 것이 아니라, 설명을 검증 가능한 입력으로 바꾸는 것입니다.
triage packet에서 바로 갈라야 하는 5가지 상태
운영 큐가 커질수록 모든 후보를 open 하나로 두는 방식은 금방 무너집니다. 저는 최소한 아래 5개 상태를 처음부터 나누는 편이 낫다고 봅니다. 상태를 나누면 보안팀이 모든 후보를 직접 붙잡고 있지 않아도, 어떤 후보가 제품팀 수정으로 넘어가고 어떤 후보가 더 많은 증거를 기다리는지 분명해집니다.
| 상태 | 의미 | 다음 액션 | 닫기 기준 |
|---|---|---|---|
candidate | AI가 제시했지만 재현과 영향이 아직 불충분함 | 재현 입력, 영향 버전, 공격 전제조건 보강 | 재현 실패 또는 confirmed 승격 |
confirmed | 보안 영향과 재현 경로가 확인됨 | severity 부여, owner 할당, 패치/완화 계획 수립 | 패치 검증 또는 risk acceptance |
duplicate | 이미 추적 중인 취약점과 같은 원인임 | 기존 이슈에 증거 병합 | 원본 이슈에 evidence ref 추가 |
hardening | 즉시 취약점은 아니지만 방어 강화 가치가 있음 | 보안 backlog 또는 플랫폼 개선 과제로 이동 | 별도 작업 티켓 생성 |
false_positive | 전제조건이 틀렸거나 보안 경계 위반이 아님 | 룰·프롬프트·스캐너 allow/deny 조건 보정 | 재발 방지 note 기록 |
이 구분에서 중요한 점은 false_positive를 실패로만 보지 않는 것입니다. 잘 정리된 오탐은 다음 스캔 품질을 올리는 학습 데이터가 됩니다. 반대로 hardening을 전부 취약점처럼 다루면 SLA가 터지고, 실제 P1 후보가 묻힙니다. 취약점 큐와 개선 backlog를 분리해야 운영자가 매일 같은 논쟁을 반복하지 않습니다.
실무 적용
1) severity rubric을 먼저 고정한다
AI 도구가 후보를 만들 때마다 “이건 심각해 보인다"는 문장에 끌리면 큐가 흔들립니다. 조직은 취약점 등급표를 먼저 정해야 합니다.
- P0: 인증 없이 원격 코드 실행, 대규모 고객 데이터 유출, production credential 탈취 가능
- P1: 권한 상승, 테넌트 간 데이터 접근, 결제·정산 무결성 훼손, 인증 우회
- P2: 제한된 정보 노출, 특정 권한 보유자의 기능 악용, DoS 가능성
- P3: hardening 필요, 방어 우회 가능성 낮음, 보안 영향 불명확한 일반 버그
권장 SLA는 P0 즉시 paging, P1 24시간 내 1차 판정, P2 3영업일, P3 주간 batch입니다. 모든 후보를 같은 속도로 보려 하면 중요한 것을 놓칩니다. 이 기준은 OWASP Top 10 대응 체크리스트나 CI/CD 보안의 기본 게이트와 함께 맞춰야 합니다.
2) 자동 패치보다 자동 재현을 먼저 붙인다
AI가 취약점 후보를 찾고 바로 PR까지 만들 수 있으면 매력적으로 보입니다. 하지만 보안 패치는 일반 리팩터링보다 더 위험합니다. 잘못된 패치는 취약점을 닫지 못하거나, 정상 고객 플로우를 깨거나, 취약점 위치를 외부에 더 선명하게 드러낼 수 있습니다.
따라서 초기 순서는 아래가 낫습니다.
- AI 후보 생성
- triage packet 생성
- 최소 재현 테스트 또는 exploitability check 생성
- 보안 owner 1차 판정
- 패치 PR 생성 또는 수동 할당
- 재현 테스트가 실패에서 성공으로 바뀌는지 검증
- regression/security test를 CI에 고정
- 공개·고객 공지·CVE 여부 판단
이 구조에서는 AI가 코드를 고치기 전, 먼저 “문제가 실제로 있는지"를 증명해야 합니다. Test Evidence Pipeline이 중요한 이유도 여기에 있습니다.
3) 공개 리포트와 내부 후보를 분리한다
오픈소스 프로젝트나 외부 vendor에 AI 리포트를 보낼 때는 특히 조심해야 합니다. 근거 없는 장문 리포트는 maintainer의 시간을 빼앗고, 프로젝트와 도구 모두에 대한 신뢰를 떨어뜨립니다. 내부 후보 큐에서는 불완전한 신호도 받을 수 있지만, 외부 제출 전에는 최소 기준을 통과해야 합니다.
외부 리포트 전 필수 조건은 아래 정도로 잡을 수 있습니다.
- 최소 재현 입력 또는 환경 설명
- 영향 범위와 버전 명시
- 공격 전제조건 명시
- 보안 영향과 일반 버그의 구분
- 중복 리포트 검색 결과
- 공개 가능 정보와 비공개로 남겨야 할 정보 구분
고객 데이터, 인증 우회, 공급망 키, 0-day 가능성이 있는 경우에는 embargo 정책이 필요합니다. AI가 발견했다는 사실 자체가 공개되어도 공격 힌트가 될 수 있기 때문입니다.
트레이드오프/주의점
첫째, AI 보안 스캐너는 보안팀을 대체하지 않습니다. 후보 생성 비용을 낮추는 도구이지, 책임 있는 판정자를 없애는 도구가 아닙니다.
둘째, false positive를 너무 공격적으로 줄이면 missed critical이 늘 수 있습니다. Policy Shadow Rollout에서처럼 오탐과 미탐을 함께 봐야 합니다.
셋째, 자동 패치 PR은 내부 저장소에서는 유용할 수 있지만 외부 오픈소스에는 조심해야 합니다. maintainer가 원하는 것은 그럴듯한 패치보다 명확한 재현과 영향 설명일 때가 많습니다.
넷째, AI 도구에 민감 코드와 비밀값을 그대로 넣으면 새로운 유출 표면이 됩니다. 보안 분석 환경은 read-only, secret redaction, 네트워크 제한, audit log를 기본으로 둬야 합니다.
다섯째, CVE·고객 공지·엠바고 판단은 기술 문제가 아니라 신뢰 운영 문제입니다. 탐지 자동화가 빨라질수록 공개 정책이 느슨하면 사고 비용이 커집니다.
체크리스트 또는 연습
운영 체크리스트
- AI 보안 후보를
candidate/confirmed/duplicate/bug/hardening/false_positive로 분류한다. - triage packet에 affected version, precondition, impact, repro, evidence ref가 있다.
- P0/P1/P2/P3 severity rubric과 SLA가 문서화되어 있다.
- duplicate merge 기준과 owner routing 규칙이 있다.
- 패치 PR에는 재현 테스트와 회귀 테스트가 함께 붙는다.
- 외부 공개 전 human gate와 embargo 판단이 있다.
- confirmed rate, duplicate rate, median triage time, SLA miss, patch verification pass rate를 본다.
연습
- 최근 보안 스캐너 또는 코드 리뷰에서 나온 후보 20개를 골라 위 여섯 상태로 다시 분류해 보세요. false positive보다 duplicate와 hardening 비율이 더 클 수 있습니다.
- 가장 자주 나오는 취약점 클래스 하나를 골라 triage packet 템플릿을 작성하세요. 예를 들어 path traversal, SSRF, IDOR, SQL injection 중 하나면 충분합니다.
- P1 후보가 들어왔을 때 24시간 안에 누가 재현, 영향 판정, 고객 영향 범위, 패치 owner를 맡는지 runbook으로 써 보세요.
- AI가 만든 보안 리포트를 외부 maintainer에게 보내기 전 체크리스트를 만들어 보세요. 재현 없는 리포트는 내부 후보로만 남기는 규칙을 포함해야 합니다.
정리하면 AI 보안 도구의 경쟁력은 더 무서운 문장을 만드는 데 있지 않습니다. 좋은 팀은 AI가 만든 후보를 구조화하고, 재현하고, 심각도를 판정하고, 패치를 검증하고, 공개 경계를 지킵니다. 앞으로 취약점 탐지는 더 자동화될 가능성이 큽니다. 그래서 더더욱 판정과 책임은 운영 체계로 내려와야 합니다.
💬 댓글