脆弱性管理

SCA(ソフトウェアコンポジション解析) えすしーえー

オープンソース依存関係脆弱性スキャンSBOMライセンス管理DevSecOps
SCAについて教えて

簡単に言うとこんな感じ!

ソフトウェアって、自分で作ったコードだけじゃなく、外から借りてきた部品(ライブラリ)が山ほど入ってるんだ。SCAはその「借り物部品に危険な欠陥がないか・ライセンス違反がないか」を自動でチェックしてくれるツールや手法のことだよ!


SCAとは

SCA(Software Composition Analysis/ソフトウェアコンポジション解析)とは、ソフトウェアに含まれるオープンソースライブラリやサードパーティコンポーネントを洗い出し、既知の脆弱性・ライセンス違反・バージョン管理の問題を自動検出する手法・ツール群のことです。

現代のソフトウェア開発では、自社で一から書くコードよりも、npmやMavenなどのパッケージマネージャー経由で取り込む外部ライブラリが全体の7〜9割を占めるとも言われます。便利な反面、その部品のどれかに脆弱性が見つかると、そのソフトウェア全体が攻撃の標的になってしまいます。SCAはこの「借り物リスク」を可視化するための仕組みです。

近年、SBOM(Software Bill of Materials/ソフトウェア部品表)の整備が政府調達や規制の場面でも求められるようになり、SCAはセキュリティ担当だけでなく、システム発注者・調達担当者にとっても無視できないテーマになっています。


SCAが解決する3つの問題

問題具体例SCAがやること
既知脆弱性の混入Log4Shell(CVE-2021-44228)のような重大欠陥を含むライブラリを使い続けるCVEデータベースと照合し、危険バージョンを即座に検出
ライセンス違反リスクGPLライブラリをコピーレフト義務を知らずに製品に組み込むライセンス種別を一覧化し、商用利用禁止・開示義務を警告
依存関係の不透明さ直接使っていないが間接依存(推移的依存)で入り込んでいるライブラリ依存ツリーを全階層スキャンしてすべて可視化

「直接依存」と「間接依存」の違い

自分のコードが axios を使っていても、axios 自体がさらに別のライブラリを使っています。この間接依存(推移的依存)まで含めると、実際に動くソフトウェアが抱えるライブラリ数は数百〜数千に達することも珍しくありません。SCAは依存ツリーの末端まで追いかけてスキャンします。

SCAの主なスキャン方式

方式仕組み特徴
マニフェスト解析package.json / pom.xml などを読む高速・ほぼ全言語対応
バイナリ解析ビルド済みJARや.exeをスキャンソースがなくても検出可能
コンテナイメージスキャンDockerイメージ内のパッケージを解析クラウドネイティブ環境向け

歴史と背景

  • 2000年代前半 — オープンソース利用が急拡大。ライセンス管理ツールとして初期SCA製品(Black Duckなど)が登場
  • 2014年 — Heartbleed(OpenSSL脆弱性)が世界を震撼。「使っているOSSを把握していない」リスクが経営層に認知される
  • 2017年 — Equifaxの大規模情報漏えい事故(Apache Struts 2の脆弱性が原因)。パッチ管理の遅れが招いた典型例として注目される
  • 2020年代 — SolarWindsサプライチェーン攻撃を機にソフトウェアサプライチェーンセキュリティが最重要課題へ
  • 2021年 — 米バイデン大統領が大統領令14028でSBOM提出を連邦調達の要件として明記
  • 2021年末 — Log4Shell騒動で「自分の製品にLog4jが入っているか分からない」企業が続出。SCA導入が加速
  • 2023年〜 — EU サイバーレジリエンス法(CRA)草案でSBOM・SCA対応が義務化の方向へ

SAST・DAST・SCVとの比較

セキュリティテストには似た略語が並ぶため、整理しておきます。

手法正式名称何を検査するかタイミング
SCASoftware Composition Analysis外部ライブラリの脆弱性・ライセンスビルド前〜CI/CD
SASTStatic Application Security Testing自社コードの静的脆弱性(SQLインジェクション等)ビルド前
DASTDynamic Application Security Testing動作中アプリへの擬似攻撃テストテスト環境・ステージング
IASTInteractive AST実行時の内部動作を計測テスト実行中
SCVSupply Chain Verificationビルドパイプライン全体の改ざん検知CI/CDパイプライン
開発フローとセキュリティテスト手法の対応 コード記述 (開発者) ビルド (CI/CD) テスト (ステージング) 本番リリース (運用) SAST(静的解析) 自社コードの欠陥を検出 SCA(コンポジション解析) 外部ライブラリの脆弱性・ライセンス DAST(動的解析) 動作中アプリへの擬似攻撃 IAST(インタラクティブ) 実行時の内部動作を計測 ※ SCAはコード記述〜ビルドの全フェーズで継続的に実行するのがベストプラクティス

主要SCAツール一覧

ツール名提供形態特徴
DependabotGitHub組み込み(無料)PR自動作成でアップデート促進
SnykSaaS / CLI開発者UXに優れ、修正提案まで表示
Black Duckエンタープライズライセンス管理が特に強力
OWASP Dependency-CheckOSS / 無料CIに組み込みやすい老舗OSSツール
TrivyOSS / コンテナ特化Docker/Kubernetesスキャンに定評

関連する規格・RFC

規格・番号内容
NIST SP 800-161r1サプライチェーンリスク管理のフレームワーク(SCRM)
NTIA SBOM最小要素仕様SBOMに含めるべき最小限の情報を定義
ISO/IEC 5230OpenChain:OSSライセンスコンプライアンスの国際標準

関連用語

  • SBOM — ソフトウェアに含まれる全部品を一覧化した「部品表」
  • CVE — 公開された脆弱性に付与される共通識別番号
  • DevSecOps — 開発・運用プロセスにセキュリティを組み込む手法
  • SAST — ソースコードを静的に解析して脆弱性を検出する手法
  • DAST — 動作中のアプリに擬似攻撃を行い脆弱性を検出する手法
  • 脆弱性スキャン — ネットワークやアプリの脆弱性を自動検出する総称
  • サプライチェーン攻撃 — ソフトウェアの開発・配布経路を標的にした攻撃
  • ゼロデイ脆弱性 — まだパッチが存在しない未公開の脆弱性