はじめに
2021年末に発覚した「Log4Shell」脆弱性は、JavaのロギングライブラリLog4jに存在した欠陥が、世界中の何百万ものアプリケーションに影響を与えた事件として記憶に新しいでしょう。この一件は、私たちが日常的に利用するオープンソースパッケージに潜む脆弱性が、いかに深刻なセキュリティリスクになり得るかを浮き彫りにしました。
このように、自作のコードだけでなく、それが依存するライブラリ、ビルドツール、コンテナイメージといった連鎖(サプライチェーン)全体を保護する考え方が「ソフトウェアサプライチェーンセキュリティ」です。現代の開発において、この視点はもはや無視できません。
この記事では、すべての開発者が今すぐ実践できる、ソフトウェアサプライチェーンセキュリティの第一歩として、代表的なツールnpm auditとTrivyを使った脆弱性スキャンと修正の方法を具体的に解説します。
最短で課題解決する一冊
この記事の内容と高い親和性が確認できたベストマッチです。早めにチェックしておきましょう。
SBOM (ソフトウェア部品表) の重要性
対策を講じる前に、まず自分たちのアプリケーションが「何でできているか」を正確に把握する必要があります。そのためのリストがSBOM (Software Bill of Materials) ソフトウェア部品表です。
SBOMは、アプリケーションを構成する全てのコンポーネント(ライブラリ、フレームワーク、OSパッケージなど)とそのバージョン、ライセンス情報を一覧にしたものです。SBOMを持つことで、新たな脆弱性が発見された際に、自分たちのプロダクトが影響を受けるかを迅速に特定できるようになります。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
実践①: npm auditによる依存関係の脆弱性スキャンと修正
Node.js開発者にとって最も身近なツールが、npmに標準で付属するnpm auditです。
npm auditとは?
npm auditは、プロジェクトのpackage-lock.jsonに記録されている依存関係ツリーを、GitHub Advisory Databaseなどの脆弱性データベースと照合し、既知の脆弱性がないかをチェックしてくれるコマンドです。
使い方とレポートの見方
プロジェクトのルートディレクトリで以下のコマンドを実行します。
npm audit脆弱性が発見されると、以下のようなレポートが出力されます。
# npm audit report
axios < 0.21.1
Severity: high
Cross-Site Request Forgery (CSRF) - https://npmjs.com/advisories/1594
fix available via `npm audit fix`
node_modules/axiosこのレポートは、axiosの0.21.1未満のバージョンに高(high)深刻度の脆弱性があることを示しています。
脆弱性の修正
npm auditは、多くの場合、脆弱性を自動で修正する手段も提供してくれます。
npm audit fixこのコマンドを実行すると、npmは現在のpackage.jsonで定義されたセマンティックバージョニングの範囲内で、脆弱性が修正されたバージョンにpackage-lock.jsonを更新します。これは安全な操作です。
もし、修正に破壊的変更を伴うメジャーバージョンの更新が必要な場合は、npm audit fix --forceを使うこともできますが、アプリケーションの動作に影響が出る可能性があるため、実行後は必ず十分なテストが必要です。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
実践②: Trivyによる多角的なスキャン
npm auditはNode.jsエコシステムに特化していますが、より汎用的なスキャンツールとしてTrivyが非常に強力です。Trivyは、Aqua Security社が開発するオープンソースの脆弱性スキャナで、コンテナイメージやファイルシステムなど、様々な対象をスキャンできます。
インストール
macOSの場合はHomebrewで簡単にインストールできます。
brew install trivyファイルシステムのスキャン
trivy fsコマンドは、プロジェクトディレクトリ内のロックファイル(package-lock.json, yarn.lock, pom.xml, Gemfile.lockなど)を自動で探し出し、脆弱性をスキャンします。
trivy fs .npm auditと同様の結果が得られますが、Trivyは複数の言語の依存関係を一度にスキャンできるのが強みです。
コンテナイメージのスキャン
DevSecOpsにおいてTrivyが真価を発揮するのが、コンテナイメージのスキャンです。アプリケーションをDockerイメージとしてビルドした後、そのイメージに脆弱性がないかを確認できます。
trivy image my-app:latestこのコマンドは、アプリケーションのライブラリ(例: axios)だけでなく、ベースイメージ(例: node:18-alpine)に含まれるOSパッケージ(glibcなど)の脆弱性も検出します。これにより、アプリケーション全体のリスクを網羅的に把握できます。
SBOMの生成
Trivyは脆弱性スキャンだけでなく、SBOMの生成もサポートしています。標準的なCycloneDX形式で出力するには、以下のようにします。
trivy image --format cyclonedx --output sbom.json my-app:latestさらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
CI/CDへの組み込み
これらの脆弱性スキャンは、開発者の手元で実行するだけでなく、CI/CDパイプラインに組み込むことが不可欠です。GitHub Actionsを使えば、コードがプッシュされるたびに自動でスキャンを実行し、問題があればビルドを失敗させるといった制御が可能です。
GitHub Actionsのワークフロー例:
name: Security Scan
on: [push]
jobs:
trivy_scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Trivy vulnerability scanner in repo mode
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
ignore-unfixed: true
format: 'table'
severity: 'CRITICAL,HIGH'さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
まとめ
ソフトウェアサプライチェーンセキュリティは、もはや専門家だけのものではありません。オープンソースを日常的に利用するすべての開発者が、自らの手でアプリケーションの安全性を確認し、向上させる責務を負っています。
npm auditのような身近なツールから始め、Trivyのような汎用ツールでスキャンの範囲を広げ、CI/CDで自動化する。この「シフトレフト」(開発の早い段階でセキュリティを組み込む)のアプローチを実践することで、より安全なソフトウェアを世に送り出すことができるのです。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。





