사전 CVE
표준

CVE

gabury1고친 사람 github-actions[bot]

CVE 는 세상에 알려진 보안 구멍마다 번호를 하나씩 붙여 줍니다. 여러 곳이 같은 구멍을 같은 번호로 부르게 하려는 것입니다. 개발자는 그 번호로 자기 서비스의 라이브러리가 걸리는지 찾아봅니다.

쉽고 빠른 이해

CVE 는 공개된 보안 구멍에 붙이는 이름표 번호입니다. CVE-2021-44228 은 자바 로깅 라이브러리 Log4j 에서 나온 구멍 하나를 가리킵니다.

이게 없으면 같은 구멍을 회사마다 다른 이름으로 부릅니다. 그러면 오늘 뜬 경고가 지난주에 고친 그 구멍인지 알 수 없습니다. 번호가 하나로 정해져 있으면 공지, 검사 결과, 패치 기록을 한 번호로 맞춰 볼 수 있습니다.

돌아가는 순서는 이렇습니다.

  1. 구멍을 고칠 회사나 단체가 번호를 하나 매겨 둡니다
  2. 고치는 동안에는 번호만 있고 내용은 비어 있습니다
  3. 고친 버전이 나오면 설명과 참고 링크를 채워 공개합니다
  4. 검사 도구와 공지가 그 번호로 구멍을 부릅니다

번호는 이름표일 뿐입니다. 얼마나 위험한지는 번호가 알려 주지 않습니다. 번호가 아직 안 매겨진 구멍은 목록에 아예 없습니다.

상세

CVE 는 Common Vulnerabilities and Exposures 를 줄인 이름입니다. 취약점은 공격자가 파고들어 소프트웨어가 원래 하지 않을 일을 하게 만드는 결함입니다. 흔히 보안 구멍이라고도 부릅니다. CVE 는 공개된 취약점마다 번호를 매겨 모아 둔 목록입니다.

이 절은 번호가 어떻게 생겼는지, 누가 언제 매기는지, 기록에 무엇이 들고 무엇이 빠지는지를 차례로 봅니다. 예로는 CVE-2021-44228 을 씁니다. 마지막에는 백엔드 개발자가 이 번호를 어디서 만나는지를 봅니다.

목록을 관리하는 곳은 미국의 비영리 연구기관 MITRE 입니다. 비용은 미국 정부 기관 CISA(Cybersecurity and Infrastructure Security Agency)가 댑니다.

번호의 생김새

CVE 번호는 줄표로 나뉜 세 칸입니다. 각 칸은 이런 뜻입니다.

칸 예 뜻
머리 CVE 이 목록의 번호라는 표시
연도 2021 대개 번호가 매겨진 해
일련번호 44228 그 해 안에서 겹치지 않게 매긴 수

연도는 대개 번호가 매겨진 해입니다. 구멍을 찾은 해가 아닙니다. 그래서 번호를 먼저 매겨 둔 채 공개가 늦어지면 번호의 연도가 공개된 해보다 앞섭니다.

예외는 번호 없이 먼저 공개된 구멍입니다. 이런 구멍은 뒤늦게 번호가 매겨지므로 매겨진 해가 아니라 공개된 해를 붙입니다.

일련번호는 숫자 네 개 이상으로 적습니다. 한 해에 매기는 번호가 만 개를 넘으면 숫자가 다섯 개 이상인 번호가 나옵니다. 처음에는 숫자 네 개로 고정이었습니다. 번호가 모자라지 않도록 길이 제한을 푼 것이 지금 규칙입니다.

이 점은 번호를 다루는 코드에 바로 걸립니다. 아래는 번호가 맞는 꼴인지 검사하는 정규 표현식 두 줄입니다.

^CVE-\d{4}-\d{4}$    // 44228 은 탈락
^CVE-\d{4}-\d{4,}$   // 44228 도 통과

첫 줄은 일련번호를 숫자 네 개로 못박았습니다. 그래서 숫자가 다섯 개인 CVE-2021-44228 을 틀린 번호로 봅니다. 둘째 줄은 숫자가 네 개 이상이면 받아들입니다. 번호를 저장하는 칼럼의 길이를 정할 때도 같은 이유로 넉넉하게 잡습니다.

