본문 바로가기

POST/Tech

Apache Log4j 심각한 보안 취약성 발견

최근 Apache Log4j 보안 업데이트와 관련해 해킹 공격에 악용되는 취약점을 보완해 업데이트한 2.15.0 버전에 치명적 취약점이 내포되어 있다는 보고가 있었습니다. 사용자들 사이에서 최악이라고 불릴 정도로 취약점의 심각도가 높아 꽤 화제가 되었죠! 이에, 2.15.0 버전으로 업데이트한 기업은 상황에 따라 2.16.0으로 재 업데이트 할 필요가 있음이 권고되었고 즉시 업데이트가 어려운 상황일 경우 대응 방법도 고지되었는데요, 긴급 보안 공지가 여러차례 고지되며 최근 몇 년간 인터넷 보안 이슈 중, 가장 높은 심각성의 사건이라고 알려져 약 일주일간 많은 혼란을 야기했던 Apache Log4j의 보안 이슈에 대해 자세하게 알아보겠습니다.

1. Apache Log4j

log4j는 무료로 제공되는 오픈소스 프로그램으로, 웹 서비스 동작 과정에서 일어나는 일련의 모든 기록을 남겨 침해사고 발생 및 이상 징후를 점검하기 위해 필수적으로 필요한 기능을 갖고 있습니다. Java 기반의 모든 어플리케이션에서 사용할 수 있습니다.

2. log4j의 다운로드 통계

지난 4개월 동안의 다운로드 통계를 보면, 현재까지 2,860만회의 다운로드가 실행됨을 알 수 있었습니다. Maven Central Repository의 총 710만 개의 아티팩트 중, 2021년 11월에 실행된 log4j 다운로드 횟수는 상위 252위로 인기 있는 구성 요소 중 하나임을 알 수 있습니다.

오픈 소스 코드는 차용해서 재사용되도록 설계되었습니다. log4j의 경우 약 7,000개의 다른 오픈 소스 프로젝트와 관련이 있습니다. 그리고 783개의 다른 프로젝트에서 차용되었고 19,562개 이상의 개별 구성 요소에서 확인되었습니다.

출처 : Sonatype - Log4shell by the numbers- Why did CVE-2021-44228 set the Internet on Fire?

3. log4j 버전 별 다운로드 통계

log4j의 상대적인 다운로드 수를 살펴보면, 가장 많이 다운로드한 버전은 2019년 2월에 출시된 2.11.2 버전이었고 2.14.1이 그 뒤를 이었습니다.

출처 : Sonatype - Log4shell by the numbers- Why did CVE-2021-44228 set the Internet on Fire?

4. Apache Log4j 2.15.0의 보안 취약성

Apache Log4j 2.15.0의 CVE-2021-44228을 해결하기 위한 수정 사항이 특정 구성에서 불완전한 것으로 나타났습니다. 보안 부분에서 취약성이 발견된 것이죠. 로깅 구성이 컨텍스트 조회(예: $${ctx:loginId}) 또는 스레드 컨텍스트 맵 패턴( %X, %mdc 또는 %MDC) JNDI 조회 패턴을 사용하여 악의적인 입력 데이터를 조작하여 서비스 거부(DOS) 공격을 일으키는 것으로 확인되었습니다. Log4j 2.15.0은 기본적으로 JNDI LDAP 조회를 localhost로 제한합니다. 시스템 속성 log4j2.noFormatMsgLookup을 true로 설정하는 것과 같은 구성과 관련된 이전 수정 사항은 이 특정 취약점을 해결해주지 못합니다.

(1) 주요 취약점

o Apache Log4j 2에서 발생하는 원격코드 실행 취약점(CVE-2021-44228)

o Apache Log4j 2에서 발생하는 서비스 거부 취약점(CVE-2021-45046)

o Apache Log4j 1.2에서 발생하는 원격코드 실행 취약점(CVE-2021-4104)

(2) 영향을 받는 버전

o 2.0-beta9 ~ 2.12.1 및 2.13.0 ~ 2.15.0의 모든 버전

5. Apache Log4j 2.15.0 보안 취약성에 대한 대응

가장 안전한 대응 방법은 log4j를 2.16.0 이상의 버전으로 업데이트 하는 것입니다. 이 방법은 Java 8이 필요하며, Java 7 이라면 2.12.2 버전을 사용하면 됩니다. 2.15.0 이상의 버전으로 업데이트 하더라도 설정에 따라 취약점에 노출될 가능성은 존재합니다. 따라서 다음과 같은 설정이 명시되어 있지는 않는지 확인해야 하고 명시된 설정은 모두 제거해야 합니다.

• -Dlog4j2.formatMsgNoLookups=false

• LOG4J_FORMAT_MSG_NO_LOOKUPS=false

2.16.0 이상의 버전에서는 log4j.enableJndi 설정이 기본값 false로 추가되었다. 따라서 다음 설정도 제거해야 합니다.

• -Dlog4j.enableJndi=true

보안 업데이트를 하지 않는 경우 원격 공격자가 취약점을 이용해 악성코드를 유포하고 주요 데이터를 탈취 및 임의의 파일 다운로드 및 실행이 가능하기 때문에 보안 업데이트 현황을 주시하며 보안 설정 및 취약성에 빠르게 대응해야 할 것입니다.

 

 

[참고사이트]

[1] apache 보안 업데이트 현황 : https://logging.apache.org/log4j/2.x/security.html

[2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228

[3] 신규버전 다운로드 : https://logging.apache.org/log4j/2.x/download.html

[4] 제조사별 현황 : https://github.com/NCSC-NL/log4shell/tree/main/software

[5] 탐지정책 : https://rules.emergingthreatspro.com/open/suricata-5.0/rules/emerging-exploit.rules

[6] 취약점 대응 가이드 : https://www.boho.or.kr/data/guideView.do?bulletin_writing_sequence=36390

[7] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45046

[8] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-4104

[9] Log4j 2.12.2버전 다운로드 : https://archive.apache.org/dist/logging/log4j/2.12.2/

[10] 통계 정보 : https://blog.sonatype.com/why-did-log4shell-set-the-internet-on-fire