SnykでSBOM生成してみた

12月になりました、アドベントカレンダーの季節ですね!本記事では、SnykでのSBOM生成について詳しく見ていきたいと思います。
2023.12.04

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

今年も残りわずか… 12月に入りました。アドベントカレンダーの季節です!
本記事はSnykを使ってコードをセキュアにした記事を投稿しよう! by Snyk Advent Calendar 2023クラスメソッド DevOps・セキュリティ Advent Calendar 2023の12/4記事になります!

  • Snykを使ってコードをセキュアにした記事を投稿しよう! by Snyk Advent Calendar 2023

  • クラスメソッド DevOps・セキュリティ Advent Calendar 2023

今回は、SnykでのSBOM生成について詳しく見ていきたいと思います。

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作成が可能です。

APIを利用したSBOM 生成

Snykでは、APIを利用してSBOMの生成が可能です。
APIを使用して、ブラウザまたはcURLからSBOMを出力できます。

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を生成していきます

※こちらの機能をお使いになる場合には、Snykのアカウント作成が必要です。

Snyk REST API Documentation上で APIを試すことが出来ます。
下記のSnyk APIにアクセスします。

Get a project’s SBOM documentまで、スクロールします。
今回は多くの脆弱性が含まれているjuice-shopのSBOMを出力しました。
ご自身のSnykアカウント内の情報を紐づけていきます。

それぞれ記入していきます。

  • org_id
  • project_id
  • version
  • format
    • cyclonedx1.4+json / cyclonedx1.4+xml / spdx2.3+json

その後、Tryをクリックします。

指定したファイルフォーマットでレスポンスが来ていることがわかります。

またAPIを実行する際のcommandも指定してくれるので、コピーしてCLIの中などで、使用していただくことが可能です。

非常にシンプルなAPIなので、Snykのアカウントを登録していただければ、すぐに試すことが可能です。

また、cURLでも実行が可能です。

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 ファイルが出力されれば、成功です。

SBOM Checker

SBOM Checkerは、SBOM の脆弱性をチェックする無料の Web ツールです。
Snyk のアカウントは不要で、 Snyk 脆弱性データベースで脆弱性情報を検索することができます。
SBOM チェッカーにアクセスすることで脆弱性のスキャンが可能です。
SBOM Checker ↓

今回はサンプルデータでスキャンしてみます。

スキャン後、Snyk脆弱性データベースを使用したスキャン結果がすぐ出力されます。

おわりに

今回はSnykでのSBOM生成について試してみました。
また、Snykは2023年11月7日、ServiceNow との新しい共同ソリューションとしてSBOMの脆弱性インテリジェンスを提供することが発表されました。

こちらも試してみたいですね。

Snykに関するブログも沢山展開されていますので、是非こちらもご覧ください。

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