Share via


종속성 검사

Azure DevOps용 GitHub Advanced Security의 종속성 검사는 소스 코드에 사용되는 오픈 소스 구성 요소를 검색하고 관련된 취약성이 있는지 감지합니다. 오픈 소스 구성 요소에서 발견된 취약성은 경고로 플래그가 지정됩니다.

Azure DevOps용 GitHub Advanced Security는 Azure Repos에서 작동합니다. GitHub 리포지토리에서 GitHub Advanced Security를 사용하려면 GitHub Advanced Security를 참조하세요.

종속성 검사 정보

종속성 검사는 코드가 의존하는 취약한 것으로 확인된 모든 오픈 소스 구성 요소(직접 또는 전이적)에 대한 경고를 생성합니다. 직접 취약성은 코드에서 직접 사용하는 라이브러리입니다. 전이적 종속성은 직접 종속성이 사용하는 라이브러리 또는 기타 소프트웨어입니다.

종속성 검색 검색 정보

구성 요소의 새 스냅샷 리포지토리에 대한 종속성 그래프 변경될 때마다 저장되며, 새 코드를 작성하는 종속성 검사 작업이 포함된 파이프라인이 실행된 후에 저장됩니다.

사용 중 감지된 모든 취약한 구성 요소에 대해 구성 요소 및 취약성이 빌드 로그에 나열되고 고급 보안 탭에 경고로 표시됩니다. GitHub에서 검토하고 GitHub 권고 데이터베이스추가된 권고만 종속성 검사 경고를 만듭니다. 빌드 로그에는 추가 조사를 위해 개별 경고에 대한 링크가 포함되어 있습니다. 경고 세부 정보에 대한 자세한 내용은 종속성 검사 경고 수정을 참조하세요.

빌드 로그에는 검색된 각 취약성에 대한 기본 정보도 포함되어 있습니다. 이러한 세부 정보에는 심각도, 영향을 받는 구성 요소, 취약성 제목 및 관련 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.jsonlerna.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의 리포지토리에 있는 고급 보안 탭은 기본적으로 종속성 검사 경고를 표시하는 보안 경고를 볼 수 있는 허브입니다. 분기, 파이프라인, 패키지 및 심각도별로 필터링할 수 있습니다. 수정 지침을 포함하여 자세한 내용은 경고로 선택할 수 있습니다. 현재 경고 허브는 PR 분기에서 완료된 검사에 대한 경고를 표시하지 않습니다.

리포지토리에서 취약한 패키지가 검색되면 종속성 검사 경고를 수정하려면 일반적으로 더 높은 패키지 버전으로 업그레이드하거나 잘못된 패키지를 제거해야 합니다. 이 조언은 직접 및 전이적(또는 간접) 종속성 모두에 적합합니다. 고급 보안 탭의 기본 보기는 리포지토리에 대한 기본 분기 대한 활성 경고입니다.

파이프라인 또는 분기의 이름이 바뀌면 결과에 영향을 주지 않습니다. 새 이름이 표시되기까지 최대 24시간이 걸릴 수 있습니다.

리포지토리에 대한 종속성 검사 경고 보기 스크린샷

종속성 검사 작업이 설치된 파이프라인에 대한 최신 빌드에서 취약한 구성 요소가 더 이상 검색되지 않을 때 경고 상태가 자동으로 업데이트 Closed 됩니다. 해결된 경고를 보려면 기본 도구 모음에서 필터를 활용 State 하고 선택합니다Closed.

닫힌 종속성 검사 경고 보기 스크린샷

리포지토리에 대한 고급 보안을 해제하면 고급 보안 탭 및 빌드 작업의 결과에 액세스할 수 없게 됩니다. 빌드 작업은 실패하지 않지만 고급 보안을 사용하지 않도록 설정된 상태에서 빌드의 결과가 작업과 함께 실행되며 숨겨지고 유지되지 않습니다.

경고 세부 정보

특정 경고 및 수정 지침을 클릭하여 경고에 대한 세부 정보를 자세히 살펴볼 수도 있습니다.

