Share via


依存関係スキャン

GitHub Advanced Security for Azure DevOps の依存関係スキャンは、ソース コードで使用されているオープンソース コンポーネントを検出し、関連する脆弱性があるかどうかを検出します。 オープンソースコンポーネントから見つかった脆弱性には、アラートとしてフラグが設定されます。

GitHub Advanced Security for Azure DevOps は、Azure Repos と連携して動作します。 GitHub リポジトリで GitHub Advanced Security を使用する場合は、「GitHub Advanced Security」を参照してください。

依存関係スキャンについて

依存関係スキャンは、脆弱であることがわかった、コードが依存する (直接的または推移的な) オープンソース コンポーネントに対してアラートを生成します。 直接的な依存関係は、コードが直接使用するライブラリです。 推移的な依存関係は、直接依存関係が使用するライブラリまたはその他のソフトウェアです。

依存関係スキャンの検出について

リポジトリの依存関係グラフが変更されるたびに、コンポーネントの新しいスナップショットが格納され、その後、新しいコードをビルドする依存関係スキャン タスクを含むパイプラインが実行されます。

検出されたすべての使用中の脆弱なコンポーネントについて、コンポーネントと脆弱性がビルド ログに一覧表示され、[高度なセキュリティ] タブにアラートとして表示されます。GitHub によってレビューされ、GitHub Advisory Database に追加されたアドバイザリのみが、依存関係スキャン アラートを作成します。 ビルド ログには、詳細な調査のために個々のアラートへのリンクが含まれています。 アラートの詳細については、「依存関係スキャン アラートの修正」を参照してください。

ビルド ログには、検出された各脆弱性に関する基本情報も含まれています。 これらの詳細には、重大度、影響を受けるコンポーネント、脆弱性のタイトル、関連する CVE が含まれます。

依存関係スキャンのビルド出力のスクリーンショット

サポートされているパッケージエコシステム

依存関係スキャンでは、サポートされているすべてのパッケージ エコシステムに対して、直接的および推移的な依存関係の両方がサポートされます。

パッケージ マネージャー 言語 サポートされている形式
Cargo Rust Cargo.toml, Cargo.lock
CocoaPods Swift Podfile.lock
Go モジュール Go go.mod, go.sum
Gradle Java *.lockfile
Maven Java pom.xml
npm JavaScript package-lock.json, package.json, npm-shrinkwrap.json, lerna.json
NuGet C# *.packages.config, *.project.assets, *.csproj
pip Python setup.py, requirements.txt
pnpm JavaScript package.json
RubyGems Ruby Gemfile.lock
Yarn JavaScript package.json

依存関係スキャン アラートについて

Azure DevOps の Repos の [高度なセキュリティ] タブは、セキュリティ アラートを表示するためのハブであり、既定では依存関係スキャン アラートが表示されます。 ブランチ、パイプライン、パッケージ、重大度でフィルター処理できます。 アラートを選択して、修復ガイダンスなどの詳細を確認できます。 現時点では、アラート ハブには、PR ブランチで完了したスキャンに関するアラートは表示されません。

リポジトリで脆弱なパッケージが検出されたとき、依存関係スキャン アラートの修正作業には、通常、より高いパッケージ バージョンへのアップグレードや、問題のあるパッケージの削除がともないます。 この作業提案は、直接的および推移的 (または間接的) の両方の依存関係に適合します。 [高度なセキュリティ] タブの既定のビューは、リポジトリの既定のブランチに対するアクティブなアラートです。

パイプラインまたはブランチの名前が変更されても、結果に影響はありません。新しい名前が表示されるまでに最大 24 時間かかる場合があります。

リポジトリの依存関係スキャンアラート ビューのスクリーンショット

依存関係スキャン タスクがインストールされているパイプラインの最新のビルドで脆弱なコンポーネントが検出されなくなると、アラートの状態は自動的に Closed に更新されます。 解決したアラートを表示するには、メイン ツール バーの State フィルターを利用し、Closed を選択します。

閉じた依存関係スキャン アラートを表示するスクリーンショット

リポジトリの Advanced Security をオフにすると、[高度なセキュリティ] タブ内の結果と、[タスクの構築] にアクセスできなくなります。 タスクの構築は失敗しませんが、Advanced Security が無効になっている状態でタスクが実行した構築の結果はすべて非表示になり、保持されません。

[アラートの詳細]

