我试着使用Snyk SBOM API (Beta)进行调用
首先
这篇文章是关于开发者安全的文章,用Snyk进行投稿的“Snyk Advent Calendar 2022”第21天的文章。
我将为您申请一个专属的自动厨师奖!(在Snyk的日历帖子上可能获得豪华礼品!可以回溯到以前的帖子上发布。)
我們將驗證一下引人期待的SBOM API的Beta版本(2022-12-15~beta),這是本文的主題。
SBOM 是指软件构建材料清单。
SBOM(软件物料清单:软件部件表)是一份包含构成软件的库、模块以及其依赖关系等信息的清单。通过SBOM,可以更容易地了解构建或使用的软件相关的许可和安全风险。
在美国国家电信和信息管理局(NTIA)的网站上,如下所定义。
一个”软件材料清单”(SBOM)是软件的嵌套清单,列出了构成软件组件的成分列表。
由于2021年的美国总统令关于网络安全以及最近备受关注的Apache Log4j的漏洞等事件,再次引发了对软件供应链安全重要性的认识,因此现在大家开始关注软件组件清单(SBOM)。
以下的文章也是关于软件构成清单方面的参考文献:
在这种趋势下,各个公司的软件组合分析(SCA)工具也在逐渐完善其输出软件构成清单(SBOM)的功能。
Snyk软件构件清单(SBOM)API
在2022年11月8日的SnykLaunch活动中,宣布了SBOM API和CLI等SBOM工具。感谢Snyk Japan发布了日本语的总结文章。
截至2022年12月21日的时间点,SBOM API仍处于Beta状态,CLI生成功能尚未发布。本次我们将尝试直接调用Beta版本的SBOM API。
SBOM API(测试版)的限制
-
- 有償サブスクリプションを契約している必要があります
Free プラン で API を利用した場合は 403 Forbidden となります
出力できるフォーマットは CycloneDX のみをサポートしています
代表的な SBOM のフォーマットとして SPDX や CycloneDX があります
敲试一下
根据以下的 Snyk REST API 文档,尝试执行 cURL 命令。API 版本为 2022-12-15~beta。
这次我们按照以下方式输出了 nodejs-goof 的软件组件清单(SBOM)。请将 Organization ID 输入到 ORG_ID 中,将要输出 SBOM 的项目 ID 输入到 PROJECT_ID 中。SNYK_TOKEN 是SNYK账户的API Token。
export ORG_ID="your-organization-id"
export PROJECT_ID="your-project-id"
export SNYK_TOKEN="your-api-token"
export VERSION="2022-12-15%7Ebeta"
curl -X GET "https://api.snyk.io/rest/orgs/${ORG_ID}/projects/${PROJECT_ID}/sbom?version=${VERSION}&format=cyclonedx%2Bjson" \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token ${SNYK_TOKEN}" \
-H "Accept: application/vnd.cyclonedx+json" | jq . > nodejs-goof-sbom.json
只要能够成功地输出 JSON 文件而没有出错,就算成功了。
我认为在Snyk REST API文档上尝试API请求的方法很简单,除了cURL之外的工具。

使用轰炸机来进行SBOM扫描。
炸弹是一个支持SBOM的漏洞扫描器。
它支持多个脆弱性信息供应商,其中 Snyk 是其中之一,并且似乎在 SnykLaunch 中也宣布了支持。为了方便起见,我们将使用 Snyk 作为供应商,并尝试使用 Snyk API 扫描生成的 SBOM。
从发布页面安装最新发布的平台。
sudo yum install -y https://github.com/devops-kung-fu/bomber/releases/download/v0.4.0/bomber_0.4.0_linux_amd64.rpm
只需要将提供者指定为Snyk,然后执行扫描即可。Bomber将会识别环境变量SNYK_TOKEN。
export SNYK_TOKEN="your-api-token"
bomber scan --provider snyk nodejs-goof-sbom.json
我們可以從SBOM中進行弱點掃描!
$ bomber scan --provider snyk nodejs-goof-sbom.json
██▄ ▄▀▄ █▄ ▄█ ██▄ ██▀ █▀▄
█▄█ ▀▄▀ █ ▀ █ █▄█ █▄▄ █▀▄
DKFM - DevOps Kung Fu Mafia
https://github.com/devops-kung-fu/bomber
Version: 0.4.0
■ Ecosystems detected: npm
■ Scanning 980 packages for vulnerabilities...
■ Vulnerability Provider: Snyk (https://security.snyk.io)
■ Files Scanned
nodejs-goof-sbom.json (sha256:c420d3936c5c00287a7ae1423e57203358a41360027f34e95d450d0ea1c1086d)
╭──────┬───────────────────────┬─────────┬──────────┬─────────────────────────────────────────┬────────╮
│ TYPE │ NAME │ VERSION │ SEVERITY │ VULNERABILITY │ EPSS % │
├──────┼───────────────────────┼─────────┼──────────┼─────────────────────────────────────────┼────────┤
│ npm │ yargs-parser │ 9.0.2 │ MODERATE │ SNYK-JS-YARGSPARSER-560381 │ N/A │
│ │ ├─────────┼──────────┼─────────────────────────────────────────┼────────┤
│ │ │ 8.1.0 │ MODERATE │ SNYK-JS-YARGSPARSER-560381 │ N/A │
│ ├───────────────────────┼─────────┼──────────┼─────────────────────────────────────────┼────────┤
│ │ y18n │ 4.0.0 │ HIGH │ SNYK-JS-Y18N-1021887 │ N/A │
│ │ ├─────────┼──────────┼─────────────────────────────────────────┼────────┤
│ │ │ 3.2.1 │ HIGH │ SNYK-JS-Y18N-1021887 │ N/A │
│ ├───────────────────────┼─────────┼──────────┼─────────────────────────────────────────┼────────┤
中略---------------------------------------------------------------------------------------------------
Total vulnerabilities found: 182
╭──────────┬───────╮
│ RATING │ COUNT │
├──────────┼───────┤
│ CRITICAL │ 4 │
├──────────┼───────┤
│ HIGH │ 86 │
├──────────┼───────┤
│ MODERATE │ 79 │
├──────────┼───────┤
│ LOW │ 13 │
╰──────────┴───────╯
NOTES:
1. The list of vulnerabilities displayed may differ from provider to provider. This list
may not contain all possible vulnerabilities. Please try the other providers that bomber
supports (osv, ossindex, snyk)
2. EPSS Percentage indicates the % chance that the vulnerability will be exploited. This
value will assist in prioritizing remediation. For more information on EPSS, refer to
https://www.first.org/epss/
我认为不久之后,Snyk CLI也可以轻松地输出SBOM。这样一来,可以在CI/CD流程中生成SBOM并且扩大利用范围。
希望我的回答对您有所帮助。