종속성 검사 경고에 대한 세부 정보를 보여 주는 스크린샷

섹션 설명
추천 권장 사항 텍스트는 취약성 데이터 공급자인 GitHub 자문 데이터베이스에서 직접 제공됩니다. 일반적으로 이 지침에서는 식별된 구성 요소를 무적 버전으로 업그레이드하는 것이 좋습니다.
위치 위치 섹션에서는 종속성 검사 작업에서 사용 중인 취약한 구성 요소를 검색한 경로를 자세히 설명합니다. 기본 빌드 검사에서 원본의 커밋된 파일로 파일을 확인할 수 있는 경우 위치 카드 클릭 가능한 링크로 표시됩니다. 파일이 빌드의 일부로 생성된 경우(예: 빌드 아티팩트) 링크를 클릭할 수 없습니다. 빌드 로그를 검토하여 구성 요소가 빌드에 도입된 방법을 더 잘 이해합니다.
설명 설명은 GitHub 권고 설명에 의해 제공됩니다.

검색

검색 탭 아래에 나열된 파이프라인은 취약한 구성 요소가 발견된 파이프라인입니다. 각 행은 영향을 받는 파이프라인의 최신 빌드와 패키지가 처음 도입된 날짜를 자세히 설명합니다. 일부 파이프라인에서 취약한 패키지가 수정되었지만 전부는 아닌 경우 부분적으로 고정된 행이 표시됩니다.

수정 없이 경고에 대한 종속성 검색 검색 보기 스크린샷

경고가 해결되면 경고가 자동으로 상태로 이동하고 Closed 검색 탭 아래의 최신 실행 파이프라인에 녹색 검사 표시가 표시됩니다. 즉, 업데이트된 구성 요소가 포함된 코드가 해당 파이프라인에서 실행되었음을 의미합니다.

경고에 대한 종속성 검색 검색 보기 스크린샷

심각도

GitHub 권고 데이터베이스는 CVSS 점수를 제공하며, 이 점수는 다음 지침을 통해 경고에 대해 낮음, 중간, 높음 또는 위험 심각도로 변환됩니다.

CVSS 점수 심각도
1.0 < 점수 < 4.0 낮음
4.0 < 점수 < 7.0 중간
7.0 < 점수 < 9.0 높음
점수 >= 9.0 위험

세부 정보 찾기

일반적으로 세부 정보 찾기에서 취약한 패키지와 루트 종속성이라는 두 섹션이 있습니다. 취약한 패키지는 잠재적으로 취약한 구성 요소입니다. 루트 종속성 섹션에는 취약성으로 이어지는 종속성 체인을 담당하는 최상위 구성 요소가 포함되어 있습니다.

취약한 패키지가 직접 종속성으로만 참조되는 경우 "취약한 패키지" 섹션만 표시됩니다.

취약한 패키지가 직접 및 전이적 종속성으로 참조되는 경우 패키지는 "취약한 패키지" 및 "루트 종속성" 섹션 모두에 표시됩니다.

취약한 패키지가 전이적 종속성으로만 참조되는 경우 패키지는 "취약한 패키지" 섹션에 표시되고 취약한 패키지를 참조하는 루트 종속성은 "루트 종속성" 섹션에 표시됩니다.

종속성 검사 경고 관리

리포지토리에 대한 경고 보기

리포지토리에 대한 기여자 권한이 있는 사용자는 리>포지토리 고급 보안의 리포지토리에 대한 모든 경고의 요약을 볼 수 있습니다.

기본적으로 경고 페이지에는 리포지토리의 기본 분기 대한 종속성 검사 결과가 표시됩니다.

경고의 상태 다른 분기 및 파이프라인에 경고가 있는 경우에도 기본 분기 및 최신 실행 파이프라인의 상태를 반영합니다.

종속성 검사 경고 수정

직접 종속성은 리포지토리에 있는 구성 요소입니다. 전이적 또는 간접 종속성은 직접 종속성에서 사용되는 구성 요소입니다. 직접 또는 전이적 종속성에서 취약성이 발견되었는지 여부에 관계없이 프로젝트는 여전히 취약합니다.