特定のアラートをクリックして、アラートに関する詳細と修復ガイダンスの詳細を確認することもできます。

依存関係スキャン アラートの詳細を示すスクリーンショット

セクション 説明
推奨 推奨事項のテキストは、脆弱性データ プロバイダーである GitHub Advisory Database から直接取得されます。 通常、このガイダンスは、識別されたコンポーネントを脆弱でないバージョンにアップグレードすることを提案します。
場所 [場所] セクションは、依存関係スキャン タスクが脆弱な使用中のコンポーネントを検出したパスの詳細を示します。 基になるビルド スキャンからソース内のコミットされたファイルにファイルを解決できる場合は、[場所] カードがクリック可能なリンクとして表示されます。 ビルドの一部 (ビルド成果物など) としてファイルが生成された場合、リンクはクリックできません。 ビルド ログを確認して、コンポーネントがどのようにビルドに取り込まれたかを把握してください。
説明 説明は、GitHub アドバイザリの説明から提供されます。

検出

[検出] タブの下に一覧表示されるパイプラインは、脆弱なコンポーネントが見つかったパイプラインです。 各行は、影響を受けるパイプラインの最新ビルドと、パッケージが最初に導入された日付の詳細を示します。 脆弱なパッケージが一部のパイプラインで修正されているが、すべてではない場合は、部分的に修正された行が表示されます。

修正されていないアラートの依存関係スキャン検出ビューのスクリーンショット

アラートが解決されると、アラートは自動的に Closed 状態に遷移し、[検出] タブの下の最新の実行パイプラインに緑色のチェックマークが表示されます。これは、更新されたコンポーネントを含むコードがそのパイプラインで実行されたことを意味します。

アラートの依存関係スキャン検出ビューのスクリーンショット

重大度

GitHub Advisory Database は CVSS スコアを提供します。これは次のガイドラインを使用してアラートに対する重大度 (低、中、高、または重大) に変換されます。

CVSS スコア 重大度
1.0 < スコア < 4.0
4.0 < スコア < 7.0 Medium
7.0 < スコア < 9.0
スコア >= 9.0 Critical

検出の詳細

一般的に、[Finding details] (検索結果の詳細) には、脆弱なパッケージとルートの依存関係という 2 つのセクションがあります。 脆弱なパッケージは、潜在的に脆弱なコンポーネントです。 ルート依存関係セクションには、脆弱性につながる依存関係チェーンを統括する最上位コンポーネントが含まれています。

脆弱なパッケージが直接的な依存関係としてのみ参照されている場合、[vulnerable package] (脆弱なパッケージ) セクションのみが表示されます。

脆弱なパッケージが直接的と推移的の両方の依存関係として参照されている場合、パッケージは [vulnerable package] (脆弱なパッケージ) と [root dependency] (ルート依存関係) セクションの両方に表示されます。

脆弱なパッケージが推移的な依存関係としてのみ参照されている場合、パッケージは [vulnerable package] (脆弱なパッケージ) セクションに表示され、脆弱なパッケージを参照するルート依存関係は [root dependency] (ルート依存関係) セクションに表示されます。

依存関係スキャン アラートを管理する

リポジトリのアラートの表示

リポジトリの共同作成者アクセス許可を持つすべてのユーザーが、[リポジトリ]>[高度なセキュリティ] で、リポジトリのすべてのアラートの概要を表示できます。

既定では、アラート ページには、リポジトリの既定のブランチの依存関係スキャン結果が表示されます。

アラートの状態は、他のブランチとパイプラインにアラートが存在する場合でも、既定のブランチと最新の実行パイプラインの状態を反映します。

依存関係スキャン アラートを修正する

直接的な依存関係は、リポジトリに存在するコンポーネントです。 推移的または間接的な依存関係は、直接的な依存関係から使用されるコンポーネントです。 脆弱性が直接的と推移的のどちらの依存関係に見つかったかに関係なく、プロジェクトは引き続き脆弱です。

脆弱な推移的な依存関係を修正するには、通常、識別された直接的な各依存関係に使用される脆弱なコンポーネントのバージョンを明示的にオーバーライドする形式を使用します。 ルート依存関係による脆弱なコンポーネントの使用を安全なバージョンにアップグレードしたら、複数の個々のオーバーライドではなく、各ルート依存関係をアップグレードできます。

Yarn/Npm の依存関係を更新する