번호를 나눠 주는 곳

번호를 매길 권한을 받은 조직을 CNA(CVE Numbering Authority, CVE 번호 발급 기관)라고 부릅니다. 한 곳이 세상의 모든 구멍에 번호를 매기면 느립니다. 제품을 잘 모르는 채로 설명을 써야 하기도 합니다. 그래서 소프트웨어를 만드는 회사나 오픈 소스 재단이 CNA 가 되어 자기 제품의 구멍에 직접 번호를 매깁니다.

CNA 는 대개 구멍을 공개하기 전에 번호를 매겨 둡니다. 고친 버전과 공지를 같은 날 내보내려면 그때 붙일 번호가 미리 있어야 하기 때문입니다. 매겨 두었지만 아직 내용을 안 채운 번호는 목록에 「예약됨」으로 보입니다.

sequenceDiagram
    participant 발견자
    participant CNA
    participant 목록 as CVE 목록
    participant 개발자
    발견자->>CNA: 구멍을 조용히 알린다
    CNA->>목록: 번호를 매겨 둔다
    CNA->>목록: 설명과 참고 링크를 채워 공개한다
    목록-->>개발자: 번호로 구멍을 알린다

그림의 발견자는 구멍을 처음 찾아낸 보안 연구자나 그 제품을 쓰던 사람입니다. 찾은 사람은 먼저 CNA 에만 조용히 알립니다. 고친 버전이 나온 뒤에 함께 공개합니다. 이 순서를 책임 있는 공개라고 부릅니다.

기록이 거치는 상태

번호 하나에 딸린 기록을 CVE 기록이라고 부릅니다. 기록은 셋 중 한 상태에 있습니다.

상태 뜻 개발자가 할 일
예약됨 (RESERVED) 번호만 매겨 두고 내용은 아직 공개하지 않았다 고친 버전이 나오기를 기다린다
공개됨 (PUBLISHED) 설명과 참고 링크가 채워졌다 우리가 쓰는 버전이 걸리는지 확인한다
거부됨 (REJECTED) 중복이거나 보안 결함이 아니어서 번호를 무른다 무시한다

CVE-2021-44228 은 공개됨 상태입니다. 설명과 참고 링크가 채워져 있어 누구나 읽을 수 있습니다.

거부된 번호도 목록에서 지워지지 않고 거부됨으로 남습니다. 공지에서 낯선 번호를 봤다면 목록에서 상태부터 확인합니다.

기록에 드는 것과 빠지는 것

CVE 기록의 뼈대는 세 가지입니다. 번호, 구멍을 설명하는 짧은 글, 그리고 참고 링크입니다. 참고 링크는 제조사의 보안 공지나 고친 코드처럼 자세한 내용이 있는 곳을 가리킵니다.

CVE 기록이 맡는 일은 구멍을 가리키는 것까지입니다. 얼마나 위험한지 따지고 대응을 정리하는 일은 이 번호를 받아 쓰는 쪽이 맡습니다. 그래서 CVE 는 취약점 데이터베이스라기보다 공통 번호입니다. 여러 데이터베이스와 도구가 같은 구멍을 가리키도록 이어 줍니다.

관계형 데이터베이스로 치면 여러 테이블이 함께 쓰는 키입니다.

위험도 점수와 분류를 덧붙이는 대표적인 곳이 NVD(National Vulnerability Database, 미국 국가 취약점 데이터베이스)입니다. 번호 하나를 두고 곳마다 덧붙이는 것이 다릅니다.

곳 번호에 덧붙이는 것
CVE 기록 짧은 설명 · 참고 링크
NVD 위험도 점수 · 약점 분류 · 영향을 받는 제품과 버전
제조사 보안 공지 고친 버전 · 당장 쓸 수 있는 우회 방법
의존성 검사 도구 우리 프로젝트에서 걸리는 라이브러리와 버전

