こんにちは、こんばんは、アライアンス事業部のきだぱんです。
今年も残りわずか… 12月に入りました。アドベントカレンダーの季節です!
本記事はクラスメソッド DevOps・セキュリティ Advent Calendar 2023の12/10記事になります!
- クラスメソッド DevOps・セキュリティ Advent Calendar 2023
今回は、SnykでのSBOM生成について詳しく見ていきたいと思います。
- Snyk CLIでのSBOM生成
- BomberでSBOMの脆弱性スキャン
- SBOM Checker
SBOMとは
今回の主役であるSBOMとは一体何者なのでしょうか。
Software Bill of Materialsで、SBOMと言います。
日本語で言うと、ソフトウェア部品表です。
SBOMは、製品やソフトウェアに含まれるコンポーネントの情報(構成情報)とそのコンポーネント間の依存関係をリスト化したデータです。
食品パッケージの裏に記載されている原材料表示のように、ソフトウェアを構成する部品を一覧化したリストをイメージすると分かりやすいでしょう。
SBOMを作成・管理することで、特定のソフトウェアの構成要素に関する情報が可視化でき、ソフトウェアの構成情報管理・組み込まれているコンポーネントのライセンス管理・IT資産管理・脆弱性管理を強化することができます。
特に脆弱性管理では、新たな脆弱性が発見された場合、SBOMに書かれたコンポーネントの依存関係から影響範囲を特定でき、早期対応に繋げることができます。
また、2021年5月に発出された米国大統領令(EO14028)において、政府調達におけるSBOM活用の検討指示が明記されたことをきっかけに、米国規制当局を中心とした取引組織へのSBOM整備の義務化など、SBOMが急速に普及しつつあります。
日本でも経済産業省により産業分野ごとのSBOM導入に向けた議論や実証実験が始まるなど、普及に向けた取り組みが進んでいます。
国際取引では納入先からSBOMの提供を求められる事例の増加が今後見込まれるため、受託企業やソフトウェアベンダーはSBOMに関する知見の整理、並びにSBOM作成・共有のためのツールの選定を実施することが望まれます。
「ソフトウェア管理に向けたSBOM(Software Bill of Materials)の導入に関する手引」(経済産業省)
こうした点から、SBOMに取り組む企業が増えています。
そんなSBOM作成~脆弱性チェックに役立つツールが、Snykです!
Snykとは
そもそもSnykとは、何なのか。
Snyk(スニーク)はデベロッパーファーストのセキュリティプラットフォームです。
Snykは、コードやオープンソースとその依存関係、コンテナやIaC(Infrastructure as a Code) における脆弱性を見つけるだけでなく、優先順位をつけて修正するためのツールです。
Gitや統合開発環境(IDE)、CI/CDパイプラインに直接組み込むことができるので、デベロッパーが簡単に使うことができます。
Snyk は、Java、.NET、JavaScript、Python、Golang、PHP、C/C++、Ruby、Scalaなど、多くの言語とツールをサポートしています。
また、Docker、Terraform、k8s、Infrastructure as Codeのファイルスキャンもサポートしています。
SBOM生成
Snykを使用することで、開発ワークフローでのSBOM作成が可能です。
Snykでは、Snyk CLIを利用してSBOMの生成が可能です。
APIでの生成方法は下記をご覧ください。
2つのSBOMフォーマット
フォーマットについても見ておきましょう。
SBOMのフォーマットは2種類です。
- SPDX
ISO/IEC JTC 1に、ISO/IEC 5962というバージョンでISO化(国際オープン標準)されたSBOMのフォーマットです。
SPDX WorkGroupが提供しています。
SPDXが標準とされているので、使用率が高いです。 -
Cyclone DX
xml/json形式の比較的軽量のSBOMフォーマットです。
アプリケーションのセキュリティの背景やサプライチェーンのコンポーネント分析に使用するために設計されており、SPDXやSWIDタグと同様の目的を果たせるよう構成されています。
SBOMの生成については下記のブログをご覧ください。↓
実際にSBOMを生成していきます。
今回は多くの脆弱性が含まれているjuice-shopのSBOMを生成します。
事前準備
- Snyk CLIのインストール
- snyk2spdxをインストール(npmが必要)
npm install snyk2spdx
-
jsonデータの加工, 整形をするjqのインストール
brew install jq
スキャン対象のフォルダに移動し、下記コマンドを実行するだけです。
$ snyk test --json | npx snyk2spdx | jq
{
"id": "----",
"name": "----",
"specVersion": "SPDX-3.0",
"profile": [
"base",
"--------"
],
"dataLicense": "CC0-1.0",
"creator": "Organization: Snyk Ltd",
"documentNamespace": "spdx.org/spdxdocs/xxxx-xxx-xxxxx",
"description": "Snyk test result for project in SPDX SBOM format",
"vulnerabilities": [
{
"id": "SNYK-xxx",
"name": "SNYK-xxx",
"summary": "xxxx",
"details":
.
.
.
modified": "2023-12-05T16:08",
"published": "2023-12-05T16:08:24"
},
ファイル出力したい場合はsnyk test --json | npx snyk2spdx --output=spdx.json
を実行します。
Bomber
Bomberとは、SBOM の脆弱性をスキャンするSCA(ソフトウェア構成分析 Software Composition Analysis)ツールです。
Snyk でサポートが可能なため、Bomberを使いながらも Snyk脆弱性データベースで脆弱性情報を確認することができます。
スキャン結果はファイル出力も可能です。
# スキャンを実行します
bomber scan --provider=xxx --username=xxx --token=xxx spdx-sbom.json
██▄ ▄▀▄ █▄ ▄█ ██▄ ██▀ █▀▄
█▄█ ▀▄▀ █ ▀ █ █▄█ █▄▄ █▀▄
DKFM - DevOps Kung Fu Mafia
https://github.com/devops-kung-fu/bomber
Version: 0.4.0
■ Ecosystems detected: npm
■ Scanning packages for vulnerabilities...
■ Vulnerability Provider: Snyk (https://security.snyk.io)
■ Files Scanned
xxxx
╭──────┬──────────────────────┬─────────┬──────────┬────────────────────────────────────┬────────╮
│ TYPE │ NAME │ VERSION │ SEVERITY │ VULNERABILITY │ EPSS % │
│ ├──────────────────────┼─────────┼──────────┼────────────────────────────────────┼────────┤
│ │ path-parse │ 1.0.5 │ MODERATE │ SNYK-JS-PATHPARSE-1077067 │ N/A │
│ ├──────────────────────┼─────────┼──────────┼────────────────────────────────────┼────────┤
│ │ npmconf │ 0.0.24 │ HIGH │ npm:npmconf:20180512 │ N/A │
│ ├──────────────────────┼─────────┼──────────┼────────────────────────────────────┼────────┤
.
.
│ │ │ │ │ │ N/A │
╰──────┴──────────────────────┴─────────┴──────────┴────────────────────────────────────┴────────╯
Total vulnerabilities found: 156
╭──────────┬───────╮
│ RATING │ COUNT │
├──────────┼───────┤
│ CRITICAL │ 5 │
├──────────┼───────┤
│ HIGH │ 86 │
├──────────┼───────┤
│ MODERATE │ 36 │
├──────────┼───────┤
│ LOW │ 11 │
╰──────────┴───────╯
NOTES:
ファイル出力する場合は、こちらのコマンドを実行します
bomber scan --provider snyk --token $SNYK_TOKEN nodejs-goof_sbom.json --output=json > fil
SBOM Checker
SBOM Checkerは、SBOM の脆弱性をチェックする無料の Web ツールです。
Snyk のアカウントは不要で、 Snyk 脆弱性データベースで脆弱性情報を検索することができます。
SBOM チェッカーにアクセスすることで脆弱性のスキャンが可能です。
SBOM Checker ↓
今回はサンプルデータでスキャンしてみます。
スキャン後、Snyk脆弱性データベースを使用したスキャン結果がすぐ出力されます。
おわりに
今回はSnykでのSBOM生成について試してみました。
また、Snykは2023年11月7日、ServiceNow との新しい共同ソリューションとしてSBOMの脆弱性インテリジェンスを提供することが発表されました。
こちらも試してみたいですね。
Snykに関するブログも沢山展開されていますので、是非こちらもご覧ください。
この記事がどなたかのお役に立てば幸いです。
以上、きだぱんでした。