취약점 우선순위:KEV·EPSS·도달성의 조합
3000 대 20의 격차
전량 스캔이 3000건을 보고하고 그중 '높음'과 '치명적'이 600건. 보안팀이 목록을 개발에 넘기면, 개발은 그것을 한 번 보고 지극히 타당한 질문을 던집니다. 어느 것부터 고치나요?
이 질문에 답이 없으면 다음에 벌어지는 일은 대개 둘 중 하나입니다. 목록이 무기한 보류되거나, 심각도 순으로 기계적으로 처리하며 실제 리스크가 낮은 항목에 많은 노력을 쓰거나. 둘 다 바람직하지 않습니다.
우선순위 방법론은 이 격차를 메우기 위해 존재합니다. 핵심은 이것입니다. 단일 지표로는 답을 낼 수 없습니다. 각각이 답하는 질문이 애초에 다르기 때문입니다.
네 가지 기준, 네 가지 질문
### CVSS: 이 취약점은 이론상 얼마나 심각한가
CVSS는 취약점 자체의 기술적 특성 — 공격 경로, 복잡도, 필요 권한, 영향 범위 — 을 평가합니다. 조직을 넘어 비교 가능한 심각도 기준선을 제공한다는 데 가치가 있습니다.
한계: CVSS가 기술하는 것은 '악용되면 어떻게 되는가'이며, '악용될 것인가'나 '우리 환경에서 악용 가능한가'는 다루지 않습니다. 9.8짜리 취약점이라도 공개된 익스플로잇이 없고 해당 기능이 우리 구성에서 도달 불가라면, 실제 리스크는 대규모로 악용 중인 6.5보다 낮을 수 있습니다.
CVSS를 유일한 정렬 기준으로 삼는 것은 취약점 관리에서 가장 흔한 실수입니다.
### KEV: 이 취약점은 지금 악용되고 있는가
CISA가 유지하는 알려진 악용 취약점 목록(Known Exploited Vulnerabilities)에는 실제 공격에 사용되고 있다는 확실한 증거가 있는 취약점이 기록됩니다.
이는 이진적이고 신뢰도가 높은 신호입니다. KEV에 있다는 것은 공격이 이미 일어나고 있다는 뜻이지 이론적 추론이 아닙니다. 기업 입장에서 KEV에 해당하는 취약점은 CVSS 값과 무관하게 최우선으로 삼아야 합니다. 실제로 공격받고 있는 7.5가, 아무도 손대지 않은 9.8보다 훨씬 급합니다.
KEV의 한계는 포괄 범위입니다. 관측된 악용만 담기 때문에 새로 등장했거나 표적 공격에 쓰이는 취약점은 즉시 나타나지 않습니다.
### EPSS: 향후 30일 내 악용될 확률은 얼마인가
EPSS(Exploit Prediction Scoring System)는 FIRST가 유지하며, 머신러닝 모델로 특정 취약점이 향후 30일 내 악용될 확률을 0에서 1 사이 값으로 예측합니다.
KEV가 남기는 공백을 메우는 지표입니다. KEV는 '이미 악용되고 있다'를, EPSS는 '앞으로 악용될 수 있다'를 알려줍니다. 모델 입력에는 취약점 특성, 익스플로잇 코드의 공개 여부, 커뮤니티 언급량 등이 포함됩니다.
실무적 가치: 대다수 취약점의 EPSS 값은 매우 낮고(수천분의 일 수준), 경계해야 할 것은 값이 뚜렷하게 높은 소수입니다. 덕분에 수천 건 가운데 높은 확률의 대상을 빠르게 좁힐 수 있습니다.
### 도달성 분석: 우리 코드에서 이 취약점이 발동할 수 있는가
앞의 세 가지는 모두 '취약점 자체에 관한' 기준이지만, 도달성 분석이 답하는 것은 우리에 관한 질문입니다. 취약한 함수를 우리 코드가 실제로 호출하는가. 호출 경로의 인자를 공격자가 조작할 수 있는가. 발동 조건이 우리 설정에서 성립하는가.
작업량을 크게 줄일 수 있는 유일한 기준이 이것입니다. 실무에서는 많은 컴포넌트 취약점이 한 번도 쓰지 않는 기능 영역에 있습니다. 의존성으로는 존재하지만 그 코드는 결코 실행되지 않는 상태입니다. 이를 식별하면 대응 목록을 한 자릿수 줄일 수 있습니다.
VEX가 존재하는 이유도 여기 있습니다. '영향을 받지 않음'이라는 판단을 표준화해 출력함으로써, 하류가 같은 분석을 반복하지 않게 하는 것입니다.
조합해서 쓰기
네 기준의 올바른 관계는 '하나를 고르는 것'이 아니라 계층적 걸러내기입니다.
1계층 · 즉시 수정: KEV 해당 항목. 악용이 진행 중이고 논의의 여지가 없으며 긴급 절차로 들어갑니다.
2계층 · 이번 주기 내 수정: EPSS가 높고(자체 임계값 초과) 도달성이 '발동 가능'으로 확인된 것. 아직 대규모 악용에 이르지는 않았지만 확률이 뚜렷하고 우리 환경에 실제 리스크가 존재하는 층입니다.
3계층 · 계획적 수정: CVSS가 높고 도달 가능하지만 EPSS는 낮은 것. 실재하는 리스크이나 외부의 급박한 압력은 없으므로 통상 반복에 넣습니다.
4계층 · 기록하고 모니터링: 도달성 판단이 '영향 없음'으로 나온 것. 무시하는 것이 아니라 판단 근거를 기록하고(VEX 생성) 환경이 바뀌면 재평가합니다. 오늘 도달 불가인 코드가 내일의 리팩터링으로 도달 가능해질 수 있습니다.
이 계층화의 핵심 이득은 '3000건 미처리'를 '십수 건 긴급 + 수십 건 이번 주기 + 나머지는 계획과 모니터링'으로 바꾸는 것이며, 이것이 팀이 실제로 실행할 수 있는 규모입니다.
실무의 세부 사항
임계값은 직접 정하고, 남의 숫자를 옮겨 쓰지 마세요. EPSS 몇 점을 높다고 볼지, CVSS를 어디서부터 잡을지는 업종, 노출면, 팀 처리 역량에 따라 달라집니다. 대외 핵심 서비스와 사내 도구의 임계값이 같아야 할 이유는 없습니다.
판단을 축적하고 같은 작업을 반복하지 마세요. 팀이 시간을 들여 “이건 영향받지 않는다”고 결론지었다면, 그 결론은 기록되고 재사용되며 환경 변화 시 다시 검증되어야 합니다. VEX가 바로 그 표준 그릇입니다.
수정만이 선택지는 아닙니다. 버전 업그레이드, 패치, 설정을 통한 완화, 격리, 컴포넌트 교체. 각각 비용과 소요 시간이 크게 다릅니다. 우선순위의 산출물은 “이건 고쳐야 함”이 아니라 “이건 어떤 대응 경로를 택할 것인가”여야 합니다.
전체 추세도 보세요. 개별 대응 밖에서 주목할 것은 재고가 수렴하고 있는지입니다. 미처리 건수의 추이, 평균 수정 시간(MTTR), 기한 초과 비율. 이 지표들이야말로 취약점 관리 체계가 개선되고 있는지 나빠지고 있는지를 알려줍니다.
'찾아냈다'에서 '처리해냈다'로
취약점 관리의 성숙도는 스캐너가 몇 건을 보고했는가가 아니라, 보고된 항목 중 얼마나 많은 비율이 타당하게 처리되었는가로 나타납니다.
탐지 능력은 더 이상 병목이 아닙니다. 현재 도구가 보고할 수 있는 양은 어떤 팀의 처리 역량도 넘어섭니다. 진짜 병목은 판단입니다. 어느 것이 진짜 리스크인지, 어느 것은 기다려도 되는지, 어느 것은 애초에 고칠 필요가 없는지. 그리고 그 판단의 질은 이 네 기준을 조합해 쓰고 있는지에 달려 있습니다.
---
관련 글: CI 파이프라인에서 SCA 게이트 설정 · 오픈소스·SBOM 가이드의 CVSS·EPSS·VEX 항목 · CleanSource SCA의 도달성 분석


