Skip to main content

概要

  • 機能:依存関係スキャン(Software Composition Analysis、SCA)は、プロジェクトが使用するサードパーティの依存関係やライブラリに含まれる既知のセキュリティ脆弱性を自動的に特定します。依存関係のマニフェストファイル(package.jsonrequirements.txtpom.xmlなど)をスキャンし、CVE識別子、CVSSスコア、修正ガイダンスなどの詳細情報を提供します。
  • 誰のため:この機能はセキュリティチーム、開発者、DevOpsエンジニア、そして安全なソフトウェアアプリケーションの維持を担当するすべての人向けに設計されています。特に、多数のサードパーティ依存関係を持つプロジェクトを管理するチームにとって、アプリケーションに影響を与える可能性のあるセキュリティ脆弱性について常に情報を得たい場合に特に有用です。

主な特徴と利点

  • 包括的なエコシステムカバレッジ:Python、JavaScript/Node.js、Java、Go、Ruby、PHP、C#、Swiftなど、25+のプログラミング言語およびエコシステムにわたる依存関係をスキャン
  • 権威あるデータソース:複数の信頼できる脆弱性データベースを活用します。
    • GitHub Advisory Database(CC-BY 4.0)
    • PyPIアドバイザリーデータベース(CC-BY 4.0)
    • Go 脆弱性データベース(CC-BY 4.0)
    • Rustアドバイザリーデータベース(CC0 1.0)
    • グローバルセキュリティデータベース(CC0 1.0)
    • OSS-ファズ(CC-BY 4.0)
    • Rocky Linux(BSD)
    • AlmaLinux(MIT)
    • Haskellセキュリティアドバイザリー(CC0 1.0)
    • RConsortium アドバイザリーデータベース(Apache 2.0)
    • OpenSSF悪意あるパッケージ(Apache 2.0)
    • Python Software Foundation データベース(CC-BY 4.0)
    • Bitnami脆弱性データベース(Apache 2.0)
    • Ubuntu(GPL v3)
    • そして他にも多くの権威ある情報源があります
  • リッチ脆弱性インテリジェンス:以下を含む詳細な脆弱性情報を提供します:
    • CVE識別子および代替脆弱性ID
    • CVSSスコアおよび重大度評価(重大、高、中、低)
    • 影響を受けるパッケージバージョンおよび利用可能な修正
    • 詳細な脆弱性の説明と参考文献
    • GitHub Advisory Database、NVD、ベンダーセキュリティアドバイザリー(利用可能な場合)などのソースからのアドバイザリーリンク
    • 出版日および外部リンク
  • スマートスキャニングロジック:依存ファイルの存在を自動的に検出し、スキャン性能を最適化します

セットアップ手順

プロジェクトには、少なくとも1つのサポート付き依存ファイルと、セキュリティスキャンを実行するための適切な権限が必要です。

設定ステップ

1

依存ファイルの検証

プロジェクトにサポートされる依存関係ファイルが含まれていることを確認してください:
2

スキャンスコープの設定

依存スキャンを完全スキャンに含めるか部分スキャンかを選択してください
3

通知の設定

新しい脆弱性の通知方法を設定できます

使用ガイド

スキャン依存関係の表示、SBOMファイルのダウンロード、依存関係CSVのエクスポートには、 View SCA Issue 権限が必要です。プロジェクトアクセス制御が有効であれば、プロジェクトへのアクセス権も持っている必要があります。

主要なワークフロー

  1. 自動検出:システムはプロジェクトディレクトリ内の依存ファイルを自動で識別します
  2. 包括的スキャン:すべてのサポート済み依存ファイルと脆弱性データベースとの照合を分析します
  3. 脆弱性処理:スキャン結果を処理し、追加のセキュリティ情報で補強します
  4. 問題の生成:検出された各脆弱性に対して追跡可能なセキュリティ問題を作成します
  5. 報告:実行可能な是正ガイダンスを含む包括的な脆弱性報告を生成します