仮に、このパッケージには 2 つの脆弱性があるとします。 1 つは直接的な依存関係である axios に、1 つは推移的な依存関係 (間接的な依存関係、または依存関係の依存関係とも呼ばれます) である acorn に対するものです。

{
 "name": "my-package",
 "version": "1.0.0",
 "dependencies": {
   "axios": "0.18.0",
   "eslint": "5.16.0",
 }
}

axios の現在のバージョンにはサービス拒否 (DoS) の脆弱性があり、v0.18.1 以上に更新することが推奨されています。 これは直接的な依存関係であるため、使用する axios のバージョンを制御できます。必要なのは、取り込む axios のバージョンを更新することのみです。 更新された package.json は次のようになります。

{
  "name": "my-package",
  "version": "1.0.0",
  "dependencies": {
    "axios": "0.19.2",
    "eslint": "5.16.0",
  }
}

ここで、package.json に示されている eslint のバージョンは、正規表現サービス拒否 (ReDoS) の脆弱性がある acorn のバージョンに依存し、バージョン 5.7.4, 6.4.1, 7.1.1 以上に更新することが推奨されています。 依存関係スキャン ツールからアラートを受け取った場合、それには脆弱な依存関係を必要とするルート依存関係が記載されています。

Yarn

Yarn を使用している場合は、yarn why を使用して、依存関係チェーン全体を見つけることができます。

> $ yarn why acorn
 yarn why v1.22.4
 [1/4] Why do we have the module "acorn"...?
 [2/4] Initialising dependency graph...
 [3/4] Finding dependency...
 [4/4] Calculating file sizes...
 => Found "acorn@6.4.0"
 info Reasons this module exists
   - "eslint#espree" depends on it
   - Hoisted from "eslint#espree#acorn"
 info Disk size without dependencies: "1.09MB"
 info Disk size with unique dependencies: "1.09MB"
 info Disk size with transitive dependencies: "1.09MB"
 info Number of shared dependencies: 0
 Done in 0.30s.

依存関係チェーン全体は eslint>espree>acorn です。 依存関係チェーンがわかったら、Yarn の別の機能である選択的な依存関係解決を使用して、使用される acorn のバージョンをオーバーライドできます。

package.json の resolutions フィールドを使用して、バージョンのオーバーライドを定義します。 パッケージをオーバーライドする 3 つの異なる方法を、お勧めしない順に示します。

{
  "name": "yarn-resolutions",
  "version": "1.0.0",
  "license": "MIT",
  "dependencies": {
    "axios": "0.19.2",
    "eslint": "5.16.0"
  },
  "resolutions": {
    // DO NOT USE!
    "**/acorn": "6.4.1",
    // BETTER
    "eslint/**/acorn": "6.4.1",
    // BEST
    "eslint/espree/acorn": "6.4.1"
  }
}

**/acorn パターンを使用すると、すべての依存関係にわたる acorn パッケージのすべての使用がオーバーライドされます。 それは危険であり、実行時に中断します。 その結果、Yarn v2 で削除されました。

eslint/**/acorn パターンを使用すると、eslint パッケージと、それが依存するすべてのパッケージの下にある acorn パッケージのすべての使用がオーバーライドされます。 すべての依存関係のパッケージをオーバーライドするよりも安全ですが、パッケージの依存関係グラフが大きい場合、ある程度のリスクがあります。 このパターンは、脆弱なパッケージを使用するサブパッケージが多数あり、個々のサブパッケージのオーバーライドを定義することが実用的でないときにお勧めします。

パターン eslint/espree/acorn を使用すると、eslint パッケージ内の espree パッケージでの acorn の使用のみがオーバーライドされます。 脆弱な依存関係チェーンを特定して対象にしていて、パッケージ バージョンのオーバーライドにお勧めの方法です。

npm

npm 8.3 以降を使用している場合は、package.json の overrides フィールドを使用できます

推移的な依存関係に特定の変更を加える必要がある場合は、オーバーライドを追加します。 たとえば、既知のセキュリティ上の問題がある依存関係のバージョンを置き換えたり、既存の依存関係をフォークに置き換えたり、同じバージョンのパッケージがどこでも使用されるようにしたりするために、オーバーライドを追加することが必要な場合があります。

