はじめに
この記事は 「Snykを使って開発者セキュリティにまつわる記事を投稿しよう! by Snyk Advent Calendar 2022」の 21 日目の記事です。
あなただけの専属自動シェフ賞に応募します!!
(Snyk のカレンダー投稿で豪華プレゼントかもらえるかも!?過去に遡って投稿可能とのことです。)
本記事では一般公開が待ち遠しい、SBOM API の Beta Version (2022-12-15~beta) を検証してみたいと思います。
SBOM とは
SBOM (Software Bill Of Materials:ソフトウェア部品表) とはソフトウェアを構成するライブラリやモジュール、およびその依存関係といった情報をもつインベントリーです。SBOM によって構築または使用しているソフトウェアに関連するライセンスおよびセキュリティリスクを把握しやすくなります。
国家電気通信情報庁 (NTIA) の Web サイトでは以下のように定義されています。
A "Software Bill of Materials" (SBOM) is a nested inventory for software, a list of ingredients that make up software components.
2021 年のサイバーセキュリティに関する米国大統領令 や記憶に新しい Apache Log4j の脆弱性などに端を発して、ソフトウェアサプライチェーンにおけるセキュリティの重要性が改めて認識されることとなり、この SBOM が注目されています。
SBOM については以下の記事も参考になりました。
このような動向の中、各社の SCA (Software Composition Analysis) ツールにおいても SBOM を出力する機能が整備されつつあります。
Snyk SBOM API
Snyk でも 2022/11/8 に開催された SnykLaunch にて SBOM API および CLI などの SBOM ツールが発表されました。Snyk Japan さんが日本語まとめ記事を公開してくれています。
本記事執筆の 2022/12/21 時点で SBOM API は Beta ステータス、CLI での生成機能はまだ公開されていないようです。今回は Beta バージョンの SBOM API を直接叩いてみたいと思います。
繰り返しますが SBOM API は 2022/12/21 時点で Beta ステータスです。一般公開リリースまでに応答内容や動作がかわる可能性がありますのでご注意ください。
SBOM API (Beta) の制限
- 有償サブスクリプションを契約している必要があります
- Free プラン で API を利用した場合は 403 Forbidden となります
- 出力できるフォーマットは CycloneDX のみをサポートしています
叩いてみた
以下の Snyk REST API Documentation に従って cURL を実行してみます。API Version は 2022-12-15~beta
です。
今回は以下のように nodejs-goof の SBOM を出力しました。ORG_ID
に Organization ID を、PROJECT_ID
には SBOM 出力対象のプロジェクト ID を入力してください。SNYK_TOKEN
は SNYK アカウントの API Token です。
nodejs-goof は snyk-labs で公開されているデモ用の脆弱な Node.js アプリケーションです。
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 ファイルが出力されていれば成功です。
cURL 以外では Snyk REST API Documentation 上で API リクエストを試す方法が簡単かと思います。
bomber で SBOM をスキャンする
bomber は SBOM に対応した脆弱性スキャナーです。
複数の脆弱性情報プロバイダーに対応しており、Snyk もその 1 つで SnykLaunch でもサポートが発表されていたようです。せっかくなので bomber を使用して 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
provider に snyk
を指定し、scan を実行するだけです。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 を生成できるようになったりと活用の幅が広がりそうですね。
以上です。
参考になれば幸いです。