다음을 통해 공유


보안 취약성에 대한 패키지 종속성 감사

보안 감사 정보

NuGet과 같은 패키지 관리자에 대한 보안 감사는 소프트웨어 프로젝트에 포함된 패키지의 보안을 분석하는 프로세스입니다. 여기에는 취약성 식별, 위험 평가 및 보안 향상을 위한 권장 사항이 포함됩니다. 감사에는 패키지 자체의 검토뿐만 아니라 종속성 및 관련 위험이 포함될 수 있습니다. 감사의 목표는 코드 삽입 또는 사이트 간 스크립팅 공격과 같이 공격자가 악용할 수 있는 보안 취약성을 식별하고 완화하는 것입니다.

프로젝트 형식 NuGet .NET SDK Visual Studio
PackageReference 6.8 .NET 8 SDK(8.0.100) Visual Studio 2022 17.8
packages.config 6.10 해당 없음 Visual Studio 2022 17.10

다음을 사용하여 보안 감사 실행 restore

restore 명령은 처음으로 프로젝트 로드, 새 패키지 추가, 패키지 버전 업데이트 또는 즐겨찾는 IDE의 프로젝트에서 패키지 제거와 같은 일반적인 패키지 작업을 수행할 때 자동으로 실행됩니다. GitHub 자문 데이터베이스의 알려진 취약성 보고서에 대해 종속성에 대한 설명이 확인됩니다.

Important

감사에서 패키지를 확인하려면 취약성 데이터베이스를 제공하는 패키지 원본을 사용해야 합니다. NuGet.org의 V3 URL은 이러한 예제 중https://api.nuget.org/v3/index.json 하나이지만 NuGet.org의 V2 엔드포인트는 그렇지 않습니다.

  1. 명령줄에서 프로젝트 또는 솔루션 디렉터리로 이동합니다.
  2. 원하는 도구(예: dotnet, MSBuild, NuGet.exe, VisualStudio 등)를 사용하여 실행 restore 합니다.
  3. 경고를 검토하고 알려진 보안 취약성을 해결합니다.

업데이트로 발견된 보안 취약성

보안 취약성이 발견되고 패키지에 대한 업데이트를 사용할 수 있는 경우 다음 중 하나를 수행할 수 있습니다.

  • 보안 수정 사항이 .csproj 포함된 최신 버전으로 또는 다른 패키지 버전 위치(Directory.Packages.props)를 편집합니다.
  • Visual Studio에서 NuGet 패키지 관리자 사용자 인터페이스를 사용하여 개별 패키지를 업데이트합니다.
  • dotnet add package 해당 패키지 ID를 사용하여 명령을 실행하여 최신 버전으로 업데이트합니다.

업데이트 없이 발견된 보안 취약성

보안 수정 없이 패키지에 알려진 취약성이 있는 경우 다음을 수행할 수 있습니다.

  • 권고 보고서에 설명된 완화 요인을 확인합니다.
  • 패키지가 사용되지 않는 것으로 표시되거나 중단된 경우 제안된 패키지를 사용합니다.
  • 패키지가 오픈 소스 경우 수정 사항을 제공하는 것이 좋습니다.
  • 패키지의 문제 추적기에서 문제를 엽니다.

완화 요인 확인

취약성이 있는 패키지를 계속 사용할 수 있는 완화 요인은 보안 관리자를 검토합니다. 이 취약성은 코드가 특정 프레임워크, 운영 체제 또는 특수 함수에서 호출되는 경우에만 존재할 수 있습니다.

제안된 패키지 사용

사용 중인 패키지에 대한 보안 권고가 보고되고 패키지가 더 이상 사용되지 않는 것으로 표시되거나 중단된 것으로 보이는 경우 패키지 작성자가 선언한 제안된 대체 패키지 또는 유지 관리되는 유사한 기능으로 구성된 패키지를 사용하는 것이 좋습니다.

수정 사항 기여

보안 권고에 대한 수정 사항이 없는 경우 패키지의 오픈 소스 리포지토리에서 끌어오기 요청의 취약성을 해결하는 변경 내용을 제안하거나 NuGet.org 패키지 세부 정보 페이지의 섹션을 통해 Contact owners 작성자에게 문의할 수 있습니다.

문제 열기

