본문으로 바로가기

1. 개요

취약성에 대해 고유 식별 표기 형식을 CVE 형태로 제공한다. 고유 식별 표기 형식을 제공하는 가장 큰 이유는 취약성에 대한 정보들을 통합할 수 있는 목적, 그리고 관리자, 사용자, 분석가 등 취약성을 정확하게 파악하고 관리하는 목적 때문이다.

문제는 발생한 취약성의 위험도를 정량화 하지 않는다면, 너무 사소한 취약성까지 관리하는 불편함을 안을 수 밖에 없다. 그리고 고 위험군에 속하는 취약성의 경우 우선 대응이 이루어져야 하는데, 정량화된 수치가 없다면 이 문제를 해결할 수가 없다. 그래서 새롭게 생겨난 것이 CVSS, 직역하면 공통 취약성 점수화이다.

CVSS는 버전 1부터 시작된다. 버전 1은 2005년에 만들어졌다. CVE는 1999년도에 만들어졌으니 6년 뒤에 위험도에 대한 정량화 하기 위한 시도를 했다고 볼 수 있다. 현재 공식적으로 가장 많이 사용하고 있는 것은 CVSS 버전 2이고, 버전 2는 2007년도에 만들어졌다. 현재 지속적으로 개발되어 CVSS 버전 2.10 이며, 곧 3.0 버전이 공개될 예정이다. 재미있는 형태로는 CVSS는 Mitre에서 만들었지만, 취약성과 연동하여 점수 계산하는 곳은 NVD에서 진행하고 있다.

그림 1. CVSSv2 스코어 표기 방식

2. 표기 방법과 계산 방식

2.1. CVSSv2 매트릭스

그림 2. CVSSv2 매트릭스

매트릭스는 세 가지 그룹으로 구성되며 각각의 매트릭스 안에는 하위 내용이 존재한다. 이중 가장 중요한 매트릭스는 기본 매트릭스이다.

    • 기본 매트릭스 : 접근 경로, 접근 복잡도, 인증 필요 여부, 기밀성, 무결성, 가용성
    • 임시 매트릭스 : 공격코드 공개 여부, 취약성 패치 단계, 취약성 신뢰도
    • 환경 매트릭스 : 피해, 취약성 영향 시스템 분포도, 기밀성 요구사항, 무결성 요구사항, 가용성 요구사항

CVSSv3는 기본 매트릭스에 사용자 인터페이스와 범위 영역이 포함되었으며, 환경 매트릭스는 5 개의 항목에서 11개의 항목으로 증가하였다. 아직 CVSSv3는 개발단계이기 때문에 정식 릴리즈가 되면 변동사항이 있을 수 있다. 그래서 이 문서에서는 CVSSv2를 중점적으로 다루며, 변동사항만 각 항목 아래에 간략하게 소개한다.

다음 그림은 CVSSv2 계산기의 모습이다. ③ 에서 각각의 항목들을 클릭하면 ① 의 그래프와 ② 의 계산 결과가 실시간으로 반영된다. 현재 그림은 CVE-2015-0235 취약성에 대한 계산 결과를 보여주고 있다.

그림 3. CVE-2015-0235 취약성에 대한 CVSSv2 계산 결과

2.2. CVSSv2 - 기본 매트릭스

기본 매트릭스를 구성의 주요 특징은 취약성의 변하지 않는 근본적인 특징을 나타낸다.

그림 4. 기본 점수 매트릭스

① 접근 경로 (AV, Access Vector)

접근 경로는 공격 수행 위치로도 해석된다. 공격자가 호스트에서 멀어질수록 더 높은 취약성 점수를 얻는다. 등급은 3등급으로 관리되고, 각각의 등급이 의미하는 것은 다음과 같으며, 점수가 낮은 순부터 나타냈다.

    • 로컬(Local) : 로컬접근으로 취약성 공격이 가능한 것으로, 일반적으로 권한상승 취약성이 여기에 해당한다.
    • 인접 네트워크(Adjacent Network) : 데이터링크 계층에서 공격이 가능한 것으로, 도메인 스푸핑, ARP 스푸핑, 블루투스 공격 등 여기에 해당한다.
    • 네트워크(Network) : 네트워크 계층에서 공격이 가능한 취약성으로, 일반적으로 원격 코드 실행 취약성, DoS 취약성 등이 여기에 해당한다.

CVSSv3에서는 물리(Physical) 항목이 포함되어 물리적 접근 취약성에 대한 평가도 진행한다.