취약한 전이적 종속성 수정은 일반적으로 식별된 각 직접 종속성에 사용되는 취약한 구성 요소의 버전을 명시적으로 재정의하는 형태를 취합니다. 루트 종속성이 취약한 구성 요소의 사용을 안전한 버전으로 업그레이드하면 여러 개별 재정의가 아닌 각 루트 종속성을 업그레이드할 수 있습니다.

Yarn/Npm에 대한 종속성 업데이트

가설적으로 이 패키지에 두 가지 취약성이 있다고 가정해 보겠습니다. 하나는 직접 종속성을 위한 axios것이고, 하나는 전이적 종속성(간접 종속성 또는 종속성의 종속성이라고도 함)을 위한 acorn것입니다.

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

현재 버전 axios 에는 v0.18.1 이상으로 업데이트할 것을 권장하는 DoS(서비스 거부) 취약성 이 있습니다. 직접 종속성이므로 사용하는 버전을 axios 제어할 수 있습니다. 끌어오는 버전을 axios 업데이트하기만 하면 됩니다. 업데이트 package.json 된 내용은 다음과 유사합니다.

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

이제 표시된 버전의 eslintpackage.json 버전은 버전 acorn 이상으로 업데이트하기 위한 권장 사항이 있는 정규식 서비스 거부(ReDoS) 취약성 버전에 5.7.4, 6.4.1, 7.1.1 따라 달라집니다. 종속성 검사 도구에서 경고를 받으면 취약한 종속성이 필요한 루트 종속성을 알려야 합니다.

Yarn

Yarn을 사용하는 경우 전체 종속성 체인을 찾는 이유를 yarn을 사용할 수 있습니다.

> $ 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.

전체 종속성 체인은 .입니다eslintacorn>espree>. 종속성 체인을 알게 되면 Yarn의 또 다른 기능인 선택적 종속성 확인을 사용하여 사용되는 도토리 버전을 재정의할 수 있습니다.

해결 방법 필드를 package.json 사용하여 버전 재정의를 정의합니다. 패키지를 재정의하는 세 가지 방법이 최악의 순서로 표시됩니다.