취약성을 수정하지 않거나 패키지를 업데이트하거나 바꿀 수 없는 경우 패키지의 문제 추적기 또는 기본 연락처 메서드에서 문제를 엽니다. NuGet.org 패키지 세부 정보 페이지로 이동하여 작성자와 연락하도록 안내하는 항목을 클릭 Report package 할 수 있습니다.

보안 취약성을 찾을 수 없음

보안 취약성이 없는 경우 이는 확인된 현재 시점에 알려진 취약성이 있는 패키지를 패키지 그래프에서 찾을 수 없음을 의미합니다. 권고 데이터베이스는 언제든지 업데이트할 수 있으므로 정기적으로 출력을 dotnet restore 확인하고 연속 통합 프로세스에서 동일한지 확인하는 것이 좋습니다.

NuGet 감사 구성

감사는 프로젝트의 일부로 평가되는 MSBuild 파일의 MSBuild 속성을 .csproj 통해 구성할 수 있습니다. 감사는 리포지토리 수준에서 구성하는 것이 좋습니다.

MSBuild 속성 기본값 사용 가능한 값: 주의
NuGetAuditMode direct directall 최상위 종속성과 전이적 종속성을 모두 감사하려면 값을 all.로 설정할 수 있습니다. Packages.config 프로젝트에는 NuGetAuditMode를 적용할 수 없습니다.
NuGetAuditLevel 낮음 low, moderate, highcritical 및 권고를 확인 moderatehighcritical 하려면 값을 로 설정합니다.moderate
NuGetAudit true truefalse 보안 감사 보고서를 받지 않으려면 값을 로 설정하여 환경을 완전히 옵트아웃할 수 있습니다. false

권고 제외

각 권고에 대해 새 NuGetAuditSuppress MSBuild 항목을 추가하여 감사 보고서에서 특정 권고를 제외하도록 선택할 수 있습니다. NuGetAuditSuppress 표시하지 않으려는 권고 URL로 설정된 메타데이터를 사용하여 Include= 항목을 정의합니다.

<ItemGroup>
    <NuGetAuditSuppress Include="https://github.com/advisories/XXXX" />
</ItemGroup>

다른 NuGet 감사 구성 속성 NuGetAuditSuppress 과 마찬가지로 항목은 프로젝트 또는 리포지토리 수준에서 정의할 수 있습니다.

NuGetAuditSuppress 는 NuGet 6.11, Visual Studio 17.11 및 .NET 8.0.400 SDK부터 시작하는 PackageReference 프로젝트에 사용할 수 있습니다. packages.config 프로젝트에는 현재 사용할 수 없습니다.

또한 심각도에 따라 경고를 표시하지 않는 옵션이 있습니다. 경고를 표시하지 않거나NU1904 NU1901-기능을 사용하여 <NuGetAuditLevel> 감사 보고서가 워크플로에 유용한지 확인할 수 <NoWarn> 있습니다.

경고 코드

경고 코드 원인
NU1900 취약성 정보를 가져오는 동안 패키지 원본과 통신하는 동안 오류가 발생했습니다.
NU1901 심각도가 낮은 패키지가 검색됨
NU1902 보통 심각도가 검색된 패키지
NU1903 심각도가 높은 패키지가 검색됨
NU1904 심각도가 검색된 패키지

이러한 경고를 오류로 처리하도록 빌드를 사용자 지정하여 경고를 오류로 처리하거나 오류가 아닌 경고를 처리할 수 있습니다. 예를 들어 모든 경고(C#, NuGet, MSBuild 등)를 오류로 처리하는 데 이미 사용하고 <TreatWarningsAsErrors> 있는 경우 나중에 검색된 취약성이 빌드를 중단하지 않도록 방지하는 데 사용할 <WarningsNotAsErrors>NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors> 수 있습니다. 또는 낮음 및 보통 취약성을 경고로 유지하지만 높고 중요한 취약성을 오류로 처리하고 사용하지 TreatWarningsAsErrors않는 경우 사용할 <WarningsAsErrors>NU1903;NU1904</WarningsAsErrors>수 있습니다.

참고 항목

packages.config 프로젝트와 같은 NoWarn 메시지 심각도에 대한 MSBuild 속성은 TreatWarningsAsErrors 지원되지 않습니다.

요약

보안 감사 기능은 소프트웨어 프로젝트의 보안 및 무결성을 유지하는 데 매우 중요합니다. 이러한 기능은 보안 취약성에 대한 추가 보호 계층을 제공하고 오픈 소스 패키지를 자신있게 사용할 수 있도록 합니다.