Dependenciesビューのフィルター

依存関係ビュー 依存関係ビューのフィルターを使ってSCAの結果を絞り込みます:
  • 検索:CVE、パッケージ名、または要約で問題を検索
  • 重大度:重要性、高評価、中等評価、低評価に重点を置く
  • SLAステータス:SCA SLAが適用される際に遅延またはエスカレーションされた依存関係の問題に焦点を当てます
  • エコシステム:結果を特定のパッケージエコシステムに限定
  • プロジェクト:特定のプロジェクト名でフィルタリング(アクセス可能なプロジェクトのみを表示する)
  • ライセンス:依存関係ライセンスによるフィルタリング
  • 依存関係タイプ:直接依存、推移的依存、開発依存、またはオプション依存を表示
  • 到達可能性:問題が到達可能、到達不可、未使用、分析中のいずれであるかを表示します(到達可能性分析を参照)
  • Fix Available:既知の修正による問題のみを表示する
スキャンの影響を受けた は、同じスキャンで複数のパッケージやマニフェストで脆弱性が検出された場合でも、脆弱性が検出された特定のスキャン数をカウントします。

依存関係をCSVにエクスポート

依存関係ビューで CSVエクスポート をクリックすると、現在の検索結果とフィルターに合致する結果をダウンロードできます。エクスポートにはパッケージおよび脆弱性の詳細、依存関係の種類と到達可能性、プロジェクトとブランチ、影響を受けるマニフェストパスが含まれます。プロジェクトアクセスコントロールを有効にすると、エクスポートにはアクセス可能なプロジェクトのみが含まれます。

推移的依存関係

現代のプロジェクトのほとんどの脆弱性は、 推移的 依存関係に存在します。つまり、直接追加したわけではないパッケージが、追加したパッケージによって引き込まれたものです。Corgeaは依存関係のグラフ全体を解析するため、アプリケーションが何に依存しているのか、なぜそうなのかを正確に把握できます。

依存タイプ

スキャン結果では、パッケージグループには脆弱性依存関係の発生源を示すバッジが含まれています:
  • 直接的:脆弱なパッケージはマニフェストで宣言された直接依存関係(例: package.jsonpom.xml)です。
  • 推移的:脆弱なパッケージは別の依存関係を通じて間接的に引き込まれます。
  • 開発:脆弱なパッケージは実行時ではなく、開発依存関係(ビルド、テスト、ツール)として使用されます。
  • オプション:脆弱なパッケージはオプション依存関係としてマークされます。
SCAの問題詳細ページでは、依存関係タイプが問題詳細の隣に表示されます。選択されたパッケージにネストされた依存関係がある場合、 サブ依存関係 バッジが表示されます。

依存グラフの構築方法

Corgeaは、宣言したパッケージと実際に解析するパッケージを組み合わせて依存関係ツリーを構築します:
  1. マニフェストファイル(package.jsonpom.xmlrequirements.txtgo.modGemfile、その他)から読み取る直接的な依存関係。
  2. 推移的依存関係 ロックファイル( package-lock.jsonyarn.lockpoetry.lockgo.sumなど)と生成されたソフトウェア部品表(SBOM)から解決されます。SBOMは解決済みの正確なバージョンとその親子関係を捉えます。
  3. ロックファイルが欠落している場合、Corgeaはサポートされたエコシステム(例えばPythonや.NETの依存関係の解決)に対して自動的にロックファイルを生成しようと試み、推移的パッケージの解析を続けられるようにします。
各依存関係には、その依存関係を取り込んだと、遡った先にあるルートの直接依存関係が記録されます。これにより、Corgeaはマニフェストから脆弱なパッケージまでの完全な経路を表示できます。

依存関係ツリービュー