② 접근 복잡도(AC, Access Complexity)

접근 복잡도는 공격자가 취약한 시스템에 접근하는 과정의 복잡성에 대해 이야기하며, 쉽게 접근 가능할수록 더 높은 취약성 점수를 얻는다. 등급은 3등급으로 관리되고, 각각의 등급이 의미하는 것은 다음과 같으며, 점수가 낮은 순부터 나타냈다.

    • 높음(High) : 공격 대상에 대한 다양한 정보를 수집이 선행되어야 하며, 단 사소한 조건이라도 만족하지 못할 경우 공격에 잦은 실패가 발생한다. (예를 들면, 대부분 사회공학적인 기법에 의해 발생할 수 있는 취약성이나, 취약성 발생 조건이 제한적[특정 응용프로그램에서 사용자 인증이 되어 있어야 하며, 잘 사용하지 않는 라이브러리가 설치되어 있는 경우 등]인 경우)
    • 중간(Midium) : 이 등급에 분류되는 대부분의 경우는 취약성 시스템에 대한 접근은 가능하지만, 일부 인증이나 사용자 그룹으로 제한되는 경우가 대부분이다. (예를 들면, 취약성을 성공하기 위해서 LDAP, AD 등 인증 관리 시스템 안에서만 동작하는 소프트웨어)
    • 낮음(Low) : 작은 정보만으로도 충분히 공격에 활용될 수 있으며, 다양한 사용자가 접근 가능한 시스템이 대부분이다. (예를 들면, 스트럿츠 DoS 관련 취약성들은 작은 패킷만 전송해도 서비스가 마비가 되는 형태)

CVSSv3에서는 중간(Midium) 단계가 빠지고 2단계로만 운영되고 있다.

③ 인증 (Au, Authentication)

인증은 말 그대로 취약성을 발생시키기 위해 접근하는 과정에서 대상이 인증하는 형태를 의미한다. 단순한 의미를 가지고 있기에, 인증 처리 강도나 복잡성을 포함하여 계산하지 않는다. 로컬에서 실행되는 운영체제 취약성이나 응용프로그램 취약성의 경우 대부분 높은 점수를 받지만 웹 애플리케이션 취약성(일반적으로 웹해킹)의 경우 여러개를 사용하는 경우가 상당 수 발생한다. 등급은 3등급으로 관리되고, 각각의 등급이 의미하는 것은 다음과 같으며, 점수가 낮은 순부터 나타냈다.

    • 복수(Multiple) : 인증하는 과정이 2회 이상인 경우에 해당한다.
    • 단수(Single) : 인증하는 과정이 1회인 경우에 해당한다.
    • 없음(None) : 인증 과정이 없는 경우에 해당한다.

CVSSv3에서는 필수 권한(PR, Privileges required)으로 이름이 바뀌어 사용되며, 분류되는 구성요소는 변경사항 없다.

④ 기밀성 영향도 (C, Confidentiality Impact)

기밀성 영향도는 악용되는 취약성이 기밀성에 얼만큼의 영향을 미치는가를 측정한다. 기밀성은 권한이 있는 사용자에게만 정보 접근 및 공개를 하고, 권한이 없는 사용자에게는 접근을 제한함으로써 정보의 비밀을 얼만큼 유지할 수 있는가를 의미한다. 기밀성에 영향을 크게 끼치는 취약성의 경우 기밀한 자료의 유출에 상당한 영향을 끼친다. 등급은 3등급으로 관리되고, 각각의 등급이 의미하는 것은 다음과 같으며, 점수가 낮은 순부터 나타냈다.

    • 없음(None) : 기밀성에 어떠한 영향도 없는 취약성을 의미한다.
    • 부분(Partial) : 일부 정보가 공개되어 기밀성에 손상을 주는 취약성을 의미한다.
    • 완벽(Complete) : 모든 정보가 유출되어 기밀성에 심각한 손상을 주는 취약성을 의미한다.

⑤ 무결성 영향도 (I, Integrity Impact)

무결성 영향도는 악용되는 취약성이 무결성에 얼만큼의 영향을 미치는가를 측정한다. 무결성은 정보의 정확성, 신뢰성, 일관성 등을 보장하는 것을 의미한다. 무결성 또한 기밀성 영향도와 동일한 등급과 형태로 운영된다.

    • 없음(None) : 무결성에 어떠한 영향도 없는 취약성을 의미한다.
    • 부분(Partial) : 일부 시스템에 파일을 수정 할 수 있지만, 공격자가 수정하여 제어할 수 있지는 않다.
    • 완벽(Complete) : 공격자는 대상 시스템의 모든 파일을 수정할 수 있다.

