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
- 关于Logback
根据SLF4j 的描述,Logback不存在这个漏洞。