보안 취약점의 식별과 평가 기준
0. 들어가면서
SW 보안 공부를 올해 목표로 삼았다. 모르는 개념들이 많아서 공부를 시작하기 전 용어에 대해 정리할 필요를 느꼈다. 이번 글을 통해 간단하게 정리해봤다.
1. CVE (Common Vulnerabilities and Exposures)
CVE(Common Vulnerabilities and Exposures)는 소프트웨어 보안 결함에 대한 표준화된 식별자 목록이다. 1999년 9월에 처음 공개되었으며, 미국의 MITRE라는 회사가 미국 국토안보부(DHS)의 지원을 받아 CVE 시스템을 개발했다. CVE 시스템의 주된 목적은 서로 다른 보안 데이터베이스와 도구 간에 데이터를 쉽게 공유하고 취약점을 명확히 식별하기 위함이다. CVE 시스템에는 리스크, 영향도, 버그 수정과 관련된 기술적인 데이터나 정보가 없다. 보안 취약점에 관련된 자세한 정보는 다른 데이터베이스 사이트에서 확인할 수 있다.
각 보안 취약점에 고유한 식별 번호(CVE ID)를 부여하여, 사용자가 특정 취약점을 정확히 인식할 수 있도록 한다. 보안 도구들이 CVE ID를 사용함으로써 서로 정보를 교환하고 조직의 보안 상태를 점검하는 기준을 제공한다. CVE ID는 CVE-YYYY-NNNN 형식을 따른다.
- 접두사: 항상
CVE-로 시작한다. - 연도(YYYY): 해당 취약점이 할당되거나 공개된 연도를 나타낸다.
- 일련번호(NNNN): 최소 4자리 숫자로 구성된다. 과거에는 4자리로 제한되었으나, 취약점 수가 급증함에 따라 2014년 문법 변경을 통해 필요시 5자리, 6자리 이상으로 확장될 수 있게 되었다.
CVE 항목에는 ID 외에도 취약점에 대한 간단한 설명(Description)과 관련 보고서나 권고문으로 연결되는 참조(References)가 포함된다. 아직 세부 정보가 공개되지 않은 상태에서 번호만 미리 할당된 경우 “RESERVED” 상태로 표시된다.
2. CWE (Common Weakness Enumeration)
CWE(Common Weakness Enumeration)는 소프트웨어와 하드웨어에서 발생하는 ‘보안 취약점의 근본적인 원인(유형)들을 모아 놓은 사전’이다. 미국 국토안보부(DHS)의 지원을 받아 MITRE(마이터) 코퍼레이션에서 관리하고 있다. CWE는 아주 포괄적인 개념부터 아주 구체적인 코드 레벨의 실수까지 트리(Tree) 구조로 분류되어 있다. 대표적인 CWE는 다음과 같다.
- CWE-79 - 부적절한 입력값 무효화 (Cross-Site Scripting, XSS)
- CWE-89 - SQL 명령어에 사용되는 특수 요소의 부적절한 무효화 (SQL Injection)
- CWE-78 - OS 명령어에 사용되는 특수 요소의 부적절한 무효화 (OS Command Injection)
- CWE-20 - 부적절한 입력값 확인 (Improper Input Validation - 아주 광범위한 원인)
- CWE-119 - 메모리 버퍼의 범위를 벗어난 연산 (Buffer Overflow - C/C++에서 자주 발생)
보안 업계에서는 매년 (또는 주기적으로) 해커들이 가장 많이 악용하고, 치명적인 피해를 입히는 취약점 유형 25가지를 순위를 매긴 ‘CWE Top 25 Most Dangerous Software Weaknesses’라는 리스트를 발표한다.
3. CNA (CVE Numbering Authority)
CVE 번호는 CNA(CVE Numbering Authority)라고 불리는 승인된 기관들에 의해 할당된다. MITRE 외에도 Microsoft, Oracle, Red Hat, Google 등 주요 IT 벤더와 연구 기관들이 CNA로 지정되어 자체 제품이나 발견된 취약점에 대해 CVE 번호를 부여할 권한을 가지고 있다.
CVE가 할당되려면 해당 결함이 독립적으로 수정 가능해야 하고, 벤더가 이를 인정하거나 문서화해야 하며, 하나의 코드베이스에 영향을 미쳐야 한다. 취약점이 발견되면 CNA에 보고되고, CNA는 이를 검토하여 CVE ID를 할당한다. 이후 벤더가 패치를 준비하는 동안 비공개(엠바고) 상태로 유지되다가, 해결책이 마련되면 공개된다.
4. CVSS (Common Vulnerability Scoring System)
CVSS(Common Vulnerability Scoring System)는 컴퓨터 시스템의 보안 취약점 심각도를 평가하고 수치화하기 위한 개방형 프레임워크이자 표준이다. 앞서 설명한 CVE가 취약점을 식별하는 ‘이름(고유 번호)’이라면, CVSS는 그 취약점이 얼마나 위험한지를 알려주는 ‘점수’다. CVSS 4.0 버전은 2023년 11월에 공식적으로 공개되었다.
CVSS는 취약점의 심각도를 0.0부터 10.0까지의 점수로 나타내며, 숫자가 클수록 더 치명적이고 위험한 취약점을 의미한다. 이 수치는 관리자가 쉽게 파악할 수 있도록 낮음(Low), 중간(Medium), 높음(High), 심각(Critical)과 같은 정성적인 등급으로 변환되어 사용된다.
CVSS 4.0 버전 명세에서 취약점 심각도 점수를 정하는 평가 지표(metrics)는 다음과 같다.
- 기본 지표 (Base Metrics): 환경이나 시간에 따라 변하지 않는 취약점 고유의 위험성을 평가한다.
- 익스플로잇(exploit) 가능성: 공격 경로, 복잡성, 필요 권한 등 공격이 얼마나 쉬운지 평가한다.
- 영향도: 공격 성공 시 ‘취약한 시스템’과 연결된 ‘후속 시스템’이 받는 피해를 각각 분리하여 기밀성, 무결성, 가용성 관점에서 평가를 내린다.
- 위협 지표 (Threat Metrics): 시간이 지남에 따라 변하는 실제 공격 발생 가능성을 반영한다. 현재 익스플로잇 코드의 유효성이나 실제 공격 발생 여부를 나타낸다. 확인된 실제 공격(A), 개념 증명 단계(P), 보고되지 않음(U), 정의 안 됨(X)으로 구분된다.
- 환경적 지표 (Environmental Metrics): 해당 취약점이 존재하는 조직의 특정 IT 환경이나 보안 방어책을 반영하여 맞춤형 점수로 조정하기 위한 지표다.
- 보충 지표 (Supplemental Metrics): v4.0에 새로 도입된 지표로, 최종 점수에는 영향을 주지 않지만 대응에 필요한 추가적인 맥락을 제공한다. 최종 CVSS 점수 수치에는 직접적인 영향을 주지 않지만, 취약점 관리를 위한 부가적인 판단 근거(맥락)를 제공하는 완전히 새로운 지표 그룹이다.
익스플로잇 가능성은 해당 취약점의 본질적인 약점을 의미한다. 익스플로잇 가능성에 대해 더 자세히 들여다보자. 크게 5가지로 분류한다.
- 공격 벡터 (Attack Vector, AV)
- 공격 복잡성 (Attack Complexity, AC)
- 공격 요구사항 (Attack Requirements, AT)
- 필요 권한 (Privileges Required, PR)
- 사용자 상호작용 (User Interaction, UI)
공격 벡터는 취약점 악용이 가능한 접근 경로(물리적, 논리적 거리)를 평가한다. 원격에서 공격이 가능할수록 더 많은 잠재적 공격자에게 노출되므로 위험도가 높아진다.
- 네트워크(N): 인터넷 전체를 포함하여 원격 네트워크를 통해 공격 가능한 경우.
- 인접망(A): 블루투스, 로컬 서브넷 등 논리적/물리적으로 인접한 네트워크 환경에서만 공격 가능한 경우.
- 로컬(L): 네트워크가 아닌 로컬 접근(키보드, SSH 등)이나 사용자의 상호작용에 의존해야 공격 가능한 경우.
- 물리적(P): 공격자가 취약한 시스템을 직접 만지거나 조작해야 하는 경우.
공격 복잡성은 공격자가 시스템에 기본 내장된 보안 향상 기능을 적극적으로 우회하기 위해 필요한 노력의 정도다.
- 낮음(L): 우회를 위한 특별한 조치가 필요 없고, 반복적으로 공격 성공을 기대할 수 있는 경우.
- 높음(H): 공격 성공을 위해 타겟 고유의 비밀값을 수집하거나 방어책을 우회하는 등 특별한 조치가 필요한 경우.
공격 요구사항은 성공적인 공격을 위해 공격자가 통제할 수 없는 타겟 시스템의 특정 배포 및 실행 조건이 미리 갖춰져야 하는지 여부이다.
- 없음(N): 별도의 조건 없이 취약점 환경에 도달하고 공격을 실행할 수 있는 경우.
- 존재함(P): 특정 경쟁 상태(Race condition)를 이겨야 하거나 시스템이 특정 상태에 있어야만 공격이 성공하는 경우.
필요 권한은 취약점을 성공적으로 악용하기 전에 공격자가 보유하고 있어야 하는 인증 및 권한 수준이다. 요구되는 권한이 없을수록 점수가 높다.
- 없음(N): 인증되지 않은 상태에서 공격할 수 있는 경우.
- 낮음(L): 일반 사용자 수준의 기본적인 접근 권한이 필요한 경우.
- 높음(H): 관리자와 같이 시스템을 크게 제어할 수 있는 높은 권한이 필요한 경우.
사용자 상호작용은 공격 성공을 위해 공격자 외에 표적이 된 사람(사용자)이 어떤 조치를 취해야 하는지 여부다.
- 없음(N): 다른 사람의 개입 없이 공격자 단독으로 취약점을 악용할 수 있는 경우.
- 수동적(P): 사용자가 악성 웹사이트를 방문하거나 악성 파일을 실행하는 등 무의식적이고 제한적인 상호작용이 필요한 경우.
- 능동적(A): 사용자가 취약한 시스템에 파일을 특정 방식으로 가져오거나 보안 경고를 무시하고 승인하는 등 구체적이고 의식적인 상호작용이 필요한 경우.
댓글남기기