本文来自微信公众号“数世咨询”,作者/nana。
过去两年来,存在漏洞的开源代码库占比保持不变,但含有高危漏洞的应用程序数量已降至四年最低。
以上数据出自Synopsys在2月22日发布的《2023年开源安全与风险分析》(OSSRA)报告。Synopsys审计了超过1700个应用程序,发现几乎每个软件程序(96%)都含有某种开源软件组件,代码库中开源代码的平均占比为76%。虽然过去三年里至少含有一个漏洞的代码库数量基本维持在略高于80%的水平(2022年为84%),但含有高危漏洞的应用程序数量已从2020年约60%的峰值降至所有被测应用程序的大约一半(48%)。
Synopsys Software Integrity Group高级软件解决方案经理Mike McGuire表示,总体而言,数据显露出了脆弱依赖项(平均每个应用程序含有595个)应对工作中的一些亮点,但并无广泛趋势表明应用程序安全整体向好。
“企业难以跟上开源使用的规模。”McGuire说道,“只要想到平均每个应用程序含有近600个组件,再乘上每年披露的漏洞数量,你真的可以准备加班加到生无可恋了。”
图:总体开源使用率基本保持水平,含漏洞代码库的占比也是如此
开源组件和流行应用程序框架的众多依赖项继续给软件制造商和应用程序开发人员带来各种安全问题。某些组件(如Java生态中的Log4j)几乎无处不在的现实仍在给基于开源框架的诸多应用程序造成安全问题。
过时依赖项非常普遍
应用程序包含很多组件,这些组件又各有其依赖项,导致依赖树层层叠叠,想找出每个漏洞难上加难。比如说,几乎所有应用程序(91%)都至少包含一个在最近两年内毫无更新的开源组件,这很可能就是项目不再受到维护的象征,表明存在安全风险。
近八分之一的应用程序还有超过10个不同版本的特定代码库,每个版本都可能导入自不同组件及其依赖项。
Synopsys在这份OSSRA报告中表示,不清除老旧代码库就会面临风险。
“开源存在于我们今年审查的几乎所有应用程序中,构成了各个行业的大部分代码库,并且其中包含企业未能修复的大量已知漏洞,导致企业面临遭到漏洞利用的风险。”报告中写道,“必须明白,尽管开源本身不带来任何固有风险,但管理不善就会造成风险。”
更多依赖项是否意味着更多漏洞尚需进一步调查才能确认。例如,软件安全公司Veracode今年1月发布的报告就指出,JavaScript框架的依赖项可能是最多的,但JavaScript应用程序却不像Java和.NET应用程序那么容易遭到攻击。
紧跟开源依赖项
OSSRA报告表明,开源代码对安全的影响因行业而异。有些行业增加了开源使用率,而其他行业则整合了自身产品组合。取决于成熟度水平,开源代码对安全的影响可能不太一样。
例如,新冠肺炎疫情期间学校推动在线教学,教育科技公司便纷纷采用开源组件推出新功能和应用。教育行业中,2022年开源软件在代码库中的占比超过80%,而2018年时仅占约三分之一。其他行业也见证了开源软件使用率的显著上升。例如,航空航天、汽车、运输和物流行业的开源组件使用率也在五年内增加了近一倍。
McGuire表示,开源采用率的显著提高导致许多公司不甚了解其软件的构成,也不知道需要修复哪些组件。
“越来越多的企业开始增加开源组件使用率,但它们并没有设置补丁跟踪计划。”他表示,“只要陷入更新困境,就像其他任何技术债务或普通债务一样,就很难再回归正轨了。”
报告称,可能是通过整合减少作为依赖项的项目,其他行业已经降低了自身开源软件使用率。互联网和软件基础设施行业,以及电信和无线部门,都将自身代码库中的开源软件贡献度降低到了60%以下。这两个行业的高危漏洞数量也下降了。
Synopsys《2023年开源安全与风险分析》(OSSRA)报告
https://www.synopsys.com/software-integrity/resources/analyst-reports/open-source-security-risk-analysis.html?cmp=pr-sig&utm_medium=referral