Dependenciesビューでは、依存関係を折りたたみ可能なツリーとして表示できます。直接依存関係を展開すると、その依存関係が取り込むすべてのパッケージを確認できます。
ツリービューで検索すると、一致するパッケージをハイライトし、その先祖パッケージを表示しておくため、なぜ脆弱なパッケージが存在するのかを常に確認できます。非常に大規模なプロジェクト(10,000以上の依存関係を持つ)では、パフォーマンス上の理由からツリービューはレンダリングされません。代わりにリストと検索ビューを使用してください。

対応エコシステム

依存スキャン機能は以下のエコシステムをサポートしています:
  • AlmaLinux - エンタープライズ向けLinuxパッケージ
  • Alpine - Alpine Linuxパッケージ
  • Android - Androidアプリの依存関係
  • Bitnami - Bitnamiアプリケーションパッケージ
  • crates.io - Rustパッケージ
  • Curl - cURL ライブラリの脆弱性
  • Debian GNU/Linux - Debian パッケージ
  • Git - Gitリポジトリ(C/C++を含む)
  • GitHub Actions - GitHub Action ワークフロー
  • Go - Go モジュールとパッケージ
  • Haskell - Haskellパッケージ
  • Hex - エリクサーパッケージ
  • Linuxカーネル - Linuxカーネルの脆弱性
  • Maven - Java Mavenの依存関係
  • npm - Node.jsパッケージ
  • NuGet - .NETパッケージ
  • OSS-Fuzz - Googleの連続ファズサービス
  • Packagist - PHPパッケージ
  • パブ - ダーツパッケージ
  • PyPI - Pythonパッケージ
  • Python - Python 言語の脆弱性
  • R - Rパッケージ(CRANおよびバイオコンダクター)
  • Rocky Linux - Rocky Linuxパッケージ
  • RubyGems - ルビーパッケージ
  • SwiftURL - Swiftパッケージ
  • Ubuntu OS - Ubuntu パッケージ

マルチエコシステムプロジェクトの例

Enterprise Application Structure

脆弱性の重大度内訳

重大な:即時の対応が必要、システム全体の侵害の可能性
  • 高い:迅速に対処すべきであり、重大なセキュリティ影響が出ます
  • :定期的なメンテナンスサイクルで対処すべきです
  • :都合の良い時に対処できる軽微な問題

到達可能性分析

依存関係ツリーに脆弱なパッケージが含まれていても、アプリケーションが実際に影響を受けるとは限りません。到達可能性分析では、コードから脆弱性を実際にトリガーできるかを判定し、対応の優先順位付けを支援します。 脆弱な直接依存関係ごとに、Corgeaは次の2点を判定します。
  1. パッケージが使用されているか? コード内でパッケージのインポートと使用箇所を調べます。宣言されていても一度もインポートされていないパッケージは、リスクが大幅に低くなります。
  2. 脆弱な関数に到達可能か? 使用されているパッケージについて、脆弱性の影響を受ける特定の関数をコードが実際に呼び出すかを分析します。
Corgeaでは、ユーティリティライブラリとフレームワークを区別して扱います。ユーティリティライブラリでは、脆弱な関数への直接呼び出しを確認できます。フレームワークでは、直接呼び出す関数ではなくフレームワーク内部の深い箇所で脆弱なコードが実行されるため、コードだけでは断定できず、到達可能性を不明として報告します。
到達可能性分析は直接的な依存関係に基づいています。推移的依存関係の脆弱性は報告され修正可能です( 修正の推奨事項参照)が、個別に到達可能性を分析することはありません。

到達可能性ステータス

分析された各問題は以下のいずれかの状態に解決し、依存関係ビューのフィルターとしても使用できます。
  • 到達可能:コードが脆弱な機能を呼び出します。特に直接依存関係では、最優先で対応する必要があります。
  • 到達不能:パッケージは使用されますが、脆弱な関数は呼び出されません。
  • 未使用:パッケージは宣言されているが、コード内では使用されません。
  • 分析中:問題の到達可能性を分析しています。

到達可能性の可視化

