개요
- CWE는 Common Weakness Enumeration의 약자다.
- 한국어로는 “공통 취약점 목록”이라고 하는 것 같다. 내가 번역한다면 “공통 취약점 분류 체계”라고 번역하겠다.
- SW에 존재하는 보안상 약점(취약점)의 종류를 식별하기 위한 공통 기준이다.
이점
- 표준의 이점과 동일하다. 소프트웨어의 아키텍처, 디자인, 코드에 존재하는 취약점에 대해서 공통의 언어로 논의할 수 있게 된다.
- 취약성 검사 도구의 표준 평가 척도로 사용할 수 있다. 좀더 쉽게 말하자면 CWE기준으로 어느 범위까지 커버할 수 있냐는 평가를 할 수 있게 된다.
- 취약성의 원인을 알아내고, 대처하고, 재발을 방지하기 위한 공통의 기준으로 활용할 수 있다.
CWE 구조
- CWE는 CWE 식별자(CWE-ID)를 부여하여 계층 구조로 체계화하고 있다.
- 위층에 가까울수록 추상 취약성 타입을 나타내고, 하위층에 갈수록 구체적인 취약성 타입이나 개별 취약성을 나타낸다.
타입 | 설명 | |
---|---|---|
View | 특정 관점에서 몇 가지 CWE를 모아서 보여준다. 예를 들면 개발자의 관점에서 보기 좋은 뷰(CWE-699)도 있고, 보안연구자의 관점에서 보기 좋은 뷰(CWE-1000), C언어용 뷰(CWE-658), Java 언어용 뷰(CWE-660) 등이 있다. | |
Category | 공통점을 가지는 취약성 타입을 그룹화한 것이다. 예를 들면 CWE-310는 암호화와 관련된 취약점, CWE-355는 사용자 인터페이스와 관련된 취약점이다. | |
Weakness | 개별 취약점을 나타낸다. 클래스(Class), 베이스(Base), Variant(Variant) 속성이 부여된다. 클래스(Class)는 가장 추상적인 취약성의 속성이다. 예를 들어 CWE-362의 레이스 컨디션 취약점이다. 베이스(Base)는 특정 자원이나 기술에 의존하지 않는 취약성의 속성이다. 예를 들어 CWE-567는 공유 데이터에 대한 비동기 액세스 취약점이다. Variant는 개별 리소스, 기술, 컨텍스트 등을 식별할 수 있는 취약성 속성이다. 예를 들어 CWE-488의 서로 다른 세션간에 세션을 제대로 식별할 수 없기 때문에 생기는 정보 유출 취약점이다. | |
Compound Element | 여러 요인이 복합적인 취약점을 나타내는 것으로, 컴포지트(Composite)와 체인(chain)의 속성이 부여된다. 컴포지트(Composite)는 복수개의 취약점이 혼합되어 발생하는 취약점이다. 예를 들어 CWE-352 크로스 사이트 요청 위조 (CSRF) 취약점이 해당된다. 체인(chain)은 한 문제로 인해 다른 문제가 연쇄되어 발생하는 취약성의 속성이다. 예를 들어, CWE-680는 정수 오버플로우 발생으로 인해 발생하는 버퍼 오버플로우 취약점이다. |
최신버전 및 CWE개수
- 2024년 2월 19일 기준으로 최신버전은 4.13이다.
- 전체 weaknesses/chains/composites 개수는 934개다. 22만개를 넘어가고 있는 CVE 개수를 생각하면 그렇게 많지 않다.
개수 서머리는 다음과 같다. |타입|버전4.13개수| |——|—| |Weakness|934| |Category|374| |View|49| |Deprecated|64| |Total|1421|
트리 구조
CWE의 Weakness는 트리구조를 가지고 있다. 트리구조에서 정점에 위치하는 것을 Pillar(기둥)라고 부른다. Pillar는 10개 존재한다. 다음과 같다. 이 10개의 기둥에서 900여개의 취약점이 분기되어 나가는 것이다.
284 - Improper Access Control (부적절한 접근 제어)
435 - Improper Interaction Between Multiple Correctly-Behaving Entities (정상적으로 동작하는 복수개의 엔터티들 사이의 부적절한 상호작용)
664 - Improper Control of a Resource Through its Lifetime (리소스의 라이프타임에 걸친 부적절한 컨트롤)
682 - Incorrect Calculation (부적절한 계산)
691 - Insufficient Control Flow Management (불충분한 컨트롤 플로 관리)
693 - Protection Mechanism Failure (보호 메커니즘 실패)
697 - Incorrect Comparison (부정확한 비교)
703 - Improper Check or Handling of Exceptional Conditions (예외 조건에 대한 부적절한 처리)
707 - Improper Neutralization (부적절한 무효화)
710 - Improper Adherence to Coding Standards (코딩 스탠다드를 적절히 준수하지 않음)
예를 들어, HTTP Request Smuggling은 그 뿌리를 살펴보면, 435 - Improper Interaction Between Multiple Correctly-Behaving Entities (정상적으로 동작하는 복수개의 엔터티들 사이의 부적절한 상호작용)
기둥에서 출발해서 436 - Interpretation Conflict (해석 충돌)
로 분화하고, 그 것이 444 - Inconsistent Interpretation of HTTP Requests ('HTTP Request Smuggling') (HTTP 요청들 사이의 모순되는 해석)
으로 분화한 것이다.
참고 사이트
- https://www.ipa.go.jp/security/vuln/scap/cwe.html