{
  "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 패턴을 사용하면 모든 종속성에서 도토리 패키지의 모든 사용이 재정의됩니다. 위험하며 런타임에 중단합니다. 결과적으로 Yarn v2에서 제거되었습니다.

eslint/**/acorn 패턴을 사용하면 eslint 패키지에서 도토리 패키지의 모든 사용이 재정의되고 모든 패키지에서 해당 패키지가 달라집니다. 모든 종속성에 대해 패키지를 재정의하는 것보다 안전하지만 패키지에 대한 종속성 그래프 크면 여전히 몇 가지 위험이 있습니다. 이 패턴은 취약한 패키지를 사용하는 하위 패키지가 많고 개별 서브패키지에 대한 재정의를 정의하는 것이 실용적이지 않은 경우에 권장됩니다.

패턴을 eslint/espree/acorn 사용하면 패키지의 패키지 사용량만 재정의 acornespree 됩니다 eslint . 특히 취약한 종속성 체인을 대상으로 하며 패키지 버전을 재정의하는 권장 방법입니다.

npm

npm 8.3 이상을 사용하는 경우 package.json 재정필드를 사용할 수 있습니다.

전이적 종속성을 구체적으로 변경해야 하는 경우 재정의를 추가합니다. 예를 들어 종속성 버전을 알려진 보안 문제로 바꾸거나, 기존 종속성을 포크로 바꾸거나, 동일한 버전의 패키지가 어디에나 사용되는지 확인하기 위해 재정의를 추가해야 할 수 있습니다.

{
  "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 사용량만 재정의"라고 말하는 npm의 acornespree 방법을 보여 줍니다. 특히 취약한 종속성 체인을 대상으로 하며 패키지 버전을 재정의하는 권장 방법입니다. 재정의는 npm의 네이티브 기능입니다. 종속성 트리의 패키지를 다른 버전 또는 다른 패키지로 완전히 바꾸는 방법을 제공합니다.

재정의를 설정한 후 삭제 package-lock.json 하고 node_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에서 사용되는 메커니즘만큼 정교하지 않습니다. 따라서 프로젝트에서 단일 버전의 종속성만 가질 수 있습니다. 이 문제를 해결하기 위해 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도 있습니다. 따라서 종속성 그래프 두 가지 종속성 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.jaxrs:jackson-jaxrs-json-providercom.fasterxml.jackson.core:jackson-databind에 의존하지 않습니다. 그렇다면 업그레이드 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에서 사용되는 종속성 확인 알고리즘은 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.Http.Connections에 따라 업데이트된 버전 Microsoft.AspNetCore.App 이 있는지 확인해야 합니다. 그렇다면 여기에서 업그레이드 Microsoft.AspNetCore.App 하고 중지할 수 있습니다. 그렇지 않은 경우 버전에 따라 재정의 Microsoft.AspNetCore.Http.Connections 해야 합니다.

NuGet에는 yarn why 또는 mvn dependency:tree 기본 제공과 동일하지 않으므로 종속성 트리를 보는 가장 쉬운 방법은 종종 nuget.org 방문하는 것입니다. NuGet 페이지를 Microsoft.AspNetCore.App방문하면 에 따라 달라지는 것을 볼 수 있습니다version >= 1.0.4 && < 1.1.0Microsoft.AspNetCore.Http.Connections. 또는 NuGet 버전 범위에서 대표적인 구문은 [1.0.4,1.1.0).

RCE 취약성이 버전에서 Microsoft.AspNetCore.Http.Connections 수정되었으므로 버전 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>

나중에 오는 모든 사용자가 종속성이 있는 이유를 알 수 있도록 종속성 확인 근처에 주석을 추가하는 것이 좋습니다. 루트 종속성이 새 버전을 사용하면 제거할 수 있습니다. 그렇지 않으면 종속성을 누적합니다.

사용할 수 있는 수정 사항이 없으면 어떻게 해야 하나요?

알려진 수정 사항을 사용할 수 없는 경우 업그레이드된 구성 요소를 사용할 수 있을 때까지 다음 옵션을 다른 수정 방법으로 사용할 수 있습니다.

  • 구성 요소 사용을 중지하고 코드에서 제거합니다. 종속성 검사 작업이 설치된 다음 빌드 시 이 제거가 검색됩니다.
  • 구성 요소 자체에 대한 수정 사항을 적용합니다. 조직에 오픈 소스 기여 대한 특정 지침이 있는 경우 해당 지침을 따르세요.
  • 경고를 해제합니다. 그러나 알려진 수정 사항이 없는 경고는 여전히 조직에 보안 위협을 가할 수 있습니다. 알려진 수정 사항이 없으므로 경고를 해제하지 않는 것이 좋습니다.

종속성 검사 경고 해제

고급 보안에서 경고를 해제하려면 적절한 권한이 필요합니다. 기본적으로 프로젝트 관리자만 고급 보안 경고를 해제할 수 있는 기능이 제공됩니다.

경고를 해제하려면 다음을 수행합니다.

  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를 사용하여 고급 보안 REST API를 호출합니다. 기본적으로 동일한 프로젝트의 파이프라인은 경고를 가져올 수 있습니다. 빌드 서비스 계정에서 해당 권한을 제거하거나 사용자 지정 설정(예: 리포지토리와 다른 프로젝트에서 호스트되는 파이프라인)이 있는 경우 이러한 권한을 수동으로 부여해야 합니다.

파이프라인에서 사용되는 빌드 서비스 계정에 대한 권한을 부여 Advanced Security: View Alerts 합니다. 프로젝트 범위 파이프라인의 경우 [Project Name] Build Service ([Organization Name])컬렉션 범위 파이프라인은 다음과 같습니다 Project Collection Build Service ([Organization Name]).