Web Security

Software Composition Analysis

SCA(ソフトウェア構成分析)

Category: Web Security / Updated: 2026-05-26

📖

Overview

ソフトウェア構成分析(SCA:Software Composition Analysis)とは、アプリケーションに組み込まれたオープンソースソフトウェア(OSS)やサードパーティコンポーネントを特定し、それらに含まれる既知の脆弱性やライセンスリスクを自動的に検出・管理するセキュリティ手法です。現代のソフトウェア開発では、コードベースの70〜90%がOSSライブラリで構成されており、SCAはサプライチェーンセキュリティの要となっています。

SCAの中核的な概念としてSBOM(Software Bill of Materials:ソフトウェア部品表)があります。SBOMはソフトウェアに含まれるすべてのコンポーネント、バージョン、ライセンス情報を一覧化した構造化データであり、米国の大統領令(EO 14028)でも政府調達ソフトウェアへのSBOM提供が義務化されました。

SCAは依存関係リスクの管理にも不可欠です。直接的な依存だけでなく、推移的依存関係(依存ライブラリがさらに依存するライブラリ)に潜む脆弱性も検出し、ソフトウェアサプライチェーン全体の安全性を可視化します。Log4Shell(CVE-2021-44228)のような重大な脆弱性が発見された際、SBOMがあれば影響範囲を迅速に特定できます。

🔬

Details

主要なSCAツール

  • Snyk:開発者フレンドリーなSCAプラットフォーム。GitHub/GitLab連携が容易で、脆弱性の自動修正PR作成機能を備える。コンテナイメージやIaCのスキャンにも対応
  • Dependabot:GitHubに統合された依存関係管理ツール。脆弱性アラートの発行と自動プルリクエストによるバージョン更新を行う
  • OWASP Dependency-Check:オープンソースのSCAツール。NVDデータベースと照合してJava、.NET、Node.js等の依存関係の脆弱性を検出
  • Black Duck(Synopsys):エンタープライズ向けSCAソリューション。バイナリ解析、ライセンスコンプライアンス管理、ポリシーエンジンを搭載

SBOM標準フォーマット

  • SPDX(Software Package Data Exchange):Linux Foundationが管理するISO/IEC 5962として国際標準化されたSBOMフォーマット。ライセンス情報の表現に強みを持つ
  • CycloneDX:OWASPが策定したSBOMフォーマット。セキュリティ用途に特化しており、脆弱性情報(VEX:Vulnerability Exploitability eXchange)の表現にも対応

両フォーマットともJSON、XML、その他の形式で出力可能であり、CI/CDパイプラインへの組み込みが容易です。米国NTIAのSBOM最小要素(Minimum Elements)では、サプライヤー名、コンポーネント名、バージョン、依存関係、SBOM作成者、タイムスタンプ、一意の識別子の7項目が必須とされています。

脆弱性データベース

  • NVD(National Vulnerability Database):NISTが運営する米国政府の脆弱性データベース。CVSSスコアによる深刻度評価を提供
  • CVE(Common Vulnerabilities and Exposures):MITRE社が管理する脆弱性の共通識別子。CVE-YYYY-NNNNN形式で一意に脆弱性を識別
  • OSV(Open Source Vulnerabilities):Googleが運営するOSS特化の脆弱性データベース。パッケージマネージャーのエコシステムに最適化

ライセンスコンプライアンス

SCAはセキュリティだけでなく、OSSライセンスの遵守状況も管理します。GPL系のコピーレフトライセンスは、派生物にも同一ライセンスの適用を要求するため、商用ソフトウェアでの利用には注意が必要です。MITApache 2.0などのパーミッシブライセンスは比較的自由に利用可能ですが、著作権表示やライセンス文の同梱が求められます。ライセンス違反は法的リスクに直結するため、SCAツールによる自動チェックが重要です。

依存関係混乱攻撃(Dependency Confusion)

2021年にセキュリティ研究者のAlex Birsan氏が公表した攻撃手法です。内部で使用しているプライベートパッケージと同名のパッケージをパブリックリポジトリ(npm、PyPI等)にアップロードし、ビルドシステムがパブリック版を優先的にインストールしてしまう脆弱性を突きます。Apple、Microsoft、PayPalなど大手企業のビルドシステムが影響を受けました。対策としては、名前空間(スコープ)の活用やプライベートレジストリの優先設定が有効です。

CI/CDパイプライン統合

