Auditování závislostí balíčků pro ohrožení zabezpečení
Audity zabezpečení
Audit zabezpečení pro správce balíčků, jako je NuGet, je proces, který zahrnuje analýzu zabezpečení balíčků, které jsou součástí softwarového projektu. To zahrnuje identifikaci ohrožení zabezpečení, vyhodnocení rizik a vytváření doporučení pro zlepšení zabezpečení. Audit může zahrnovat kontrolu samotných balíčků a také všechny závislosti a související rizika. Cílem auditu je identifikovat a zmírnit všechna ohrožení zabezpečení, která by mohli útočníci zneužít, například injektáž kódu nebo skriptování mezi weby.
Máme také blogový příspěvek , který popisuje naši doporučenou metodu pro provedení akce, když se zjistí, že váš projekt používá balíček se známým ohrožením zabezpečení, a nástroje, které vám pomůžou získat další informace.
Dostupnost funkcí
NuGet | .NET SDK | Visual Studio | Funkce |
---|---|---|---|
5.9 | .NET 5 SDK (5.0.200) | – | dotnet list package --vulnerable |
6.8 | .NET 8 SDK (8.0.100) | Visual Studio 2022 17.8 | NuGetAudit pro PackageReference |
6.10 | – | Visual Studio 2022 17.10 | NuGetAudit pro packages.config |
6.11 | .NET 8 SDK (8.0.400) | Visual Studio 2022 17.11 | NuGetAuditSuppress pro PackageReference |
6.12 | Sada .NET 9 SDK (9.0.100) | Visual Studio 2022 17.12 | Zdroje auditu. NuGetAuditSuppress pro packages.config. |
Spuštění auditu zabezpečení s využitím restore
Příkaz restore
se automaticky spustí při běžné operaci balíčku, jako je první načtení projektu, přidání nového balíčku, aktualizace verze balíčku nebo odebrání balíčku z projektu ve vašem oblíbeném integrovaném vývojovém prostředí (IDE).
Vaše závislosti se kontrolují v seznamu známých ohrožení zabezpečení poskytovaných zdroji auditu.
- Na příkazovém řádku přejděte do adresáře projektu nebo řešení.
- Spusťte
restore
pomocí preferovaného nástroje (tj. dotnet, MSBuild, NuGet.exe, VisualStudio atd.). - Projděte si upozornění a vyřešte známá ohrožení zabezpečení.
Konfigurace auditu NuGetu
Audit lze nakonfigurovat prostřednictvím vlastností NÁSTROJE MSBuild v .csproj
souboru MSBuild, který se vyhodnocuje jako součást projektu.
Doporučujeme nakonfigurovat audit na úrovni úložiště.
MsBuild – vlastnost | Výchozí | Možné hodnoty | Notes |
---|---|---|---|
NuGetAuditMode | vše | direct a all |
Pokud chcete auditovat pouze závislosti nejvyšší úrovně, můžete hodnotu nastavit na direct hodnotu . NuGetAuditMode se nedá použít pro projekty packages.config. |
NuGetAuditLevel | low | low , moderate , high a critical |
Minimální úroveň závažnosti, která se má hlásit. Pokud chcete zobrazit moderate , high a critical poradce (vyloučit low ), nastavte hodnotu na moderate |
NuGetAudit | true | true a false |
Pokud nechcete dostávat sestavy auditu zabezpečení, můžete se úplně odhlásit nastavením hodnoty na false |
Poznámka: V .NET 8 je výchozí hodnota NuGetAuditMode .direct
Proto nastavením sdkAnalysisLevel změní 8.0.400
výchozí hodnotu NuGetAuditMode odpovídajícím způsobem.
Zdroje auditu
Obnovení stáhne prostředek serveru VulnerabilityInfo
a zkontroluje seznam balíčků, které jednotlivé projekty používají.
Seznam zdrojů je definován elementem auditSources
v NuGet.Config a upozornění NU1905 je vyvolána, pokud některý ze zdrojů auditu neposkytuje žádné informace o ohrožení zabezpečení.
Pokud auditSources
není definován nebo je vymazán bez přidání zdrojů, packageSources
použije se a upozornění NU1905 se potlačí.
Vzhledem k tomu, že běžným zmírněním útoků na nahrazení balíčků je použití jednoho zdroje balíčku, který je nadřazený z nuget.org, takže NuGet není nakonfigurovaný tak, aby jako zdroj balíčku používal nuget.org, je možné zdroje auditu použít k použití nuget.org (nebo jakéhokoli jiného zdroje, který poskytuje informace o ohrožení zabezpečení), aniž by ho používal jako zdroj balíčku.
Zdrojem dat pro databázi ohrožení zabezpečení nuget.org je databáze GitHub Advisory Database. Mějte na paměti, že protokol V2 je zastaralý, takže pokud váš koncový bod nuget.config stále používá, musíte migrovat do koncového bodu V3.
<configuration>
<auditSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</auditSources>
</configuration>
Zdroje auditu jsou dostupné ze sady NuGet 6.12, .NET 9.0.100 SDK a sady Visual Studio 2022 17.12.
Před touto verzí bude Audit NuGet ke stažení informací o ohrožení zabezpečení používat pouze zdroje balíčků.
Zdroje auditu se v tuto chvíli nepoužívají dotnet list package --vulnerable
.
Vyloučení informačních zpravodajů
Z sestavy auditu můžete vyloučit konkrétní poradce přidáním nové NuGetAuditSuppress
položky nástroje MSBuild pro každou radu.
NuGetAuditSuppress
Definujte položku s metadaty nastavenými Include=
na adresu URL poradce, kterou chcete potlačit.
<ItemGroup>
<NuGetAuditSuppress Include="https://github.com/advisories/XXXX" />
</ItemGroup>
Podobně jako u ostatních vlastností NuGetAuditSuppress
konfigurace auditu NuGet je možné položky definovat na úrovni projektu nebo úložiště.
NuGetAuditSuppress
je k dispozici pro projekty PackageReference počínaje sadou NuGet 6.11, Visual Studio 17.11 a sadou .NET 8.0.400 SDK.
Je k dispozici pro packages.config ze sady Visual Studio 17.12 a NuGet 6.12.
Kódy upozornění
Kód upozornění | Důvod |
---|---|
NU1900 | Při komunikaci se zdrojem balíčků došlo k chybě při získávání informací o ohrožení zabezpečení. |
NU1901 | Zjištěn balíček s nízkou závažností |
NU1902 | Balíček se střední závažností zjištěn |
NU1903 | Balíček se zjištěnou vysokou závažností |
NU1904 | Zjištěn balíček s kritickou závažností |
NU1905 | Zdroj auditu neposkytuje databázi ohrožení zabezpečení. |
Sestavení můžete přizpůsobit tak, aby s těmito upozorněními zacházeli jako s chybami , abyste mohli s upozorněními zacházet jako s chybami, nebo považovat upozornění za chyby.
Pokud už například používáte <TreatWarningsAsErrors>
k zacházení se všemi upozorněními (C#, NuGet, MSBuild atd.) jako s chybami, můžete zabránit <WarningsNotAsErrors>$(WarningsNotAsErrors);NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors>
ohrožením zabezpečení zjištěných v budoucnu, aby nedošlo k narušení sestavení.
Případně pokud chcete zachovat slabá a střední ohrožení zabezpečení jako upozornění, ale zacházet s velkými a kritickými chybami jako s chybami a nepoužíváte TreatWarningsAsErrors
, můžete použít <WarningsAsErrors>$(WarningsAsErrors);NU1903;NU1904</WarningsAsErrors>
.
Poznámka:
Vlastnosti nástroje MSBuild pro závažnost zprávy, například NoWarn
a TreatWarningsAsErrors
nejsou podporovány pro projekty packages.config.
dotnet list package --vulnerable
Po úspěšném obnovení projektu má --vulnerable
argument pro filtrování balíčků podle toho, dotnet list package
které balíčky obsahují známá ohrožení zabezpečení.
Všimněte si, že --include-transitive
není výchozí, proto by se měla zahrnout.
Akce při nahlášení balíčků se známými ohroženími zabezpečení
Máme také blogový příspěvek , který popisuje naši doporučenou metodu pro provedení akce, když se zjistí, že váš projekt používá balíček se známým ohrožením zabezpečení, a nástroje, které vám pomůžou získat další informace.
Zjištěná ohrožení zabezpečení s aktualizacemi
Pokud jsou nalezena ohrožení zabezpečení a jsou pro balíček k dispozici aktualizace, můžete:
.csproj
Upravte umístění verze balíčku (Directory.Packages.props
) s novější verzí obsahující opravu zabezpečení.- Pomocí uživatelského rozhraní správce balíčků NuGet v sadě Visual Studio aktualizujte jednotlivé balíčky.
- Spuštěním
dotnet add package
příkazu s příslušným ID balíčku aktualizujte na nejnovější verzi.
Tranzitivní balíčky
Pokud v tranzitivních závislostech balíčku nejvyšší úrovně existuje známá ohrožení zabezpečení, máte tyto možnosti:
- Přidejte pevnou verzi balíčku jako přímý odkaz na balíček. Poznámka: Nezapomeňte odebrat tento odkaz, pokud bude k dispozici nová aktualizace verze balíčku, a nezapomeňte zachovat definované atributy pro očekávané chování.
- Použití správy centrálních balíčků s přechodnými funkcemi připnutí
- Potlačit radu , dokud ji nebude možné vyřešit.
- Vytvořte problém v sledování balíčku nejvyšší úrovně a požádejte o aktualizaci.
Zjištěná ohrožení zabezpečení bez aktualizací
V případě, že v balíčku existuje známá chyba zabezpečení bez opravy zabezpečení, můžete provést následující kroky.
- Zkontrolujte všechny faktory zmírnění rizika uvedené v sestavě rady.
- Pokud je balíček označený jako zastaralý nebo opuštěný, použijte navrhovaný balíček.
- Pokud je balíček opensourcový, zvažte přispívání na opravu.
- Otevřete problém v sledování problémů balíčku.
Kontrola zmírňujících faktorů
Projděte si poradce pro zabezpečení a zkontrolujte všechny faktory, které by vám mohly umožnit pokračovat v používání balíčku s ohrožením zabezpečení. Ohrožení zabezpečení může existovat pouze v případě, že se kód používá v konkrétní rozhraní, operačním systému nebo speciální funkci.
Použití navrhovaného balíčku
V případě nahlášení poradce pro zabezpečení pro balíček, který používáte, a balíček je označený jako zastaralý nebo se zdá být opuštěný, zvažte použití jakéhokoli navrhovaného alternativního balíčku, který autor balíčku deklaroval, nebo balíček, který obsahuje podobné funkce, které jsou zachovány.
Přispívání opravy
Pokud pro poradce pro zabezpečení neexistuje oprava, můžete navrhnout změny, které řeší ohrožení zabezpečení v žádosti o přijetí změn v opensourcovém úložišti balíčku, nebo se obraťte na autora prostřednictvím Contact owners
části na stránce podrobností balíčku NuGet.org.
Otevření problému
Pokud nechcete chybu zabezpečení opravit nebo nemůžete balíček aktualizovat nebo nahradit, otevřete problém v nástroji pro sledování problémů balíčku nebo upřednostňované metodě kontaktu.
Na NuGet.org můžete přejít na stránku s podrobnostmi balíčku a kliknout, Report package
která vás provede kontaktem s autorem.
Nenašly se žádná ohrožení zabezpečení.
Pokud se nenajde žádná ohrožení zabezpečení, znamená to, že balíčky se známými ohroženími zabezpečení nebyly v grafu balíčků v současné době, kdy jste zkontrolovali, nalezeny.
Vzhledem k tomu, že poradní databázi je možné kdykoli aktualizovat, doporučujeme pravidelně kontrolovat dotnet restore
výstup a zajistit to samé v procesu kontinuální integrace.
Shrnutí
Funkce auditování zabezpečení jsou zásadní pro zachování zabezpečení a integrity softwarových projektů. Tyto funkce poskytují další vrstvu ochrany před ohroženími zabezpečení a zajišťují, že můžete používat opensourcové balíčky s jistotou.