使用GitHub的SBOM输出功能时,我对一些事情产生了疑问

2023年3月28日,GitHub发布了从其软件仓库中导出软件的SBOM(SPDX格式)的功能。

请参阅GitHub信息(1)和国内的@IT文章(2)以获取概要的介绍。在这里,我将写下实际使用中让人关注的事项。请注意,导出步骤如下图所示。

GitHubRepoExportSBOM_Procedure.png

关于引起了注意的问题

通过使任何人都能够轻松创建软件供应链和组件清单(SBOM),降低了获取SBOM及使用它进行各种操作(如检查漏洞等)的难度,这是一件很好的事情。

然而,必须注意以下几点。

    1. SBOM导出功能需要在GitHub上登录才能使用。如果没有登录,点击”导出SBOM”会显示{“error”: “Not Found”}。由于需要GitHub账户,没有账户的人需要创建一个。

导出的SBOM只支持SPDX格式(JSON)。SPDX版本是2.3(截至2023年3月28日的最新版本)。不支持以SPDX格式(XML)或CycloneDX格式导出。如果要使用导出的SBOM进行进一步处理(如漏洞扫描或导入到自己的系统中),处理方必须支持SPDX格式(JSON)的2.3版本。

并非所有项目都能正确创建SBOM。看起来只有使用了具有依赖解决功能的系统(如Maven或npm)构建的项目才能正确导出SBOM。例如,使用Ant的项目似乎无法创建正确的SBOM。

无法确定SBOM是哪个版本(分支)。在”Code”标签页中选择了几个分支导出SBOM并比较它们的差异,但组件(名称和版本)没有任何变化。可能只能导出最新版的master分支的SBOM。因此,如果需要”最新发布版本之前的SBOM”之类的内容,可能无法通过GitHub的SBOM导出功能实现(可能只能获取源代码并使用其他工具自行创建SBOM)。

几乎没有可以处理导出的SBOM的免费漏洞扫描器。到2023年3月28日,仅有Google公开的OSV-Scanner(3)可用(※)。OWASP的Dependency Track(4)不接受SPDX格式的SBOM。收费的漏洞扫描器(即SCA工具)可以导出SBOM(当然),但可能无法导入SBOM,因此如果想将GitHub的SBOM导出到收费SCA工具中使用,需要确认该工具的支持情况。

(※)我尝试使用GitHub导出的SBOM作为OSV-Scanner 1.3.1的输入,但出现”No package sources found, –help for usage information.”的错误,无法进行漏洞扫描。OSV-Scanner支持带有包URL的CycloneDX和SPDX格式的SBOM,而此次使用的SBOM中包含了pkg:maven/…和pkg:gem/…等Package URL,所以以为可以进行扫描,但实际上不行(使用CycloneDX格式则可以扫描)。目前,使用GitHub导出的SBOM无法在免费工具中进行漏洞扫描。查看了OSV-Scanner的源代码后发现,作为OSV-Scanner输入的SPDX格式SBOM文件的文件名必须包含.spdx扩展名(虽然在README和命令帮助中没有写…)(5)。因此,我将SBOM的扩展名从.json更改为.spdx并再次运行OSV-Scanner成功进行了漏洞扫描。

kali@kali:~$ osv-scanner -S dependency-track.json 
No package sources found, --help for usage information.
kali@kali:~$ mv dependency-track.json dependency-track.spdx
kali@kali:~$ osv-scanner -S dependency-track.spdx 
Scanned /home/kali/dependency-track.spdx as SPDX SBOM and found 205 packages
╭─────────────────────────────────────┬───────────┬───────────────┬─────────┬───────────────────────╮ ≈
│ OSV URL (ID IN BOLD)                │ ECOSYSTEM │ PACKAGE       │ VERSION │ SOURCE                │
├─────────────────────────────────────┼───────────┼───────────────┼─────────┼───────────────────────┤ ≈
│ https://osv.dev/GHSA-3f7h-mf4q-vrm4 │ Maven     │ woodstox-core │ 6.2.8   │ dependency-track.spdx │
│ https://osv.dev/GHSA-3f7h-mf4q-vrm4 │ Maven     │ woodstox-core │ 6.3.0   │ dependency-track.spdx │
│ https://osv.dev/GHSA-3f7h-mf4q-vrm4 │ Maven     │ woodstox-core │ 6.3.1   │ dependency-track.spdx │
│ https://osv.dev/GHSA-wxx5-w9jc-48wx │ Maven     │ pebble        │ 3.1.5   │ dependency-track.spdx │
│ https://osv.dev/GHSA-g2fg-mr77-6vrm │ Maven     │ libthrift     │ 0.13.0  │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven     │ postgresql    │ 42.3.1  │ dependency-track.spdx │
│ https://osv.dev/GHSA-673j-qm5f-xpv8 │ Maven     │ postgresql    │ 42.3.1  │ dependency-track.spdx │
│ https://osv.dev/GHSA-727h-hrw8-jg8q │ Maven     │ postgresql    │ 42.3.1  │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven     │ postgresql    │ 42.3.1  │ dependency-track.spdx │
│ https://osv.dev/GHSA-v7wg-cpwc-24m4 │ Maven     │ postgresql    │ 42.3.1  │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven     │ postgresql    │ 42.3.2  │ dependency-track.spdx │
│ https://osv.dev/GHSA-673j-qm5f-xpv8 │ Maven     │ postgresql    │ 42.3.2  │ dependency-track.spdx │
│ https://osv.dev/GHSA-727h-hrw8-jg8q │ Maven     │ postgresql    │ 42.3.2  │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven     │ postgresql    │ 42.3.2  │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven     │ postgresql    │ 42.3.3  │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven     │ postgresql    │ 42.3.3  │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven     │ postgresql    │ 42.3.4  │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven     │ postgresql    │ 42.3.4  │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven     │ postgresql    │ 42.3.5  │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven     │ postgresql    │ 42.3.5  │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven     │ postgresql    │ 42.3.6  │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven     │ postgresql    │ 42.3.6  │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven     │ postgresql    │ 42.4.0  │ dependency-track.spdx │
│ https://osv.dev/GHSA-r38f-c4h4-hqq2 │ Maven     │ postgresql    │ 42.4.0  │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven     │ postgresql    │ 42.4.1  │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven     │ postgresql    │ 42.4.2  │ dependency-track.spdx │
│ https://osv.dev/GHSA-562r-vg33-8x8h │ Maven     │ postgresql    │ 42.5.0  │ dependency-track.spdx │
╰─────────────────────────────────────┴───────────┴───────────────┴─────────┴───────────────────────╯ ≈
kali@kali:~$ 

    • (1) Introducing self-service SBOMs (GitHub)

(2) GitHubリポジトリからSBOMを簡単に生成できる新機能をリリース、GitHub (@IT)

(3) OSV-Scanner

(4) Dependency Track

(5) osv-scanner/internal/sbom/spdx.go 内の func (s *SPDX) MatchesRecognizedFileNames(path string) のコメント …CycloneDX に対しても似たような制約があります(osv-scanner/internal/sbom/cyclonedx.go)。

bannerAds