
튼튼한 집을 짓기 위해선 설계 단계부터 자재 하나하나까지 꼼꼼히 신경 써야 한다. 만약 설계에 결함이 있거나 약한 자재를 사용한다면, 당장은 문제가 없어 보여도 언젠가는 큰 사고로 이어질 수 있다. 소프트웨어 개발도 이와 같다. 눈에 보이지 않는 코드 속 작은 결함, 즉 '약점(Weakness)'이 해커에게는 시스템 전체를 무너뜨릴 수 있는 공격의 빌미가 된다. 이 수많은 소프트웨어 약점들을 체계적으로 분류하고 정의한 표준이 바로 'CWE'이다.

CWE(Common Weakness Enumeration)는 '공통 약점 목록'이라는 뜻으로, 소프트웨어나 하드웨어에서 발견될 수 있는 일반적인 보안 약점의 유형을 식별하고 목록화한 것이다. 이는 미국의 비영리 단체인 MITRE사에서 관리하며, 전 세계 개발자, 보안 전문가, 연구자들이 공통된 언어로 소프트웨어의 약점에 대해 이야기할 수 있도록 만들어진 일종의 '보안 약점 사전'이라고 할 수 있다. 예를 들어 'SQL Injection'이나 '크로스 사이트 스크립팅(XSS)'과 같은 공격의 원인이 되는 코드 수준의 결함들이 바로 CWE에 해당한다.
CWE가 단순히 약점 목록에 그치지 않고 모든 개발자와 보안 담당자에게 중요한 이유는 무엇일까? 그 역할은 생각보다 훨씬 광범위하다.

- 표준화된 의사소통: CWE는 보안 약점에 대한 공통된 식별자(ID)와 용어를 제공한다. 이를 통해 개발팀과 보안팀, 그리고 보안 솔루션 업체가 서로 오해 없이 명확하게 소통할 수 있다.
- 보안 교육의 기반: 개발자들은 CWE 목록, 특히 'CWE Top 25'와 같이 위험도가 높은 약점 목록을 학습함으로써 흔히 저지르는 실수를 예방하고 시큐어 코딩(Secure Coding) 능력을 향상할 수 있다.
- 보안 도구의 효율성 증대: SAST(정적 분석), DAST(동적 분석)와 같은 코드 보안 분석 도구들은 탐지된 취약점을 CWE ID를 기준으로 분류하여 알려준다. 개발자는 이 ID를 통해 발견된 문제의 심각성과 원인을 빠르게 파악하고 해결책을 찾을 수 있다.
- 체계적인 위험 관리: 조직은 CWE를 활용하여 어떤 유형의 약점이 자사의 소프트웨어에서 자주 발생하는지 분석하고, 이를 기반으로 보안 강화 대책의 우선순위를 정할 수 있다.
보안을 공부하다 보면 CWE와 항상 함께 언급되는 용어가 바로 CVE(Common Vulnerabilities and Exposures)이다. 둘은 밀접한 관련이 있지만 명확히 다른 개념이다.

- CWE (약점): 소프트웨어의 '결함 유형'을 의미한다. 즉, '왜' 취약점이 발생했는지에 대한 근본적인 원인이다. 예를 들어, CWE-89: SQL Injection은 SQL 구문을 부적절하게 처리하는 코드상의 결함 그 자체를 의미한다.
- CVE (취약점): 특정 제품에서 발견된 '실제 보안 문제'를 의미한다. 이는 CWE라는 약점이 실제로 특정 소프트웨어에 존재하여 공격에 악용될 수 있는 상태를 말한다. 예를 들어, '특정 게시판 솔루션 v1.2'에서 발견된 SQL Injection 취약점에 부여된 고유 번호가 바로 CVE이다.
쉽게 비유하자면, CWE는 '과속 운전'이라는 위험한 '행위'이고, CVE는 '어느 도로 몇 번 지점에서 과속으로 인해 발생한 실제 교통사고'라고 할 수 있다. 즉, 하나의 CWE 유형으로 인해 수많은 제품에서 여러 개의 CVE가 발생할 수 있다.

CWE는 더 이상 보안 전문가들만의 용어가 아니다. 안전하고 신뢰할 수 있는 소프트웨어를 만드는 것은 모든 개발자의 책임이며, CWE에 대한 이해는 그 책임을 다하기 위한 가장 기본적인 첫걸음이다. 우리가 작성하는 코드가 어떤 잠재적 약점을 가질 수 있는지 항상 인지하고, 이를 방어하기 위한 노력을 기울이는 것이야말로 진정한 프로 개발자의 자세일 것이다.

#CWE #CVE #정보보안 #웹보안 #소프트웨어개발 #시큐어코딩 #개발자 #보안취약점 #프로그래밍 #IT보안 #MITRE
'IT 정보 > 용어' 카테고리의 다른 글
| QA란? 품질보증(Quality Assurance) 소프트웨어 품질의 수호자 (0) | 2025.11.08 |
|---|---|
| CERT C란? C언어를 위한 시큐어 코딩 가이드라인 (0) | 2025.11.07 |
| XSS란? 크로스 사이트 스크립팅, 웹 보안의 첫걸음 (1) | 2025.11.05 |
| JNDI란? 이름으로 객체를 찾는 마법, 자바를 위한 전화번호부 (0) | 2025.11.03 |
| 적과 아군 모두 사용하는 침투 테스트 도구, 코발트 스트라이크 비컨 파헤치기 (0) | 2025.11.01 |