CVE-2021-44228 - Log4j 2 Vulnerability Log4j的安全漏洞

2021年最后一个月爆出了Log4j的安全漏洞。

CVE 编号为 CVE-2021-44228 , 攻击原理为利用 log4j的 lookups 功能,结合 java 的 RMI (java远程调用)可以使被攻击对象执行攻击者的RMI服务器上的一段Java代码。

因为Log4j被广泛应用于各种应用,甚至包括一些第三方平台和软件,所以,这个影响范围是非常大的。

1.如何排查自己的工程是否引用了存在问题的log4j

  根据Log4j自己的安全漏洞对策,版本2.15.0 以下的log4j2都存在这个漏洞。

  所以在自己的工程里引用了如下Jar包的话,都可能存在被攻击的风险。

apache-log4j-2.0-beta1-bin/log4j-core-2.0-beta1.jar
apache-log4j-2.0-beta2-bin/log4j-core-2.0-beta2.jar
apache-log4j-2.0-beta3-bin/log4j-core-2.0-beta3.jar
apache-log4j-2.0-beta4-bin/log4j-core-2.0-beta4.jar
apache-log4j-2.0-beta5-bin/log4j-core-2.0-beta5.jar
apache-log4j-2.0-beta6-bin/log4j-core-2.0-beta6.jar
apache-log4j-2.0-beta7-bin/log4j-core-2.0-beta7.jar
apache-log4j-2.0-beta8-bin/log4j-core-2.0-beta8.jar
apache-log4j-2.0-beta9-bin/log4j-core-2.0-beta9.jar
apache-log4j-2.0-bin/log4j-core-2.0.jar
apache-log4j-2.0-rc1-bin/log4j-core-2.0-rc1.jar
apache-log4j-2.0-rc2-bin/log4j-core-2.0-rc2.jar
apache-log4j-2.0.1-bin/log4j-core-2.0.1.jar
apache-log4j-2.0.2-bin/log4j-core-2.0.2.jar
apache-log4j-2.1-bin/log4j-core-2.1.jar
apache-log4j-2.2-bin/log4j-core-2.2.jar
apache-log4j-2.3-bin/log4j-core-2.3.jar
apache-log4j-2.4-bin/log4j-core-2.4.jar
apache-log4j-2.4.1-bin/log4j-core-2.4.1.jar
apache-log4j-2.5-bin/log4j-core-2.5.jar
apache-log4j-2.6-bin/log4j-core-2.6.jar
apache-log4j-2.6.1-bin/log4j-core-2.6.1.jar
apache-log4j-2.6.2-bin/log4j-core-2.6.2.jar
apache-log4j-2.7-bin/log4j-core-2.7.jar
apache-log4j-2.8-bin/log4j-core-2.8.jar
apache-log4j-2.8.1-bin/log4j-core-2.8.1.jar
apache-log4j-2.8.2-bin/log4j-core-2.8.2.jar
apache-log4j-2.9.0-bin/log4j-core-2.9.0.jar
apache-log4j-2.9.1-bin/log4j-core-2.9.1.jar
apache-log4j-2.10.0-bin/log4j-core-2.10.0.jar
apache-log4j-2.11.0-bin/log4j-core-2.11.0.jar
apache-log4j-2.11.1-bin/log4j-core-2.11.1.jar
apache-log4j-2.11.2-bin/log4j-core-2.11.2.jar
apache-log4j-2.12.0-bin/log4j-core-2.12.0.jar
apache-log4j-2.12.1-bin/log4j-core-2.12.1.jar
apache-log4j-2.13.0-bin/log4j-core-2.13.0.jar
apache-log4j-2.13.1-bin/log4j-core-2.13.1.jar
apache-log4j-2.13.2-bin/log4j-core-2.13.2.jar
apache-log4j-2.13.3-bin/log4j-core-2.13.3.jar
apache-log4j-2.14.0-bin/log4j-core-2.14.0.jar
apache-log4j-2.14.1-bin/log4j-core-2.14.1.jar
log4j-2.0-alpha1/log4j-core-2.0-alpha1.jar

在Maven工程中使用 dependency tree, 获取依赖包,查看有没有上述嫌疑包被使用。

mvn dependency:tree

2.如何避免这个问题?

  • 排查

如果你的工程确实引用了上述Jar包,首先应该抱着谨慎的态度排查是否你的服务已经受到攻击,排查办法是查看日志内容,看看有没有看起来不自然的日志被写进来。这些不自然的日志如前文所述,都是利用log4j的 lookups 写入的,并且攻击手段很可能是从客户端的输入进入,假设所有合法用户都不会发起攻击的话,重点排查功能应该是Login的日志写入(因为黑客不是合法用户,只能访问到Login画面),例如,login功能的日志有没有写入用户名的操作等。

如果排查到确实有被攻击的痕迹,就需要根据怀疑被攻击的内容,对服务器的安全设施做一些调整。

  • 升级Log4j

Log4j的2.15.0已经修复了这个问题,因此升级可以确保今后不再发生同样的问题。

  • 其他手段

如果升级比较困难,那么设置Java启动参数log4j2.formatMsgNoLookups 为 true 也可以避免这个问题

例如(Web容器的设置方法请参考各个容器的说明):

java -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar

 

 

上一篇:使用mybatis-generator.xml 生成PO 对象


下一篇:解决loadrunner11跑10000并发失败的问题,提示The load generator is currently running the maximum number of Vusers o