⑥ 가용성 영향도 (A, Availability Impact)

가용성 영향도는 악용되는 취약성이 시스템의 가용성에 얼만큼의 영향을 미치는가를 측정한다. 가용성은 시스템이 사용 가능한 정도를 의미하며 쉽게 표현하면 가동률로 이해할 수 있다. 가용성 영향도 또한 무결성 영향도, 기밀성 영향도와 동일한 등급과 형태로 운영된다.

    • 없음(None) : 가용성에 어떠한 영향도 없는 취약성을 의미한다.
    • 부분(Partial) : 일부 시스템의 일부 자원을 소모하여 성능 저하 또는 중단에 이르게 한다. 예를 들면, 특정 애플리케이션이 시스템 리소스를 많이 사용하게 하거나 해당 애플리케이션만 중단되는 경우가 있다.
    • 완벽(Complete) : 공격자는 대상 시스템의 모든 자원을 소모하여 종료시킬 수 있다. 예를 들면, 특정 애플리케이션의 취약성으로 인해 해당 시스템 전체가 마비되는 경우가 있다.

기밀성, 무결성, 가용성은 CVSSv3에서 변동사항이 없다.

2.3. CVSSv2 - 기타 매트릭스

임시 매트릭스나 환경 매트릭스의 점수는 CVE 코드에 대한 점수 산출에 큰 영향을 미치지 않는다. (그림 3에서 보듯 아무런 표시가 되어 있지 않음에도 점수가 산출된다.) 그래서 이 문서에서 해당 매트릭스와 하위 구성요소들에 대한 설명은 제외한다.

2.4. CVSSv2 - 벡터

CVSSv2 를 간략하게 한 줄로 표기하는 방식이 CVSSv2 Vector 라고 부른다.

그림 5. CVSSv2 벡터

표기 방법은 기본 매트릭스의 6개의 구성요소들의 첫 글자를 사용한 줄임말과 등급의 첫 글자를 [항목:등급] 형태로 표기한다. 예를 들면, 접근 경로의 경우 AV:N, AV:AN, AV:L 형태로 표시 할 수 있다. 위 그림 4의 예제를 들면 접근 경로는 네트워크, 접근 복잡성은 낮음, 인증은 없음, 기밀성, 무결성, 가용성은 완벽(Complete) 손상 즉 최상위 점수인 10점을 가짐을 의미한다.

2.5. CVSSv2 - 계산 방식

점수 계산방식은 각각의 점수를 식에 대입하는 형태로 계산된다.

접근 경로

    • 로컬 (0.395)
    • 근접 네트워크 (0.646)
    • 네트워크 (1.000)

접근 복잡도

    • 높음 (0.350)
    • 중간 (0.610)
    • 낮음 (0.710)

인증

    • 복수 (0.450)
    • 단수 (0.560)
    • 없음 (0.704)

기밀성, 무결성, 가용성

    • 없음 (0)
    • 부분 (0.275)
    • 완벽 (0.660)

다음과 같이 두 가지로 구분되어 별도로 계산된 후 합산으로 진행된다.

    • CVSSv2 기본 점수 = (영향 부분 점수 x 0.6) + (공격 부분 점수 x 0.4)
    • 영향 부분 점수 = 10.41 x (1 - (1 - 무결성) x (1 - 가용성) x (1 - 기밀성))
    • 공격 부분 점수 = 20 x 접근 경로 x 접근 복잡도 x 인증

그림 4를 예제로 CVSSv2를 계산하면 다음과 같다. 계산은은 소수점 첫 번째 자리까지 나타내기에 소수점 두 번째 자리에서 반올림하여 계산된다.

영향 부분 점수
= 10.41 x (1 - (1 - 0.660) x (1 - 0.660) x (1 - 0.660))
= 10.41 x (1 - 0.34 x 0.34 x 0.34)
= 10.41 x (1 - 0.039304)
= 10.41 x 0.960696
= 10.00084536
= 10.0 점

공격 부분 점수
= 20 x 1 x 0.71 x 0.704
= 9.9968
= 10.0점

CVSSv2 기본 점수
= (영향 부분 점수 x 0.6) + (공격 부분 점수 x 0.4)
= (10.00084536 x 0.6) + (9.9968 x 0.4)
= 6.000507216 + 3.99872
= 9.999227216
= 10.0점

댓글을 달아 주세요

티스토리 툴바