SCAをCI/CDパイプラインに統合することで、脆弱なライブラリを含むコードのマージやデプロイを自動的にブロックできます。一般的な統合パターンとしては、コミット時のプリコミットフック、プルリクエスト時の自動スキャン、ビルド時のゲートチェック、デプロイ前の最終確認の4段階があります。脆弱性の深刻度に応じてブロックポリシーを設定し、Critical/Highの脆弱性は即座にブロック、Medium以下は通知のみとするなど、開発速度とセキュリティのバランスを取ることが推奨されます。

🛡️

Security Measures

  • 01
    SBOMの自動生成と継続的な更新:CI/CDパイプラインにSBOM生成ツール(syft、cdxgen等)を組み込み、ビルドのたびにSBOMを自動生成してください。SPDX またはCycloneDX形式で出力し、成果物として保管・管理することで、脆弱性発見時の影響範囲特定を迅速化できます。
  • 02
    依存関係の定期的なスキャンと自動更新:Snyk、Dependabot、Renovate等のツールを導入し、依存ライブラリの脆弱性を継続的に監視してください。脆弱性が発見された際には自動的にプルリクエストを作成し、パッチ適用までの時間(MTTR)を最小化しましょう。
  • 03
    依存関係混乱攻撃への防御:プライベートパッケージには名前空間(npm の@scope、Pythonのnamespace packages等)を必ず使用してください。パッケージマネージャーの設定でプライベートレジストリを優先するよう構成し、パブリックリポジトリからの意図しないインストールを防止しましょう。
  • 04
    ライセンスコンプライアンスの自動チェック:SCAツールのライセンス検出機能を有効にし、組織のポリシーに違反するライセンス(GPLv3等のコピーレフトライセンス)を含むライブラリの導入を自動的にブロックしてください。許可リスト・拒否リスト方式でポリシーを明文化しましょう。
  • 05
    推移的依存関係の可視化と管理:直接依存だけでなく、推移的依存関係(依存の依存)も含めた完全な依存関係ツリーを可視化してください。深い依存関係に潜む脆弱性を見逃さないよう、ツリー全体をスキャン対象とすることが重要です。
  • 06
    脆弱性対応ポリシーの策定と運用:CVSSスコアに基づく脆弱性対応のSLA(Critical:24時間以内、High:7日以内等)を策定し、組織全体で遵守してください。対応不能な場合のリスク受容プロセスや代替緩和策の文書化も含めて運用しましょう。
⚠️

Incidents

📋 Equifax Apache Struts 脆弱性事件(2017年)

2017年9月、米国の大手信用情報機関Equifaxは、約1億4,700万人の個人情報(氏名、社会保障番号、生年月日、住所、クレジットカード番号等)が流出する大規模な情報漏洩を公表しました。原因は、Apache Struts 2のリモートコード実行脆弱性(CVE-2017-5638)へのパッチ適用の遅れでした。

脆弱性は2017年3月に公開されパッチも提供されていましたが、Equifaxは2か月以上にわたりパッチを適用せず、その間に攻撃者がシステムに侵入しました。この事件はSCAによる依存コンポーネントの脆弱性管理と迅速なパッチ適用の重要性を世界に知らしめ、Equifaxは最終的に7億ドル以上の和解金を支払いました。

📋 event-stream npmパッケージ改ざん事件(2018年)

2018年11月、週間200万ダウンロードを超える人気npmパッケージ「event-stream」に悪意あるコードが混入されていることが発覚しました。元のメンテナーが開発意欲を失い、見知らぬ開発者にメンテナンス権限を譲渡したところ、その人物が悪意ある依存パッケージ「flatmap-stream」を追加しました。

混入されたコードは、暗号資産ウォレットアプリ「Copay」のユーザーの暗号資産を窃取することを目的としていました。この事件はOSSサプライチェーンの信頼モデルの脆弱性を浮き彫りにし、SCAツールによる依存関係の変更監視やメンテナー変更の検知の重要性が広く認識されるきっかけとなりました。

📋 Log4Shell 脆弱性(2021年)

2021年12月、Javaの代表的なロギングライブラリ「Apache Log4j 2」にリモートコード実行の脆弱性(CVE-2021-44228、通称Log4Shell)が発見されました。CVSS最高スコア10.0が付与されたこの脆弱性は、Log4jのJNDI Lookup機能を悪用し、攻撃者がリモートからサーバー上で任意のコードを実行できるものでした。

Log4jはJavaエコシステムで極めて広く利用されており、AWS、Apple、Google、Steamなど世界中の数億台のデバイスとシステムが影響を受けました。多くの組織がLog4jを使用していることすら把握しておらず、影響範囲の特定に数週間から数か月を要しました。この事件はSBOMの重要性を決定的にし、米国政府がソフトウェアサプライチェーンセキュリティの大統領令を発出する直接的な契機となりました。

🔗

Related Terms