开源漏洞扫描器 OSV-Scanner 的新进展

作者:Sender Su  来源:原创内容  发布日期:2023-05-10  最后修改日期:2023-05-11

之前Google释出开源漏洞扫描器 OSV-Scanner 的时候,我这简单介绍了一下:

OSV-Scanner: Google研发的开源漏洞扫描器

时隔差不多半年,再来看看OSV-Scanner的进展。当前版本是1.3,下载地址是:

https://github.com/google/osv-scanner/releases

article banner

也可以通过其它方式下载安装,比如scoop,homebrew,pacman,apk等等。

了解这个扫描器的开发者都应该知道了,OSV-Scanner是OSV.DEV数据库的前端工具,对软件项目的依赖项列表检查关联的漏洞并给出警示。

由于OSV.dev数据库是开源的和分布式的,与其它闭源的漏洞数据库和扫描工具相比,有如下优势:

  • 以开放和权威的来源(例如RustSec漏洞咨询数据库,https://rustsec.org/)作为OSV的漏洞信息的上游来源

  • 开放性的许可,在大量的改进建议下产生了高质量的漏洞数据库

  • OSV格式以机器可读的格式明确地存储了受漏洞影响的软件包版本信息,并能精确地映射到开发人员引用的软件包清单实现漏洞发现。

具体到软件的版本更新方面,现在的1.3版新功能特性包括有

扫描方面的新特性包括:

  • 优化多漏洞时的扫描速度

  • 支持SPDX和CycloneDX格式的SBOM清单

  • 支持17种lockfile,并可在--lockfile参数中指定使用什么parser

  • 支持扫描debian包状态文件(通常位于/var/lib/dpkg/status)

  • 整合 GoVulnCheck(https://go.dev/security/vuln/),对GO语言代码进行扫描时可通过--experimental-call-analysis参数试用

  • 扫描时默认遵循 .gitignore 文件的设定

输出方面的新特性包括:

  • 使用--format参数指定输出格式,包括支持markdown格式

  • 对输出的漏洞信息进行排序

  • 记录从SBOM扫描的软件包的数量。

API 函数库方面的新特性包括:

  • 改善OSV模型,允许第三方使用API函数库

  • OSV API调用重试机制,缓解瞬时网络拥堵

文档方面,所有的文档都进行了更新:

https://google.github.io/osv-scanner/

接下来看看具体使用情况。笔者从github扒拉了一些代码,为了能让osv-scanner扫描出漏洞还故意clone了些旧版本。

首先是对单个仓库进行扫描,例子是zxing的代码,可见osv-scanner会先确认代码仓库的当前revision,然后基于找到的所有pom.xml进行软件包检查,最后输出了3个漏洞信息:

osv-scanner output

如果是对多个仓库进行扫描,osv-scanner的扫描过程也相差无几,最后合并输出扫描发现的结果。用输出结果重定向到文本文件的方式留存输出结果如下:

╭─────────────────────────────────────┬───────────┬──────────────────────────────────────────┬──────────────────────────────────────────┬──────────────────────────────── ≈
│ OSV URL (ID IN BOLD)                │ ECOSYSTEM │ PACKAGE                                  │ VERSION                                  │ SOURCE                          ≈
├─────────────────────────────────────┼───────────┼──────────────────────────────────────────┼──────────────────────────────────────────┼──────────────────────────────── ≈
│ https://osv.dev/GHSA-4jrv-ppp4-jm57 │ Maven     │ com.google.code.gson:gson                │ 2.5                                      │ !toolbox4minecraft\amidst\pom.x ≈
│ https://osv.dev/GHSA-269g-pwp5-87pp │ Maven     │ junit:junit                              │ 4.11                                     │ !toolbox4minecraft\amidst\pom.x ≈
│ https://osv.dev/OSV-2022-1068       │ GIT       │                       6eebecc3034a630b105437fc63c0b8bbd95ec191                       │ clamav                         ≈
│ https://osv.dev/OSV-2022-636        │ GIT       │                       6eebecc3034a630b105437fc63c0b8bbd95ec191                       │ clamav                         ≈
│ https://osv.dev/OSV-2022-94         │ GIT       │                       6eebecc3034a630b105437fc63c0b8bbd95ec191                       │ clamav                         ≈
│ https://osv.dev/OSV-2023-164        │ GIT       │                       6eebecc3034a630b105437fc63c0b8bbd95ec191                       │ clamav                         ≈
│ https://osv.dev/OSV-2023-350        │ GIT       │                       6eebecc3034a630b105437fc63c0b8bbd95ec191                       │ clamav                         ≈
│ https://osv.dev/GHSA-jppv-gw3r-w3q8 │ RubyGems  │ rake                                     │ 10.1.0                                   │ syslog-client-for-windows\Gemfi ≈
│ https://osv.dev/GHSA-5mg8-w23w-74h3 │ Maven     │ com.google.guava:guava                   │ 18.0                                     │ zxing\pom.xml                   ≈
│ https://osv.dev/GHSA-mvr2-9pj6-7w5j │ Maven     │ com.google.guava:guava                   │ 18.0                                     │ zxing\pom.xml                   ≈
│ https://osv.dev/GHSA-269g-pwp5-87pp │ Maven     │ junit:junit                              │ 4.12                                     │ zxing\pom.xml                   ≈
╰─────────────────────────────────────┴───────────┴──────────────────────────────────────────┴──────────────────────────────────────────┴──────────────────────────────── ≈

这输出内容的格式还有点不太对,不过不碍事。

由于OSV-Scanner是OSV.dev的前端,所以我们用扫描结果在OSV.dev上检索一下看看,上面列出的那些就选ClamAV的OSV-2022-1068吧,反正我这长期关注ClamAV(比如跨平台开源安全软件 ClamAV 1.1 发布,新特性公布)。

在OSV.dev界面搜索OSV-2022-1068,得到如下结果:

osv.dev search result

从截图可见,OSV.dev总漏洞数已经达到4万7千多个。最前面的ID是可以点开查看详细信息的,漏洞的URL是:

https://osv.dev/vulnerability/OSV-2022-1068

内容如下:

osv.dev search result detail

漏洞细节很详细,给出了影响范围、软件的版本、严重程度等关键信息,还有很多外源链接可以进一步发掘漏洞信息。注意第一个URL是这个漏洞的OSV描述格式(YAML语法)。

使用这个工具的正确态度

“程序员不检查”是个无可奈何的梗,但既然扫描出漏洞,开发者就应该在更新软件包后才继续开发。

从项目的角度,可以利用该扫描器作为强制的代码检查工具,比如设置当开发人员提交代码也就是git commit时在服务器端自动启动扫描(即GIT 钩子);又或者没那么占资源地用定时任务每天扫描一次代码仓库,把扫描结果通知项目管理人员或直接通知到开发人员。通过这些方法,确保软件代码获得持续的漏洞监控。

尤其是在释出新版本前,应通过osv-scanner检查确认不存在已知的漏洞,这样做可以提前避免各种本来是可预见的问题,从而有效地实现DevSecOps的循环,提升软件工程项目的交付质量

本栏目相关
  •  2024-11-13 挖深网络安全的兔子洞:CPU 微码补丁管理
  •  2024-11-10 安全加固基准搅合国产操作系统上下游关系
  •  2022-05-11 CIS-CAT 配置评估工具介绍及操作实践
  •  2022-03-16 Windows 系统安全基线及软件工具介绍
  •  2022-08-28 网络攻防中的色彩象征
  •  2022-03-11 安装RHEL/CentOS时如何选择配置安全策略?
  •  2023-02-27 注意:TightVNC 2.8.75 释出,修补 zlib 漏洞 CVE-2022-37434
  •  2022-03-25 从甲方角度介绍“CIS互联网安全中心”
  •  2022-03-17 详细了解微软安全合规工具包(SCT)
  • 本站微信订阅号:

    微信订阅号二维码

    本页网址二维码: