CWE (Common Weakness Enumeration) 란?
Common Weakness Enumeration의 약자로, 나열된 단어 자체만 본다면 ‘일반적인 결함의 나열’ 이라고 볼 수 있습니다.

지침서와 같은 ‘CWE’를 이용하면 정적 분석의 한 부분인 실행시간 오류 ( Runtime Error )를 검출할 수 있습니다. 즉, 프로그램을 실행시키지 않고 분석하면서 오동작을 일으킬 수 있는 코드를 검출 할 수 있게 됩니다. 실제로 방위사업청에서는 무기체계 SW 지침을 통해서 CWE-658과 CWE-659를 바탕으로 실행시간 결함에 대한 검출 기준을 요구하고 있습니다.
이러한 CWE는 SQL 인젝션, 크로스 사이트 스크립팅, 버퍼 오버 플로우 등 다양한 소프트웨어의 결함을 식별하기 위해 결함의 종류(결함의 유형) 목록을 체계화하여 제공하고 있으며, CWE를 사용한다면 소프트웨어 개발자와 보안 전문가 등이 다음과 같은 장점을 얻을 수 있습니다.
1. 소프트웨어 아키텍처, 디자인, 코드에 내재 된 결함에 대해 일반적인 검토를 할 수 있게 된다.
2. 결함 검사 도구 등 소프트웨어의 보안을 향상시키기 위한 도구의 표준 척도로 사용할 수 있다.
3. 결함의 원인을 인식하고 결함을 감소시키며, 재발의 방지를 위한 공통의 기준으로서 활용할 수 있다.
CWE 지침서의 항목은 https://cwe.mitre.org/에서 확인해 볼 수 있으며 대표적인 항목은 CWE- 658, CWE-659, CWE-660이 있습니다.
덧붙여, CWE 의 간단한 설명을 하자면

CWE의 결함 유형으로는 뷰(View), 카테고리(Category), 취약점(Weakness), 복합 요인(Compound Element)의 4종류로 분류되는데 이 중에 CWE – 658 은 C에서 정적 분석 도구에 의해 검출되는 오류를 규정해 놓은 것으로써 전체 81개의 취약점을 가지고 있으며, 각각 유형에 따라 카테고리(Category) 3개, 취약점(Weakness) 76개, 복합 요인(Compound Element) 2개를 지니고 있습니다.
CWE – 659 은 C++에서 정적 분석 도구에 의해 검출되는 오류를 규정해 놓은 것으로써 전체 85개의 취약점을 가지고 있으며, 각각 유형에 따라 카테고리(Category) 3개, 취약점(Weakness) 81개, 복합 요인(Compound Element) 1개를 지니고 있습니다.
CWE – 660 은 Java에서 정적 분석 도구에 의해 검출되는 오류를 규정해 놓은 것으로써 전체 74개의 취약점을 가지고 있으며, 각각 유형에 따라 카테고리(Category) 2개, 취약점(Weakness) 72개를 지니고 있습니다.
아래의 표를 통해 CWE-658과 CWE-659의 차이점을 볼 수 있습니다.

우리는 해당 표를 통해, CWE-658에만 있는 항목은 5개, CWE-658에만 있는 항목 8개이고 공통 항목의 개수는 76개로 보여지는 것을 확인할 수 있습니다.
