之前Google释出开源漏洞扫描器 OSV-Scanner 的时候,我这简单介绍了一下:
时隔差不多半年,再来看看OSV-Scanner的进展。当前版本是1.3,下载地址是:
也可以通过其它方式下载安装,比如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调用重试机制,缓解瞬时网络拥堵
文档方面,所有的文档都进行了更新:
接下来看看具体使用情况。笔者从github扒拉了一些代码,为了能让osv-scanner扫描出漏洞还故意clone了些旧版本。
首先是对单个仓库进行扫描,例子是zxing的代码,可见osv-scanner会先确认代码仓库的当前revision,然后基于找到的所有pom.xml进行软件包检查,最后输出了3个漏洞信息:
如果是对多个仓库进行扫描,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总漏洞数已经达到4万7千多个。最前面的ID是可以点开查看详细信息的,漏洞的URL是:
内容如下:
漏洞细节很详细,给出了影响范围、软件的版本、严重程度等关键信息,还有很多外源链接可以进一步发掘漏洞信息。注意第一个URL是这个漏洞的OSV描述格式(YAML语法)。
使用这个工具的正确态度
“程序员不检查”是个无可奈何的梗,但既然扫描出漏洞,开发者就应该在更新软件包后才继续开发。
从项目的角度,可以利用该扫描器作为强制的代码检查工具,比如设置当开发人员提交代码也就是git commit时在服务器端自动启动扫描(即GIT 钩子);又或者没那么占资源地用定时任务每天扫描一次代码仓库,把扫描结果通知项目管理人员或直接通知到开发人员。通过这些方法,确保软件代码获得持续的漏洞监控。
尤其是在释出新版本前,应通过osv-scanner检查确认不存在已知的漏洞,这样做可以提前避免各种本来是可预见的问题,从而有效地实现DevSecOps的循环,提升软件工程项目的交付质量。
本站微信订阅号:
本页网址二维码: