最近几个月,谷歌启动了多项工作,在多个方面加强开源安全。一个重要的焦点是改进如何识别和应对已知的安全漏洞,而不做大量的手动工作。有一个精确的通用数据格式来分流和补救安全漏洞是非常重要的,特别是在沟通受影响的依赖关系的风险时--它可以使自动化更容易,并使开源软件的消费者知道他们何时受到影响,并尽快进行安全修复。
谷歌在2月份发布了开源漏洞(OSV)数据库,目的是为开源软件的开发者和用户实现自动化和改进漏洞分流。这个最初的努力是以OSS-Fuzz项目中的几千个漏洞数据集为基础的。实施OSV来交流数百个关键开源项目的精确漏洞数据,证明了这种格式的成功和实用性,并获得了帮助改进项目的反馈;例如,谷歌放弃了云API密钥的要求,使数据库更容易被更多用户访问。社区的反应也表明,人们对进一步扩展这项工作有着广泛的兴趣。
谷歌宣布一个新的里程碑,将OSV扩展到几个关键的开源生态系统,包括Go, Rust, Python, 和 DWF在内。这一扩展将四个重要的漏洞数据库联合起来,使软件开发者有更好的方式来跟踪和补救影响他们的安全问题。这个共享漏洞数据库标志着向为所有用户创造一个更安全的开源环境迈出了重要一步。
一个简单、统一的模式来精确描述漏洞。
与开源开发一样,开源中的漏洞数据库遵循分布式模式,许多生态系统和组织都在创建自己的数据库。由于每个人都使用他们自己的格式来描述漏洞,因此在多个数据库中追踪漏洞的客户端必须完全单独处理每个数据库。数据库之间共享漏洞也很困难。
与开源开发一样,开源中的漏洞数据库遵循分布式模型,许多生态系统和组织都在创建自己的数据库。由于每个数据库都使用它们自己的格式来描述漏洞,因此在多个数据库中追踪漏洞的客户必须完全单独地处理每个数据库。数据库之间共享漏洞也很困难。
谷歌开源安全团队、Go团队和更广泛的开源社区一直在开发一个简单的漏洞互换模式来描述漏洞,该模式从一开始就为开源生态系统设计。在几个月前开始了这个模式的工作之后,谷歌要求公众反馈并收到了数百条评论,采纳了读者的意见,形成了目前的模式。
{ "id": string, "modified": string, "published": string, "withdrawn": string, "aliases": [ string ], "related": [ string ], "package": { "ecosystem": string, "name": string, "purl": string, }, "summary": string, "details": string, "affects": [ { "ranges": [ { "type": string, "repo": string, "introduced": string, "fixed": string } ], "versions": [ string ] } ], "references": [ { "type": string, "url": string } ], "ecosystem_specific": { see spec }, "database_specific": { see spec }, } |
这个新的漏洞模式旨在解决管理开放源代码中的漏洞的一些关键问题。谷歌发现,目前还没有一种标准的格式。
-
强制执行与实际的开源软件包生态系统中使用的命名和版本管理方案精确匹配的版本规范。例如,将CVE这样的漏洞与软件包管理器中的软件包名称和版本集相匹配,很难用现有的机制(如CPEs)以自动方式完成。
-
可以用来描述任何开源生态系统中的漏洞,同时不需要依赖生态系统的逻辑来处理它们。
-
易于被自动化系统和人类使用。
通过这个模式,谷歌希望能定义一种所有漏洞数据库都能输出的格式。统一的格式意味着漏洞数据库、开源用户和安全研究人员可以很容易地在所有的开源领域分享工具和消费漏洞。这意味着每个人都能更全面地了解开源中的漏洞,并通过更容易的自动化来加快检测和修复的时间。
当前状态
目前有一些公共的漏洞数据库已经在输出这种格式,还有更多的数据库正在开发中。
- Go漏洞数据库 用于Go软件包
- Rust咨询数据库用于Cargo软件包
- Python咨询数据库 用于PyPI软件包
- DWF数据库针对Linux内核和其他流行软件的漏洞
- OSS-Fuzz数据库,提供由OSS-Fuzz发现的C/C++软件的漏洞。
OSV服务还汇总了所有这些漏洞数据库,可以在我们的网页用户界面上查看。也可以通过同样的现有API 用一个命令来查询它们。
curl -X POST -d \ '{"commit":"a46c08c533cfdf10260e74e2c03fa84a13b6c456"}' \ "https://api.osv.dev/v1/query" curl -X POST -d \ '{"version":"2.4.1","package": {"name":"jinja2","ecosystem":"PyPI"}}' \ "https://api.osv.dev/v1/query" |
自动维护漏洞数据库
生成高质量的漏洞数据也很困难。除了OSV现有的自动化,我们为漏洞数据库的维护建立了更多的自动化工具,并使用这些工具来引导社区Python咨询数据库。这个自动化工具采用了现有的feeds,准确地将它们与软件包相匹配,并在最少的人工干预下生成包含精确、有效的版本范围的条目。