{
  "name": "npm-overrides",
  "version": "1.0.0",
  "license": "MIT",
  "dependencies": {
    "axios": "0.19.2",
    "eslint": "5.16.0"
  },
   "overrides":{
       "eslint": {
        "espree": {
          "acorn": "6.4.1"
        }
    }
   }
}

示されているオーバーライドの例は、"eslint パッケージ内の espree パッケージ内の acorn の使用のみをオーバーライドする" npm 版の指定方法を示しています。これは脆弱な依存関係チェーンを特定して対象にしていて、パッケージ バージョンのオーバーライドにお勧めの方法です。 オーバーライドは npm のネイティブ機能です。 依存関係ツリー内のパッケージを別のバージョンに、または全体的に別のパッケージに置き換える方法を提供します。

オーバーライドを設定した後に、package-lock.jsonnode_modules を削除して、npm install をもう一度実行する必要があります。

依存関係とオーバーライド自体の両方厳密に同じ仕様を共有していない限り、直接依存するパッケージのオーバーライドを設定しないでください。たとえば、axios: "0.18.0" が脆弱であり、axios: "0.19.2" にアップグレードしようとしているとします。 オーバーライドを使用する代わりに、依存関係のバージョンを直接変更します。

{
  "name": "npm-overrides",
  "version": "1.0.0",
  "license": "MIT",
  "dependencies": {
    "axios": "0.18.0"
  },
  "overrides": {
    // BAD, will throw an EOVERRIDE error
    // "axios": "0.19.2",
  }
}

オーバーライドを設定せずに依存関係のバージョンを更新します。

{
  "name": "npm-overrides",
  "version": "1.0.0",
  "license": "MIT",
  "dependencies": {
    "axios": "0.19.2"
  }
}

Maven の依存関係を更新する

依存関係解決メカニズムは、Yarn で使用されるものほど高度ではありません。 その結果、1 つのプロジェクト内に持つことができる依存関係のバージョンは、1 つのみです。 この問題を解決するために、Maven は "最近優先" アルゴリズムを使用します。 つまり、依存関係のツリーでプロジェクトに最も近い依存関係のバージョンが使用されます。

たとえば、次の依存関係グラフがあります。

your-project --- A:1.0.0 --- B:2.0.0
      \
       \__ B:1.0.0

your-projectA:1.0.0 に依存し、次にそれが B:2.0.0 に依存しますが、プロジェクトには B:1.0.0 への直接的な依存関係があります。 そのため、依存関係グラフには 2 つの異なるバージョンの依存関係 B がありますが、依存関係 B のバージョン 1.0.0 がプロジェクトに "最も近い" ため優先されます。

場合によっては、バージョンに互換性があって、このシナリオが機能することがあります。 ただし、A:1.0.0 がバージョン 2.0.0 でのみ使用できる B の何らかの機能に依存している場合、この動作は機能しません。 最悪のシナリオは、それでもこのプロジェクトがコンパイルされ、実行時に失敗することです。

実際の例を見てみましょう。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.microsoft.customer360</groupId>
  <artifactId>maven-dependencies</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>maven-dependencies</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.jaxrs</groupId>
      <artifactId>jackson-jaxrs-json-provider</artifactId>
      <version>2.10.3</version>
    </dependency>
</project>

たとえば、依存している com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider のバージョンが、信頼されていないデータの逆シリアル化という脆弱性がある com.fasterxml.jackson.core:jackson-databind のバージョンに依存しているとします。

Maven 依存関係プラグインを使用して、この依存関係を確認できます。 この場合は、mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind を実行し、次の出力を取得します。