到達可能な問題では、Corgeaがアプリケーションのエントリーポイントから脆弱なコードまでの経路を表示します。実行がエンドポイントから中間の関数を経由して脆弱な関数に至る流れを確認できるため、到達可能と判定された理由を容易に理解し、検証できます。

修正の推奨事項

修正が利用可能な場合、Corgeaは最も近い修正済みバージョン、つまり脆弱性が解消される最小のバージョンを、現在インストールされているバージョンと並べて表示します。最も近い安全なバージョンを推奨することで、アップグレード幅を最小限に抑え、破壊的変更のリスクを軽減します。 直接依存関係の場合は、マニフェスト内のバージョンを更新して修正を適用できます。 推移的依存関係の場合は親パッケージによってバージョンが制御されるため、直接更新できないことがあります。この場合、Corgeaは依存関係パスと、修正済みの推移的依存関係を取り込むために更新が必要な親依存関係を表示します。依存関係パスの構成については、推移的依存関係を参照してください。
Fixの依存関係に関する推奨は、修正方法の指針です。アップグレードを適用する前に互換性を確認してください。

ライセンススキャン

依存関係スキャン中、Corgeaは各依存関係に関連する ソフトウェアライセンス を取得し、プロジェクト全体に存在するライセンスを把握できます。 ライセンスは2つの方法で表示されます。
ライセンススキャンは、可視性と報告のためのライセンスインベントリを提供します。ライセンス準拠ポリシーを自動的に強制するわけではありません。

コンテナイメージスキャン

Corgeaはまた、プロジェクトが依存するコンテナイメージをスキャンし、ベースのOSパッケージやイメージ層内にインストールされた他のソフトウェアの脆弱性を特定します。イメージは Dockerfile ファイルやDocker Composeファイルから自動的に検出され、設定は不要です。 検出方法、対応レジストリ、制限の詳細については、コンテナイメージスキャンを参照してください。

悪意あるパッケージ検出

依存関係スキャンの一環として、CorgeaはOpenSSF Malicious Packagesデータベースと関連するアドバイザリフィードを使用し、タイポスクワッティング、乗っ取られたリリース、バックドアを含むバージョンなど、既知の悪意のあるパッケージや侵害されたパッケージを検出します。 詳細は 悪意のあるパッケージ検出を参照してください。

ベストプラクティス

新たな脆弱性がリアルタイムで検出される際に自動スキャンを有効にします。
  • 通常のスキャン:新たな脆弱性が明らかになった際に自動スキャンを有効にします
  • 依存関係の更新:特定された脆弱性の修正が利用可能になり、迅速に依存関係を更新します
  • 重大度による優先順位付け:まず重大および高重大度の脆弱性への対応に注力
  • リスク評価:脆弱性が実際にアプリケーションの攻撃面に影響を与えるかどうかを評価する
  • 依存関係の衛生:攻撃対象を減らすために、未使用の依存関係を定期的に見直し除去する
  • バージョンピニング:一貫したスキャン結果を得るために依存ファイル内の特定のバージョン番号を使用する
  • 監視:依存関係で新たに検出された脆弱性のアラートを設定する
  • 文書:承認済みリスクおよび修復決定の記録を保持すること

トラブルシューティング

解決策:依存関係ファイルが対応フォーマットで有効なパッケージ情報が含まれているかを確認する確認:依存関係ファイルが破損していないか、構文エラーがないかを確認します
解決策:すべての依存関係ファイルがスキャン範囲に含まれているか確認してください確認:依存関係ファイルの形式が正しく、アクセス可能であることを確認します
解決方法:脆弱性の詳細を確認し、それらが実際にアプリケーションに影響を与えるかどうかを判断してください確認:アプリケーション内の具体的な使用パターンと攻撃ベクトルを考慮します
解決方法:これは多くの依存関係を持つ大規模プロジェクトで一般的です確認:変更されたファイルのみを対象とするインクリメンタルスキャンを検討します