查看原文
其他

好消息:有免费工具能彻底分析Log4J 严重的RCE漏洞

​Scantist 软件质量报道 2022-11-04


近日,知名的日志框架Log4j被爆出远程代码执行(RCE)漏洞——差不多是十年来最严重的安全漏洞,被国家信息安全漏洞共享平台(CNVD)收录了为CNVD-2021-95914(被NVD暂编为CVE-2021-44228)。而Log4j作为apache推出的一款主流日志框架,被大量用于业务系统开发,使用范围很广,Apache Struts2、Apache Solr、Apache Druid、Apache Flink和许多公司等均受影响。

图1  漏洞的影响面很广


1. 背景交待

此漏洞由Lookup功能引发,Log4j在默认情况下会开启Lookup功能,提供给客户一种添加特殊值到日志中的方式。此功能中也包含了对JNDI的Lookup,但由于Lookup对加载的JNDI内容未做任何限制,使得攻击者可以通过JNDI注入实现远程加载恶意类到应用中,从而造成RCE。

图2  漏洞机制(from: sophos Labs)

核弹级别的开源组件Log4J的RCE漏洞爆出来之后,整个安全行业都忙着修复。各种漏洞分析文章,各家的工具来修复,阻击漏洞纷纷出场。目前2.0 到2.14.1之间的任意版本,以及log4j-2.15.0-rc1均受此漏洞影响,修复版本为log4j-2.15.0-rc2(注意:github停在了log4j-2.15.0-rc2, maven官方以log4j-2.15.0-rc2版本发布了log4j-2.15.0)。下文均以CNVD-2021-95914代称此漏洞,将有漏洞的log4j所有版本简称为log4j. 

2. 如何应对这次漏洞分析之四大挑战
由于log4J几乎遍布Java应用,人工筛查哪些应用包含此组件困难极大。软件成分分析(SCA)是解决此困难的工具。而我们通过筛查对比目前市场上可用的能响应CNVD-2021-95914扫描的SCA工具,发现情况并不如意。其中涉及不少技术挑战,尚不能被目前的工具所解决。本文逐个剖析这些挑战。

漏洞定位: log4j的真正漏洞代码出现在log4j-core的子组件。修复其他组件不一定能有效消除漏洞。很多产品都产生了误报的行为,让客户白忙一场(图3)。
图3  Log4j-core 漏洞定位

CNVD-2021-95914真实影响的是log4j-core这个组件,但由于log4j的<group_id>org.apache.logging.log4j</group_id>下有很多组件,如log4j-api, log4j-slf4j-impl等。目前市场上的SCA系统中,我们发现部分厂商会错误的把单独出现的非log4j-core的组件,比如log4j-api标为有CNVD-2021-95914漏洞,这会给修复工作制造噪音。详细误报分析信息请与我们联系。

2 兼具源码扫描和二进制Jar扫描: 目前市场上对于CNVD-2021-95914的SCA扫描工具都不能兼具扫描源码包和二进制Jar包的能力。我们认为这两方面同等重要。源码扫描侧重在整体上把握企业当前项目中是否需要以直接或者间接的形式引入log4j-core组件。而二进制扫描的意义在于,对于未知的jar包,其内部是否真的存在log4j-core的jar或者class文件。我们的扫描工具在底层打通了二进制扫描和源码扫描的引擎和数据,可以同时给出log4j-core在源码和二进制包中的真实分布情况。请访问https://scantist.io 进行扫描分析和试用。

3 间接调用: 很多时候待测程序没有直接使用log4j,但是log4j可能被其他组件间接调用,比如MyBaits。甚至有专门的的一个网站把用到log4j的其他组件做了一个列表。但是这些列表都是不完整的。为了完全扫描出来,需要一个完整的调用链分析。很多产品都产生了漏报的行为,让客户忙完之后并没有完整解决危机。在目前的工具中,部分SCA工具无法正确识别源码层面的传递依赖。而部分工具由于只提供二进制Jar分析,必须要求log4j-core.jar或者其等价class文件真实存在在被测试jar包中。而在实际生成环境中,log4j-core.jar可能存在在项目的其他目录,只是被用户Jar间接引用了,那上述这些工具就会造成漏报。

 4 二进制分析:有些情况下log4j是其他项目通过jar打包的形式调用的,这就需要jar二进制分析能力。在jar的编译分发过程中,因为各种原因,存在meta信息确实、代码混淆、fatJar嵌套、名称shadow/shade等现象。如果不能从Jar包底层代码结构获取特征信息,SCA将不能正确识别Jar包中真实包含的组件,造成漏报行为。请访问scantist.io 以试用其二进制扫描功能。另外我们针对log4j的情况,构造了一套测试集,用于识别Jar文件中出现的各种情况,可用于场景模拟,也可用于工具对比,具体情况请与我们联系。

我们分析了市面上可以做软件成分分析的工具,基本上只能扫描源码或者二进制,检测结果大部分情况不尽人意。结果中出现大量误报和漏报,误报导致开发团队做不必要的更新,漏报会导致重大安全风险。
Scantist SCA 能做到精准的定位,完整的调用链分析和二进制扫描。这样的话就能给客户做的最完整和精准的保护。
在软件调用链分析方面,我们把maven的包管理器数据都下载和收集起来,对完整的依赖链有准确的检测结果。

 图4  依赖链示意图
在二进制扫描方面,我们有独创的基于CFG的模糊哈希算法对Java二进制文件进行分析和签名,这样对改动的和甚至混淆过的开源组件也有非常好的识别效果。

3. 如何利用Scantist SCA检测及分析?
为了解决开源软件的漏洞检测和管理的问题,Scantist SCA产品是一套完整的解决方案,同时支持源码和二进制扫描,通过提供对应用程序软件供应链的更大可视性,主动帮助企业管理开源库的安全性和合规性风险。Scantist SCA通过分析软件应用程序中已知的第三方库和组件的特殊签名,并与漏洞和许可证数据库进行交叉对比,以识别软件开发和部署阶段中的安全隐患。

 图5  SCA平台界面

针对此次log4j2漏洞,Scantist SCA做出快速响应,对CVE-2021-44228漏洞提供精确检测及支持。
  图6  Log4j2检测结果 

如需通过检测可访问Scantist SCA平台https://scantist.io(虽然它不在2021年软件测试工具总结——安全性测试工具 的清单中)

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存