
목표는 잘 알려진 공격을 분류(triage)하고 보안 팀이 신속하게 대응하는 방법을 배우는 것입니다.
이 실습의 목표는 잘 알려진 또 하나의 실전 보안 취약점인 Log4Shell을 트리아지하는 것이었습니다. Log4Shell은 영향받는 라이브러리가 기업용 소프트웨어 전반에 걸쳐 매우 흔하게 사용되었던 탓에 최근 몇 년간 가장 널리 악용된 취약점 중 하나입니다.
국가 취약점 데이터베이스(NVD)에 접속해 해당 CVE를 검색했습니다:
https://nvd.nist.gov/vuln/search#/nvd/home?resultType=records
CVE-2021-44228을 검색하고 결과 페이지를 열었습니다.
설명을 읽은 후, 실제로 무엇이 위험에 처해 있는지 이해하기 위해 몇 가지 기본 질문에 답했습니다:
페이지에 나열된 CVSS 점수와 벡터 문자열을 확인했습니다:
벡터 문자열을 하나하나 살펴보며 각 부분이 실제로 무엇을 의미하는지 확인했습니다:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
이 벡터 문자열은 사실상 최악에 가깝습니다. 필요한 권한이 없고, 사용자 상호작용이 필요 없으며, 네트워크를 통해 도달 가능하고, 취약한 컴포넌트 자체를 넘어서는 부분(범위: 변경됨)까지 영향을 줄 수 있습니다. 이 조합이 Log4Shell이 공개 당시 그토록 긴급하고 광범위한 이슈로 취급된 이유 중 하나입니다.
이 CVE에 대한 NVD 페이지의 Weakness Enumeration 섹션을 확인했습니다.
나열된 CWE는 CWE-917: Improper Neutralization of Special Elements used in an Expression Language Statement입니다. 쉽게 말하면, 소프트웨어가 입력을 제대로 검증하지 않은 채 표현식의 일부로 평가한다는 뜻이며, 이로 인해 공격자가 일반 로그 메시지를 통해 악의적인 JNDI 조회를 끼워 넣을 수 있었습니다.
두 가지 시나리오에서 이 취약점을 더 높은 위험으로 볼지, 더 낮은 위험으로 볼지 고려했습니다.
시나리오 1: 취약한 소프트웨어가 실행 중이며 접근 가능한 상태. 더 높은 위험입니다. 이 취약점은 공격자가 EL(Expression Language) 구문에 접근하고 수정할 수 있게 하여 기밀성과 무결성에 직접적인 영향을 줍니다.
시나리오 2: 취약한 소프트웨어가 전원이 꺼져 있고 접근할 수 없는 머신에 설치된 상태. 더 낮은 위험입니다. 취약한 소프트웨어에 전혀 접근할 수 없다면 공격자가 상호작용할 방법이 없으므로 기밀성과 무결성이 그대로 유지됩니다.
지금까지 트리아지한 CVE 중에서 이 건은 공격자가 악용하는 데 필요한 조건이 극히 적다는 점(권한 없음, 사용자 상호작용 없음, 네트워크 접근뿐)이 특히 두드러졌으며, 취약한 컴포넌트를 넘어서는 시스템까지 영향을 줄 수 있다는 점도 특징적이었습니다. Log4Shell이 공개 당시 업계 전반에 걸쳐 광범위한 혼란을 일으킨 이유를 잘 보여주는 사례입니다.