制定了开源软件(OSS)策略的公司往往在自我评估的准备度方面表现更好。根据6月21日发布的一项调研结果,这些公司通常也设置有专职团队负责推动软件安全。

软件安全公司Snyk和Linux基金会进行的调查研究表明,制定了OSS安全策略的公司中,70%认为其应用程序开发非常安全或一定程度上安全。相较之下,未制定此类策略的公司中,仅45%认为自己至少一定程度上是安全的。

Snyk开发者关系总监Matt Jarvis表示,开源软件可为应用开发带来极大好处,但公司也应认识到其不利的一面并为此做好准备。

“虽然开源是行之有效的创新机制和高质量软件构建机制,但在某种程度上,开源自身的成功已经为自己招来了祸端,因为其普遍性使其成为了供应链攻击的目标。”Jarvis说道,“公司需要对治理和代码等开源的运作机制有更深入的了解,并通过采用开发人员优先的安全工具和方法来加强公司的供应链管理。”

小公司缺乏OSS策略

报告指出,总体而言,只有大约一半的公司制定了开源安全策略来指导开发人员使用组件和框架,而占比更大的小公司(60%)要么没有策略,要么不知道自己是否制定了策略。

报告认为,安全经济学往往会调低初创公司和小公司创建正式策略的优先级。

报告中写道:“小型组织的IT人员和预算很少,往往优先考虑业务的功能需求,这样业务才能保持竞争力。缺乏资源和时间是组织没有实施OSS安全最佳实践的主要原因。”

《解决开源软件网络安全挑战》

研究发现,不同编程语言也带来了不同安全考虑。举个例子,用.NET编写的应用程序修复缺陷所需的平均时间最长,为148天,其次是JavaScript;而以Go语言编写的应用程序修复速度最快,通常只需要.NET应用程序三分之一的时间就能修复缺陷,即49天。

JavaScript依赖比比皆是

JavaScript应用程序的依赖项最多,平均每个项目174个,约为依赖项最少的Python应用程序(平均每个项目25个依赖项)的七倍。

Jarvis称,虽然大型传递依赖树可能会导致漏洞修复路径迂回,但如果组织有办法跟踪项目之间的关系,那么拥有大量依赖未必是劣势。

“与其他生态系统相比,JavaScript包的范围往往更小,因此尽管数量更多,但需要审计潜在缺陷的代码可能更少。”Jarvis说道,“最重要的问题在于了解你用到了哪些依赖项,尤其是作为依赖的依赖引入的那些传递依赖,而这归结为使用恰当的安全工具来扫描。”

然而,数据还表明,不同的语言往往具有不同严重程度的缺陷。举个例子,用Java编写的项目平均具有超过47个高严重性漏洞和28个中等严重性漏洞,高出位居第二的JavaScript一大截(分别是18个和21个)。而Python则是低严重性漏洞数量最为可观,平均每个项目20个。

“这一情况存在多种影响因素:项目复杂性、开发人员数量和普及程度都会对漏洞的类型和数量产生影响。”Jarvis称,“大量开发人员检视极为普及的项目就可能会暴露出更多漏洞。”

自动化=安全成熟度

尽管识别依赖项中的漏洞十分重要,但大多数设置了OSS安全策略的成熟公司都依赖行业漏洞咨询(60%)、自动化包漏洞监测(60%),以及来自包维护人员的通知(49%)。

自动化监测是未制定安全策略的公司与安全成熟度高的公司之间存在的最大差距,没有安全策略的公司中仅38%使用某种自动化监测,而安全成熟的公司这一比例是60%。

Jarvis表示,如果尚未具备,那公司应该添加一套OSS安全策略,作为巩固自身开发安全的一种方式。即使是轻量级的策略都是个好的开始。

“拥有策略似乎就可以声称开发在某种程度上是安全的。我们认为制定策略是合理的安全成熟度起点,因为这表明组织已经意识到潜在问题并已踏上安全旅程。”

Snyk与Linux基金会的调研报告《开源安全状况》

https://snyk.io/reports/open-source-security/