聚焦源代码安全,网罗国内外最新资讯!
编译:奇安信代码卫士团队
近期,Linux 基金会和哈佛大学创新科学实验室 (LISH) 联合发布《核心基础设施中的漏洞:开源软件初步报告和共识II项目》(Vulnerabilities in the Core: Preliminary Report and CensusII of Open Source Software)研究报告。该联合团队历时一年半,研究了公私组织机构应用程序使用免费开源软件 (FOSS) 的情况,找到了十大最常用的开源软件包和十大最常用的非 JavaScript 开源软件包,结果表明不安全的开发人员账号、遗留的软件包版本和非标准命名方案是FOSS 中存在的主要风险。
奇安信代码安全团队现编译如下:
免费的开源软件已成为当代经济的关键组成部分。Sonatype 公司在《2016年软件供应链报告》中指出,80% 至 90%的现代软件由 FOSS 组成,而在几乎所有行业中,软件的作用越发重要。公私组织机构均严重依赖于FOSS,技术公司和非技术公司皆如此。因此,确保FOSS的健康安全对几乎所有行业的未来而言至关重要。
然而,从设计角度而言,FOSS 是分散性质的,因此无法集中保证其质量和维护;另一方面由于 FOSS 可被免费复制和修改,因此无法了解有多少款 FOSS 是使用范围最广泛的,或者更确切地说使用最广泛的FOSS 类型是什么。因此要确保 FOSS 生态系统未来的健康和安全,理解使用的 FOSS 类型及其受支持和维护的程度就显得十分重要。
注:2014年,Linux 基金会成立核心基础设施计划(CII,Core Infrastructure Initiative),其成员为全球信息基础设施关键 FOSS 项目提供资金和支持,以保证 FOSS 生态系统的健康安全。2015年,CII 开展共识项目 (Census I),找到 Debian Linux 发行版本中对内核操作和安全作用最大的软件包,但该项目并未深入研究生产应用程序中部署的软件。因此在2018年中期,Linux 基金会联合LISH 开展第二次共识项目,目的是找到并统计公私组织机构应用程序中最常部署的开源软件,通过分析软件成分分析合作伙伴公司提供的使用数据来勾勒更完整的 FOSS 使用情况。
最常用的十大开源软件包
初步研究结果显示,公私组织机构最常使用的十大开源软件包如下:
Async
Inherits
Isarray
Kind-of
Iodash
Minimist
Natives
Qs
Readable-stream
String_decoder
最常用的十大非 JavaScript 开源软件包
本报告的数据来源很大一部分基于 JavaScript 软件包,为了解构成 FOSS 生态系统基础的数据包类型,报告列出最常用的非 JavaScript 软件包。这十大非 JavaScript 开源软件包如下:
com.fasterxml.jackson.core:jackson-core
com.fasterxml.jackson.core:jackson-databind
com.google.guava:guava
commons-codec
commons-io
httpcomponents-client
httpcomponents-core
logback-core
org.apache.commons:commons-lang3
slf4j:slf4j
FOSS 面临的三大风险
通过依赖关系分析找到十大最常使用的软件包和十大最常使用的非 JavaScript 软件包后,研究人员还从这些软件包背后的社区公开项目数据中有了更多的发现。
通过查询这些仓库的生命周期 GitHub 数据,研究人员找到每个 FOSS 项目的三大提交者,并且人工交叉引用 Github 资料信息和数据来源如 LinkedIn、Crunchbase 和其它社交媒体和网络公开数据,报告确定了75%以上顶级提交者所在的公司。
结果表明,在职员工和最常使用 FOSS 软件包贡献者之间存在高度相关性。开源软件并非人们普遍认为的无加班费的程序员贡献,2017年的 GitHub 数据分析表明,他们很多是微软、谷歌、IBM或Intel 公司的员工。他们做出的开源贡献可能会使他们成为进入这些公司的资本。未来CII将开展更多关于贡献者们的调查,进而帮助 FOSS 利益相关者们如个人贡献者、开源基金会和企业等更好地分配资源和支持。
(1) 非标准化的命名方案
报告指出,FOSS 组件缺少标准化的命名方案,使得组织机构和其它利益相关者难以快速准确地找到有问题或者易受攻击的组件。他们无法在全球范围内相互沟通关于软件安全、透明度等信息。鉴于软件供应链在网络安全事件中起着更多更复杂的作用,因此将 FOSS 组件的命名方案标准化迫在眉睫。
(2) 不安全的个人开发者账户
数据分析结果表明,个人开发者账户的安全性越发重要。在十大最常用的软件包中,7个软件包托管在个人开发者账户上。这种对个人开发者账户的严重依赖产生重大后果。在大多数情况下,因法律、政治和安全等原因,个人开发者账户的安全性不及组织机构账户。虽然个人账户可以采取多种措施如多因素认证机制,但他们不一定总能做到,而个人的计算环境可能更容易遭受攻击,它们的许可和其它发布控制的颗粒度可能不及机构账户。这意味着在个人开发者账户下的代码更容易遭修改且可能无法察觉。另外这种潜在风险并非只存在于理论中。例如最流行的 event-stream JavaScript 库中就曾被安装后门。
(3) 遗留的软件包版本
相比开发者账户的安全性,遗留软件包版本带来的风险更不易察觉。老旧、遗留的开源组件带来的风险和任何软件或硬件的老旧、不受支持的版本一样多。例如,数据分析显示,JavaScript 软件包 “minimist” 竟然比更新版本 “yargs” 的排名更靠前,这让 JavaScript 生态系统专家极为震惊。
这说明FOSS 开发圈也未能逃过过时技术的问题,即单一软件包的替换版本在使用量方面尚未超过旧版本。有些情况下,在实时系统中更容易替换软件,因为它并不涉及硬件替换,遗留软件包替换一般也执行同样的功能,新软件包对整个产品产生相对较小的破坏。然而在很多情况下,兼容性问题的存在使情况并非总是这样。在很多情况下,在没有额外利益保证的前提下,转换到新软件时产生的经济和时间相关的成本可能会动摇组织机构转换到更新版本的决心。开发人员对新版本投入的精力更多,而遗留版本的软件包由于缺少修复方案支持,因此越发容易崩溃。这一问题可能会导致类似于“心脏出血”漏洞的爆发,因此在 FOSS 圈子也同样需要重视遗留版本问题。
报告指出,虽然研究结果并不全面,但希望通过数据使用分析结果来更加清楚地了解私有企业中使用了哪些 FOSS 软件包或所严重依赖的FOSS软件包。该报告并非关于关键 FOSS 项目的最终结论,但它启动了关于如何识别关键软件包并确保它们收到正确资源和支持的对话。
推荐阅读
原文链接
https://www.coreinfrastructure.org/wp-content/uploads/sites/6/2020/02/census_ii_vulnerabilities_in_the_core.pdf
题图:Pixabay License
转载请注明“转自奇安信代码卫士 www.codesafe.cn”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。
点个“在看”,bounty 不停~