1.背景
最近一个老系统被检查出有Apache Log4j 远程代码执行漏洞,需要解决此问题,基于此,写此文章记录一下
2.问题分析
老生常谈了,之前发现此漏洞,处理方案都是升级jar包
但是,漏洞随着时间一直有出现,如果一直升级jar包,麻烦不说,治标不治本,开发运维疲于奔命
3.终极解决方案
不升级版本,直接删除jar包中的JndiLookup.class,一劳永逸
具体操作如下:
# (1)使用root用户访问机器,输入下面命令,查找低版本log4j-core位置
find / -name log4j-core-*# (2)通过(1)步查找结果,可以知道哪些WEB程序使用了
# 使用WEB程序部署的用户如test登录服务器,输入下面命令,查看是否存在JndiLookup.class
# 指令:jar -tf [第(1)步查找到的文件全路径] |grep 'log4j'|grep 'Jndi'
jar -tf /home/test/tomcat/webapps/test/WEB-INF/lib/log4j-core-2.5.jar |grep 'log4j'|grep 'Jndi'
# 备注:log4j-core可能还有其他命名# (3)删除JndiLookup.class
# 指令:zip -q -d [第(1)步查找到的文件全路径] [第(2)步查找到的JndiLookup.class相对路径]
zip -q -d /home/test/tomcat/webapps/test/WEB-INF/lib/log4j-core-2.5.jar org/apache/logging/log4j/core/lookup/JndiLookup.class# 备注:当log4j-core的文件名不是log4j-core-2.8.2.jar,相对路径可能不是这个org/apache/logging/log4j/core/lookup # (4)验证是否存在JndiLookup.class,同第(2)步操作
jar -tf /home/test/tomcat/webapps/test/WEB-INF/lib/log4j-core-2.5.jar |grep 'log4j'|grep 'Jndi'