Snyk .NET용 지침
종속성 분석
.NET 에코시스템에는 여러 수준의 종속성이 있으며, 그 중 일부는 명확하지만 일부는 개발자에게 완전히 숨겨져 있습니다. 주어진 .NET 애플리케이션에 대한 취약점을 정확하게 식별하려면 이러한 종속성이 정확하게 해결되어야 합니다.
Snyk은 Snyk CLI와 GitHub와 같은 소스 코드 관리(SCM) 시스템에서 종속성을 서로 다르게 해결합니다.
CLI에서 PackageReference를 사용하여 프로젝트 종속성을 관리하는 경우, Snyk은 obj/project.assets.json을 스캔합니다. packages.config를 사용하여 종속성을 관리하는 경우, Snyk은 packages 디렉토리를 스캔합니다. 이 접근 방식은 스캔 결과의 정확도에 기여합니다.
런타임 환경에서 제공되는 런타임 종속성("메타 패키지"라고도 함)은 호스트 머신이 애플리케이션을 실행하는 서버와 유사한 런타임 SDK를 사용하는 경우 CLI에서 더 정확하게 해결됩니다.
SCM 통합에서 스캔은 위에서 언급한 생성된 파일을 사용할 수 없으므로 다른 프로세스를 사용합니다. 이를 극복하기 위해 Snyk은 NuGet 종속성 해결 알고리즘을 따라 종속성 트리를 구축합니다.
빌드 타임 대 런타임 종속성
빌드 타임(Build-time) 종속성: Snyk은 빌드 타임 종속성을 빌드 중에 해결되고 런타임에 변경되지 않는 것으로 이해합니다.
런타임(Runtime) 종속성: Snyk은 런타임 종속성을 설치된 런타임에 대해 해결되는 것으로 이해합니다. 예를 들어 .NET 프레임워크(<=4) / .NET 런타임(Core 및 .NET 5+용)에서 제공되는
System.Net.Http와 같은 패키지가 있습니다. Snyk은 때때로 런타임 종속성을 메타 패키지라고 부릅니다.
런타임 종속성으로 인한 취약점을 해결하기 위해 다음 조치 중 하나를 선택할 수 있습니다. 이는 SCM과 CLI 간에 차이가 있습니다.
SCM에서 런타임 종속성으로 인한 취약점
애플리케이션이 항상 Microsoft의 최신 패치가 설치된 시스템에서 실행되기 때문에 오탐(false positives)이 발생했다고 믿는다면(즉, 취약점이 더 이상 프로젝트와 관련이 없음을 의미할 수 있음), 해당 취약점을 무시(ignore)하도록 선택할 수 있습니다.
CLI에서 런타임 종속성으로 인한 취약점
애플리케이션이 프로덕션 환경에서 실행될 때 항상 Microsoft에서 제공하는 최신/명시적 패치를 가져오기 때문에 오탐이 발생했다고 믿는다면(즉, 취약점이 더 이상 프로젝트와 관련이 없음을 의미할 수 있음), 해당 취약점을 무시하고 다음을 수행할 수 있습니다:
프로덕션에서 애플리케이션이 항상 최신 SDK 패치 버전에서 실행되는 경우, 프로젝트 파일에서
TargetLatestRuntimePatch를true로 설정할 수 있습니다. 환경(예: 개발, 프로덕션)을 최신 런타임 버전으로 업그레이드해야 합니다.
런타임을 포함하는 자체 포함(self-contained) 앱을 게시하도록 선택할 수 있습니다. 그런 다음 프로젝트 파일에서
RuntimeFrameworkVersion을 특정 패치 버전으로 설정하십시오. 더 이상 관련이 없다고 판단되는 취약점을 무시하도록 선택할 수 있습니다.
기술 스택에 Snyk을 효과적으로 적용하려면 이 가이드를 사용하십시오.
C#
Snyk Code는 IDE, CLI 및 Git 통합을 사용하여 C# 코드를 분석할 수 있습니다.
프레임워크 지원에 대해서는 Snyk Code - 지원되는 언어 및 프레임워크를 참조하십시오.
NuGet
대상 프레임워크 (Target Frameworks): Snyk은 대상 프레임워크를 식별하고 Git 통합을 사용하여 식별된 각 버전에 대한 결과를 제시합니다.
개발 종속성 (Development dependencies): Snyk은 일반적으로 개발자 종속성을 스캔하지 않습니다. 개발자 종속성은 대개 프로덕션으로 푸시되지 않으며 "노이즈"로 간주되기 때문입니다.
Settings > Languages > .Net 설정을 사용하여 NuGet Git 가져오기에서 가시성을 활성화하십시오 (.NET용 Git 설정 참조).
Snyk은 *.proj, packages.config 및 project.json 파일의 빌드 및 development Dependency 섹션을 스캔하고 수정합니다.
잠금 파일 (Lock files): 현재 packages-lock.json은 지원되지 않습니다. Snyk은 설치된 종속성을 결정하기 위해 빌드 시스템과 상호 작용합니다.
PackageReference: Snyk은 현재 버전(version) 속성을 요구합니다. 프로젝트에 이 속성이 없으면 Snyk은 프로젝트에 대한 PR을 열지 못할 수 있습니다.
Git 분석
종속성 트리가 생성되는 방식:
.NET Core의 경우,
*.proj파일을 사용합니다..NET Framework의 경우,
*.proj파일과packages.config를 사용합니다.
SCM 통합은 다음을 지원합니다:
*.csproj*.fsproj*.vbprojpackages.config
Fix Pull Requests
현재 NuGet으로 프로젝트 종속성을 관리하고
PackageReference또는packages.config를 활용하는 경우, 실제 수정 사항이 있다면 Snyk은 매니페스트 파일에서 종속성 버전을 자동으로 업데이트할 수 있습니다. 그런 다음 수정 사항을 검토하고 머지(merge)할 수 있습니다.
CLI 분석
CLI는 다음 구성 파일을 지원합니다:
project.assets.json
Snyk은 종속성을 결정하기 위해 project.assets.json을 스캔할 수 있지만, 이 파일이 생성되어 있어야 합니다. 마찬가지로 솔루션 파일(.sln)을 가리키는 경우에도 파일을 먼저 생성해야 합니다.
snyk test 명령을 실행하기 전에 필요한 project.assets.json을 생성하기 위해 dotnet restore를 실행하십시오.
솔루션 파일에는 분석을 수행하는 데 필요한 파일에 대한 포인터가 포함되어 있습니다. 프로젝트 자체에 스캔할 project.assets.json 파일이 있어야 함에 유의하십시오. Snyk이 솔루션 파일을 스캔의 진입점으로 사용하게 하려면, --file=<filename>.sln을 사용하여 Snyk CLI가 솔루션 파일을 가리키도록 할 수 있습니다.
동일한 프로젝트에서 여러 대상 프레임워크가 사용되는 경우, CLI 스캔은 프로젝트에 선언된 첫 번째 대상 프레임워크에 대한 결과를 반환합니다.
packages.config
snyk test 명령을 실행하기 전에 nuget install -OutputDirectory packages를 실행하십시오.
런타임 환경에서 제공되는 런타임 종속성("메타 패키지"라고도 함)은 호스트 머신이 애플리케이션을 실행하는 서버와 유사한 런타임 SDK를 사용하는 경우 CLI에서 더 정확하게 해결됩니다.
Paket
Snyk은 CLI를 통해 Paket으로 관리되는 종속성을 분석할 수 있습니다. paket.dependencies 및 paket.lock 파일이 있어야 함을 유의하십시오.
Paket 지원에 대한 자세한 내용은 .NET용 Snyk을 참조하십시오.
기타
Snyk은 고유한 종속성 관리 전략을 위한 사용자 정의 테스트 API를 제공합니다. 패키지 문제 목록 엔드포인트를 참조하십시오.
빌드 타임 대 런타임 종속성
자세한 내용은 .NET 페이지를 참조하십시오.
Snyk CLI 팁 및 요령
자세한 내용은 CLI 치트 시트(CLI cheat sheet) 페이지를 참조하십시오.
테스트 대상
Snyk CLI 명령에 대한 자세한 내용은 CLI에서 --help 옵션을 사용하십시오. 자세한 내용은 CLI 명령 및 옵션 요약 페이지를 참조하십시오.
오픈소스 라이브러리
CLI에서 오픈소스 분석을 수행하려면 먼저 종속성을 설치하십시오. 종속성을 설치한 후 다음 옵션 중 하나를 사용하여 snyk test를 실행하십시오:
--file=: 솔루션 파일(.sln) 또는 특정 파일을 대상으로 하려면 이 옵션을 선택하십시오.--all-projects: 특히 여러 언어, 패키지 관리자 및 .sln 파일이 관련된 경우 오픈소스 프로젝트를 분석하려면 이 옵션을 선택하십시오.
코드베이스 (Codebase)
소스 코드 분석을 수행하려면 프로젝트 루트에서 snyk code test 명령을 사용하십시오.
컨테이너
코드형 인프라 (Infrastructure as Code)
자세한 내용은 코드형 인프라 보안 페이지를 참조하십시오.
유용한 옵션 및 플러그인
로컬 또는 빌드 시 보고서를 생성하는 데 도움이 필요하면 snyk-to-html을 참조하십시오.
프로그래밍 방식으로 액세스할 수 있는 출력을 생성하려면
--json및--sarif옵션을 참조하십시오.고급 필터링 옵션은 snyk-filter를 참조하십시오.
.NET 개발자를 위한 추가 보안 주제
다음은 이 에코시스템과 관련된 Snyk 보안 팀 및 개발자 관계 부서(Developer Relations)의 기사 모음입니다.
Last updated