SnykでSBOM生成してみた#2

12月になりました、アドベントカレンダーの季節ですね!本記事は、クラスメソッド DevOps・セキュリティ Advent Calendar 2023の12/10記事です。今回は、SnykでのSBOM生成について詳しく見ていきたいと思います。
2023.12.10

こんにちは、こんばんは、アライアンス事業部のきだぱんです。

今年も残りわずか… 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に関するブログも沢山展開されていますので、是非こちらもご覧ください。

この記事がどなたかのお役に立てば幸いです。
以上、きだぱんでした。