在处理程序日志记录时,Log4j2组件存在一个严重的安全漏洞,即CVE-2021-44228。这个漏洞是由于Log4j2组件在处理JNDI注入时存在缺陷,攻击者可以利用这个漏洞向目标服务器发送恶意数据,触发Log4j2组件的解析缺陷,从而实现任意代码执行,获得目标服务器的权限。
以下是复现该漏洞的步骤:
- 首先,从github上下载Log4j2的jar包,并解压到攻击机上。
- 然后在攻击机上开启JNDI服务器。
- 接下来,使用精心构造的恶意数据向目标服务器发送请求,触发Log4j2组件的解析缺陷。
- 执行命令后,生成可用的payload。
- 利用生成的payload进行攻击,获得反弹shell。
- 最后,访问特定的网址,出现“ok 192.168.137.11:44157/hello?”这样的提示信息,表示已经成功利用该漏洞。
为了修复这个漏洞,可以采取以下建议: - 及时升级Log4j2到最新版本。目前Apache官方已经发布了新版本,完成了漏洞修复。可以通过访问[https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2]来获取最新版本。
- 添加JVM启动参数-Dlog4j2.formatMsgNoLookups=true。这样可以防止Log4j2组件进行JNDI查找,从而避免漏洞被利用。
- 在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true。这样也可以防止Log4j2组件进行JNDI查找。
- 使用JDK的高版本。建议使用JDK 11.0.1、8u191、7u201、6u211及以上的版本。这些版本对漏洞的防范更为有效。
- 部署使用第三方防火墙产品进行安全防护。防火墙可以有效拦截恶意攻击,减少服务器被攻击的风险。
以上是针对Log4j2 CVE-2021-44228漏洞的复现与修复建议。在实际操作中,还需要注意以下几点: - 在升级Log4j2之前,需要先备份原有的配置文件和日志文件,以防止升级过程中出现意外情况导致数据丢失。
- 在添加JVM启动参数和配置文件时,需要确保参数和配置文件的正确性,避免对应用程序的正常运行造成影响。
- 在使用第三方防火墙产品时,需要选择可靠的品牌和型号,并进行详细的配置,以确保最大程度地防范恶意攻击。
- 在完成漏洞修复后,需要对服务器进行全面的安全检查和测试,确保没有其他潜在的安全问题存在。
- 对于已经受到攻击的服务器,需要及时清理恶意数据和后门程序,并重新安装或更新应用程序,以确保服务器的安全性和稳定性。
- 最后,需要加强服务器的安全防护意识和管理制度,定期进行安全培训和技术交流,提高安全防范能力。