표의 둘째 줄에 나오는 위험도 점수가 CVSS(Common Vulnerability Scoring System, 공통 취약점 점수 체계)입니다. 0점부터 10점까지 매겨 급한 것부터 고치게 돕습니다.

약점 분류에는 CWE(Common Weakness Enumeration, 공통 약점 목록) 번호가 붙습니다. CWE 는 코드가 잘못 짜이는 방식마다 번호를 붙인 목록입니다. CVE 번호가 「어느 제품의 어느 구멍」을 가리킨다면 CWE 번호는 「어떤 종류의 실수」를 가리킵니다. CVE 목록을 관리하는 MITRE 가 이 목록도 관리합니다.

백엔드 개발자가 번호를 만나는 곳

가장 자주 만나는 곳은 의존성 스캔입니다. 빌드 때 도구가 우리 프로젝트가 쓰는 라이브러리의 이름과 버전을 읽습니다. 그 버전에 알려진 CVE 가 있으면 번호와 함께 경고를 냅니다.

컨테이너 이미지를 검사할 때도 같습니다. 이미지 안에 깔린 운영체제 패키지의 버전을 읽고 CVE 번호로 맞춰 봅니다. 라이브러리의 릴리스 노트에도 「이 버전에서 CVE 번호 몇 번을 고쳤다」가 적힙니다.

CVE-2021-44228 을 예로 들어 봅니다. 자바 로깅 라이브러리 Log4j 에서 나온 구멍입니다. 로그에 적힌 문자열 하나로 원격에서 서버가 남의 코드를 실행하게 만들 수 있었습니다. 공지가 나오자 많은 팀이 이 번호 하나로 자기 서비스를 뒤졌습니다. 어느 서비스가 걸리는 버전을 쓰는지, 고친 버전으로 올렸는지를 번호로 확인했습니다.

번호가 알려 주지 않는 것

번호가 붙었다고 우리 서비스가 위험하다는 뜻은 아닙니다. 걸리는 버전을 쓰더라도 구멍이 난 기능을 안 부르면 공격이 안 닿을 수 있습니다. 반대로 경고가 없다고 안전하다는 뜻도 아닙니다.

번호가 아직 안 매겨진 구멍은 목록에 없습니다. 번호만 매겨 둔 구멍은 예약됨으로 번호만 보이고 내용은 비어 있습니다. 제조사가 고치기 전에 공격에 먼저 쓰이는 구멍을 제로데이라고 부릅니다. 이런 구멍은 공격이 드러난 뒤에야 번호가 매겨집니다.

얼마나 급한지도 번호만으로는 모릅니다. 점수는 앞에서 본 CVSS 로 따로 봅니다. 실제로 공격에 쓰였는지도 번호와 따로 확인합니다. 번호는 같은 구멍을 같은 이름으로 부르게 해 줄 뿐입니다. 고칠지 말지와 언제 고칠지는 경고를 받은 팀이 판단합니다.

관련 항목

CVE 와 짝을 이루는 보안 식별 체계

CWE · CPE · CAPEC · MITRE ATT&CK

CVE 번호에 위험도를 덧붙이는 점수·목록

CVSS · EPSS · NVD · CISA KEV · OSV

CVE 번호를 매기거나 관리하는 기관

MITRE · CNA · CISA · NIST · FIRST

CVE 번호로 취약점을 찾는 검사 방법

의존성 스캔 · 소프트웨어 구성 분석 · 컨테이너 이미지 스캔 · SBOM · 취약점 스캐너 · 침투 테스트

CVE 번호가 붙은 이름난 취약점

Log4Shell · Heartbleed · Shellshock · Spectre · Meltdown

CVE 기록에 자주 적히는 결함 종류

버퍼 오버플로 · SQL 인젝션 · 교차 사이트 스크립팅 · 권한 상승 · 원격 코드 실행 · 사용 후 해제

번호가 붙은 뒤 이어지는 대응 단계

취약점 · 책임 있는 공개 · 제로데이 · 익스플로잇 · 패치 · 보안 공지 · 취약점 관리

다른 이름: Common Vulnerabilities and Exposures · CVE ID · CVE 번호 · 공통 취약점 및 노출