> $ mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
 [INFO] Scanning for projects...
 [INFO]
 [INFO] ------------< com.microsoft.customer360:maven-dependencies >------------
 [INFO] Building maven-dependencies 1.0-SNAPSHOT
 [INFO] --------------------------------[ jar ]---------------------------------
 [INFO]
 [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ maven-dependencies ---
 [INFO] com.microsoft.customer360:maven-dependencies:jar:1.0-SNAPSHOT
 [INFO] \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.10.3:compile
 [INFO]    \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.10.3:compile
 [INFO]       \- com.fasterxml.jackson.core:jackson-databind:jar:2.10.3:compile
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
 [INFO] Total time:  0.928 s
 [INFO] Finished at: 2020-04-27T14:30:55+02:00
 [INFO] ------------------------------------------------------------------------

まず、脆弱なバージョンの com.fasterxml.jackson.core:jackson-databind に依存しない com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider の新しいバージョンがあるかどうかを確認します。 ある場合、com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider をアップグレードしてそれで完結できます。 そうでない場合は、com.fasterxml.jackson.core:jackson-databind のバージョンをオーバーライドします。

コード スニペットに示すように、Maven を使用するときは "最近優先" であるため、解決策は、脆弱性を修正する直接的な依存関係を com.fasterxml.jackson.core:jackson-databind に追加することです。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.microsoft.customer360</groupId>
  <artifactId>maven-dependencies</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>maven-dependencies</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.jaxrs</groupId>
      <artifactId>jackson-jaxrs-json-provider</artifactId>
      <version>2.10.3</version>
    </dependency>
    <!-- Dependency resolutions -->
    <!-- jackson-jaxrs-json-provider -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.10.4</version>
    </dependency>
  </dependencies>
</project>

もう一度 mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind を実行して、解決策が機能することを確認できます。

$ mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind
[INFO] Scanning for projects...
[INFO]
[INFO] ------------< com.microsoft.customer360:maven-dependencies >------------
[INFO] Building maven-dependencies 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ maven-dependencies ---
[INFO] com.microsoft.customer360:maven-dependencies:jar:1.0-SNAPSHOT
[INFO] \- com.fasterxml.jackson.core:jackson-databind:jar:2.9.10.4:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.827 s
[INFO] Finished at: 2020-04-27T14:32:42+02:00
[INFO] ------------------------------------------------------------------------

依存関係の解決策の近くにコメントを追加して、後で他のユーザーが見たときに依存関係が存在する理由がわかるようにすることをお勧めします。 これは、ルート依存関係が新しいバージョンを使用するときに、削除できます。それ以外の場合は、依存関係を蓄積します。

実際のプロジェクトでは、依存関係を可能な限りチェーンの上位に追加します。 たとえば、すべてのプロジェクト POM ファイルに別個に配置するのではなく、親 POM ファイルに解決策を追加できます。

NuGet の依存関係を更新する

NuGet で使用される依存関係解決アルゴリズムは、依存関係の 1 つのバージョンのみを使用できるという点で Maven に似ています。 ただし、NuGet は依存関係のバージョンをピン留めしません。

たとえば、依存関係 <PackageReference Include="A" Version="1.2.3" /> がある場合、このパッケージが = 1.2.3 と同等であると予想されるかもしれませんが、実際には >= 1.2.3 を意味します。 厳密なバージョンをピン留めするには、Version="[1.2.3]" を使用する必要があります。 詳細については、NuGet のバージョン範囲についてのドキュメントを参照してください。

既定の範囲の動作に加えて、NuGet は、範囲を満たすために最も低い適用可能なバージョンを復元します。 この動作は、多くの場合、範囲を定義する必要があることを意味します。

Microsoft.AspNetCore.App への依存関係があるこのサンプル プロジェクトを見てみましょう。

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RootNamespace>NuGet.Dependencies</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.14" />
  </ItemGroup>
</Project>

これは、リモート コード実行 (RCE) の脆弱性に対して脆弱な Microsoft.AspNetCore.Http.Connections のバージョンに依存しています。

まず、新しいバージョンの Microsoft.AspNetCore.App に依存する Microsoft.AspNetCore.Http.Connections の更新バージョンがあるかどうかを確認する必要があります。 ある場合、Microsoft.AspNetCore.App をアップグレードしてそれで完結できます。 そうでない場合は、依存する Microsoft.AspNetCore.Http.Connections のバージョンをオーバーライドする必要があります。

NuGet には yarn why や mvn dependency:tree と同等の機能が組み込まれていないため、依存関係ツリーを表示する最も簡単な方法は、多くの場合 、nuget.org にアクセスすることです。Microsoft.AspNetCore.App の NuGet ページにアクセスすると、Microsoft.AspNetCore.Http.Connectionsversion >= 1.0.4 && < 1.1.0 に依存していることがわかります。 NuGet のバージョン範囲で、これを表す構文は [1.0.4,1.1.0) です。

Microsoft.AspNetCore.Http.Connections の RCE の脆弱性はバージョン 1.0.15 で修正されているため、バージョン範囲を [1.0.15, 1.1.0) にオーバーライドする必要があります。

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RootNamespace>NuGet.Dependencies</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.8" />
  </ItemGroup>

  <ItemGroup Label="Dependency Resolutions">
    <!-- Microsoft.AspNetCore.App -->
    <PackageReference Include="Microsoft.AspNetCore.Http.Connections" Version="[1.0.15,1.1.0)" />
  </ItemGroup>
</Project>

依存関係の解決策の近くにコメントを追加して、後で他のユーザーが見たときに依存関係が存在する理由がわかるようにすることをお勧めします。 ルート依存関係が新しいバージョンを使用するときに、削除できます。 それ以外の場合は、依存関係を蓄積します。

使用可能な修正方法がない場合はどうすればよいですか?

既知の修正方法が利用できないときは、アップグレードされたコンポーネントが使用可能になるまで、他の修復方法として次のオプションを使用できます。

  • コンポーネントの使用を停止し、コードから削除します。この削除は、依存関係スキャン タスクのインストールの次回ビルドで検出されます
  • コンポーネント自体に修正を投稿します。 組織にオープンソース コントリビューションに関する特定のガイドラインがある場合は、それらのガイドラインに従ってください。
  • 警告を無視します。 ただし、既知の修正方法がないアラートでも、組織にセキュリティ上の脅威が発生する可能性があります。 既知の修正方法がないだけで、アラートを無視しないことをお勧めします。

依存関係スキャン アラートを無視する

Advanced Security でアラートを無視するには、適切なアクセス許可が必要です。 既定では、プロジェクト管理者のみが Advanced Security アラートを無視する機能を使用できます。

アラートを無視するには:

  1. クローズするアラートに移動し、そのアラートを選択します
  2. [アラートをクローズする] ドロップダウンを選択します
  3. クローズする理由として [リスクの許容] または [誤検知] を選択します (まだ選択していない場合)
  4. [コメント] テキスト ボックスに、任意でコメントを追加します
  5. [閉じる] を選択してアラートを送信して閉じます
  6. アラートの状態が [オープン] から [終了] に変わり、無視の理由が表示されます

依存関係スキャン アラートを無視する方法を示すスクリーンショット

このアクションにより、選択したブランチのアラートのみが無視されます。 同じ脆弱性を含む可能性がある他のブランチは、別途対応するまでアクティブなままです。 以前に無視したアラートを手動で再度オープンにすることができます。

依存関係スキャンのトラブルシューティング

依存関係スキャンでコンポーネントが識別されない

コンポーネントにフラグを設定せずに依存関係スキャン タスクが完了し、既知の脆弱性を持つコンポーネントのアラートを生成できない場合は、AdvancedSecurity-Dependency-Scanning@1 タスクの前にパッケージの復元手順があることを確認してください。

依存関係スキャン タスクのタイムアウト

タイムアウト前に依存関係スキャン タスクが実行されるデフォルトの時間は、300 秒間 (5 分間) です。 タスクが完了前にタイムアウトする場合は、パイプライン変数 DependencyScanning.Timeout を設定できます。これは整数で秒数を表すものであり、DependencyScanning.Timeout: 600 のように設定します。 デフォルトのタイムアウト値 (300 秒間) 未満を設定しても無効です。

この変数を使用するには、パイプライン変数として DependencyScanning.Timeout を追加します。

- task: AdvancedSecurity-Dependency-Scanning@1
- env:
    DependencyScanning.Timeout: 600

ビルド タスクの緊急シナリオ

依存関係スキャン ビルド タスクがパイプラインの正常な実行をブロックしていて、ビルド タスクを緊急にスキップする必要がある場合は、パイプライン変数 DependencyScanning.Skip: true を設定できます。

依存関係スキャン タスクのアクセス許可

依存関係スキャン ビルド タスクは、パイプライン ID を使用して Advanced Security REST API を呼び出します。 既定では、同じプロジェクト内のパイプラインはアラートをフェッチするアクセス権を持っています。 ビルド サービス アカウントからこれらのアクセス許可を削除する場合、またはカスタム セットアップ (たとえば、リポジトリとは異なるプロジェクトでホストされているパイプライン) がある場合は、これらのアクセス許可を手動で付与する必要があります。

パイプラインで使用されるビルド サービス アカウントへの Advanced Security: View Alerts アクセス許可を付与します。これは、プロジェクト スコープパイプラインの場合は [Project Name] Build Service ([Organization Name])、コレクション スコープのパイプラインの場合は Project Collection Build Service ([Organization Name]) です。