Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Tudnivalók a biztonsági auditokról
A csomagkezelők, például a NuGet biztonsági auditja egy olyan folyamat, amely magában foglalja a szoftverprojektekben szereplő csomagok biztonságának elemzését. Ez magában foglalja a biztonsági rések azonosítását, a kockázatok kiértékelését és a biztonság javítására vonatkozó javaslatok meghozatalát. Az audit magában foglalhatja maguknak a csomagoknak a felülvizsgálatát, valamint az esetleges függőségeket és az azokhoz kapcsolódó kockázatokat. Az audit célja, hogy azonosítsa és csökkentse a támadók által kihasználható biztonsági réseket, például a kódinjektálást vagy a helyek közötti szkriptelési támadásokat.
Van egy blogbejegyzésünk is, amely bemutatja az általunk ajánlott eljárást arra az esetre, ha a projekt egy ismert sebezhetőséget tartalmazó csomagot használ. Emellett eszközöket is javasolunk, amelyek segítségével további információkhoz juthat.
Szolgáltatás rendelkezésre állása
NuGet | .NET SDK | Visual Studio | Tulajdonság |
---|---|---|---|
5.9 | .NET 5 SDK (5.0.200) | Nincs adat. | dotnet list package --vulnerable |
6.8 | .NET 8 SDK (8.0.100) | Visual Studio 2022 17.8 | NuGetAudit for PackageReference |
6.10 | Nincs adat. | Visual Studio 2022 17.10 | NuGetAudit számára packages.config |
6.11 | .NET 8 SDK (8.0.400) | Visual Studio 2022 17.11 | NuGetAuditSuppress a PackageReference-hez |
6.12 | .NET 9 SDK (9.0.100) | Visual Studio 2022 17.12 | Naplózási források. NuGetAuditSuppress for packages.config. |
Biztonsági audit futtatása a restore
A restore
parancs automatikusan fut, amikor egy gyakori csomagműveletet hajt végre, például először tölt be egy projektet, új csomagot ad hozzá, frissíti a csomagverziót, vagy eltávolít egy csomagot a projektből a kedvenc IDE-ben.
A függőségeket a ellenőrzési források által biztosított ismert biztonsági rések listájával ellenőrzik.
- A parancssorban keresse meg a projekt vagy a megoldás könyvtárát.
- Futtassa a
restore
az Ön által választott eszközzel (pl. dotnet, MSBuild, NuGet.exe, VisualStudio stb.). - Tekintse át a figyelmeztetéseket, és kezelje az ismert biztonsági réseket.
A NuGet-naplózás konfigurálása
A naplózás konfigurálható MSBuild tulajdonságokon keresztül egy olyan MSBuild fájlban, amely a projekt részeként van kiértékelve. Javasoljuk, hogy a naplózás adattárszinten legyen konfigurálva.
MSBuild tulajdonság | Alapértelmezett | Lehetséges értékek | Jegyzetek |
---|---|---|---|
NuGetAuditMode | Lásd alább az 1-et |
direct és all |
Ha csak a legfelső szintű függőségeket szeretné naplózni, beállíthatja az értéket a következőre direct : . A NuGetAuditMode nem alkalmazható packages.config projektekre. |
NuGetAuditLevel | alacsony |
low , moderate , high és critical |
A jelentés minimális súlyossági szintje. Ha látni szeretné moderate , high , és critical tanácsadásokat (kivéve low ), állítsa az értéket a következő értékre: moderate |
NuGetAudit | igaz |
true és false |
Ha nem szeretne biztonsági auditjelentéseket kapni, teljes mértékben kikapcsolhatja a felhasználói élményt úgy, hogy a false |
-
NuGetAuditMode
alapértelmezettként működik, ha a projekt célként anet10.0
vagy magasabb verziót használja. Ellenkező esetbenNuGetAuditMode
az alapértelmezett érték:direct
. Amikor egy projekt több célt céloz meg, ha bármelyik célkeretrendszer aall
választja, akkor az ellenőrzés ezt az értéket fogja használni minden célkeretrendszernél.
Auditálási források
A Visszaállítás letölti egy kiszolgáló erőforrásátVulnerabilityInfo
, hogy ellenőrizze az egyes projektek által használt csomagok listáját.
A források listáját a auditSources
NuGet.Config elem határozza meg, és a nu1905 figyelmeztetés akkor jelenik meg, ha a naplózási források nem nyújtanak biztonsági résadatokat.
Ha auditSources
nincs definiálva, vagy forrás hozzáadása nélkül van törölve, akkor packageSources
a rendszer használja, és a NU1905 figyelmeztetése el lesz tiltva.
Mivel a csomaghelyettesítési támadások gyakori elhárítása az, hogy egyetlen csomagforrást használunk, amely a nuget.org-tól származik, így a NuGet nincs közvetlenül a nuget.org csomagforrásként konfigurálva, az audit források felhasználhatók a nuget.org (vagy bármely más, biztonsági rés információt biztosító forrás) ellenőrzésére anélkül, hogy csomagforrásként használnák.
A nuget.org sebezhetőségi adatbázisának adatforrása a GitHub Advisory Database. Vegye figyelembe, hogy a V2 protokoll elavult, ezért ha a nuget.config továbbra is a V2-végpontot használja, a V3-végpontra kell migrálnia.
<configuration>
<auditSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</auditSources>
</configuration>
A naplózási források a NuGet 6.12, a .NET 9.0.100 SDK és a Visual Studio 2022 17.12-ből érhetők el.
A verzió előtt a NuGet Audit csak csomagforrásokat használ a biztonságirés-információk letöltéséhez.
Az audit forrásokat dotnet list package --vulnerable
jelenleg nem használja.
A tanácsadók kizárása
Az egyes értesítéseket kizárhatja az auditjelentésből, ha hozzáad egy új NuGetAuditSuppress
MSBuild elemet minden egyes értesítéshez.
Adjon meg egy NuGetAuditSuppress
elemet a Include=
letiltani kívánt tanácsadó URL-címre beállított metaadatokkal.
<ItemGroup>
<NuGetAuditSuppress Include="https://github.com/advisories/XXXX" />
</ItemGroup>
A NuGet egyéb naplózási konfigurációs tulajdonságaihoz NuGetAuditSuppress
hasonlóan az elemek a projekt vagy az adattár szintjén is meghatározhatók.
NuGetAuditSuppress
a NuGet 6.11-től, a Visual Studio 17.11-től és a .NET 8.0.400 SDK-tól kezdődő PackageReference-projektekhez érhető el.
A packages.config a Visual Studio 17.12-ből és a NuGet 6.12-ből érhető el.
Figyelmeztető kódok
Figyelmeztető kód | Indok |
---|---|
NU1900 | Hiba történt a csomagforrással való kommunikáció során, miközben biztonsági résinformációkat kapott. |
NU1901 | Alacsony súlyosságú csomag észlelve |
NU1902 | Közepes súlyosságú csomag észlelve |
NU1903 | Nagy súlyosságú csomag észlelve |
NU1904 | Kritikus súlyosságú csomag észlelve |
NU1905 | A naplózási forrás nem biztosít biztonságirés-adatbázist |
Testre szabhatja a buildet, hogy a figyelmeztetéseket hibaként kezelje, vagy ne hibaként kezelje.
Ha például már használja <TreatWarningsAsErrors>
az összes (C#, NuGet, MSBuild stb.) figyelmeztetés hibaként való kezelését, azzal <WarningsNotAsErrors>$(WarningsNotAsErrors);NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors>
megakadályozhatja, hogy a jövőben felfedezett biztonsági rések feltörik a buildet.
Ha az alacsony és közepes biztonsági réseket figyelmeztetésként szeretné tartani, de a magas és kritikus biztonsági réseket hibaként szeretné kezelni, és nem használja TreatWarningsAsErrors
, használhatja <WarningsAsErrors>$(WarningsAsErrors);NU1903;NU1904</WarningsAsErrors>
.
Megjegyzés:
Az MSBuild tulajdonságai, mint például NoWarn
és TreatWarningsAsErrors
, nem támogatottak a packages.config projektek üzenet súlyosságához.
Biztosítsa a naplózott projektek visszaállítását
A NuGet az MSBuild 17.13 és a .NET 9.0.200 verzióban hozzáadott kimeneti tulajdonságokat, mint például RestoreProjectCount
, RestoreSkippedCount
és RestoreProjectsAuditedCount
a visszaállítási feladat során.
Ezt felhasználhatja annak biztosítására, hogy az ellenőrzés a visszaállítás során megtörténjen.
Vegye figyelembe, hogy ezek a kimeneti tulajdonságok statikus gráf-visszaállítással nem érhetők el.
Mivel az MSBuild egy szkriptnyelv, ez számos különböző módon érhető el, de ugyanazokra a korlátozásokra is vonatkozik, mint az MSBuild. Ilyen például a Directory.Solution.targets fájl létrehozása ugyanabban a könyvtárban, mint a megoldásfájl, amelynek tartalma az alábbihoz hasonló cél. Vegye figyelembe, hogy a Directory.Build.props gyakran használatos, de projektek importálják. A NuGet visszaállítási célja és feladata azonban a megoldás szintjén fut, ezért az MSBuild megoldás-bővíthetőségi fájljában kell lennie, nem pedig a projekt-/buildfájlban.
<Project>
<Target Name="AssertRestoreTaskOutputProperties"
AfterTargets="Restore"
Condition="'$(CI)' == 'true'">
<Error
Condition="'$(RestoreProjectsAuditedCount)' != '$(RestoreProjectCount)'"
Text=""Restore did not audit every project in the solution. Expected: $(RestoreProjectCount) Found: $(RestoreProjectsAuditedCount)"" />
</Target>
</Project>
A használati esettől függően előfordulhat, hogy a hibaüzenetben szereplő feltételt '$(RestoreProjectCount)' != '$([MSBuild::Add($(RestoreProjectsAuditedCount), $(RestoreSkippedCount))'
szeretné használni azoknak a projekteknek a figyelembe vételéhez, amelyek azért hagyták ki a visszaállítást, mert azok már naprakészek voltak.
Hasonlóképpen gondolja át, hogy azt szeretné-e, hogy ez a hiba mindenhol, vagy csak a CI-folyamatokban történjen, és hogy milyen környezeti változók vannak definiálva a CI-környezetben, és ezt vegye figyelembe a cél állapotában.
Mivel az MSBuild egy szkriptnyelv, bármelyik funkciójával tetszés szerint testre szabhatja az adattárat.
Az MSBuild metaprojjának és binlogjainak megtekintése hasznos megoldásszintű célok fejlesztéséhez és hibaelhárításához.
dotnet list package --vulnerable
A projekt sikeres visszaállítása dotnet list package
után egy --vulnerable
argumentum alapján szűrheti a csomagokat az ismert biztonsági rések alapján.
Vegye figyelembe, hogy --include-transitive
ez nem alapértelmezett, ezért érdemes belefoglalni.
Ismert biztonsági résekkel rendelkező csomagok jelentésekor végrehajtandó műveletek
Van egy blogbejegyzésünk is, amely bemutatja az általunk javasolt módszert arra az esetre, ha a projekt egy ismert sebezhetőséget tartalmazó csomagot használna, valamint ismertet eszközöket, amelyek segítenek további információk beszerzésében.
Biztonsági rések találhatók a frissítésekkel
Ha biztonsági réseket talál, és frissítések érhetők el a csomaghoz, a következő lehetőségek közül választhat:
- Szerkessze a
.csproj
vagy a másik csomagverzió helyét (Directory.Packages.props
) egy újabb, biztonsági javítást tartalmazó verzióval. - Az egyes csomagok frissítéséhez használja a NuGet csomagkezelő felhasználói felületét a Visual Studióban.
- Futtassa a
dotnet add package
parancsot a megfelelő csomagazonosítóval a legújabb verzióra való frissítéshez.
Tranzitív csomagok
Ha egy ismert biztonsági rés található egy legfelső szintű csomag tranzitív függőségeiben, a következő lehetőségek közül választhat:
- Adja hozzá a rögzített csomagverziót közvetlen csomaghivatkozásként. Jegyzet: Mindenképpen távolítsa el ezt a hivatkozást, ha egy új csomagverzió-frissítés elérhetővé válik, és ügyeljen arra, hogy a várt viselkedéshez tartsa fenn a megadott attribútumokat.
- Használja a Központi csomagkezelést a tranzitív rögzítési funkcióval.
- Tiltsa le a tanácsadást , amíg meg nem oldható.
- A frissítés kéréséhez jelentsen egy hibát a csomag fő nyomkövetőjében.
Frissítések nélkül talált biztonsági rések
Ha egy biztonsági javítás nélküli csomagban ismert biztonsági rés található, az alábbiakat teheti meg.
- Ellenőrizze, hogy vannak-e enyhítő tényezők a tanácsadói jelentésben.
- Használjon javasolt csomagot, ha a csomag elavultként van megjelölve, vagy elhagyva van.
- Ha a csomag nyílt forráskódú, fontolja meg a javítást.
- Jelentsen be egy hibát a csomag hibakövető rendszerében.
Enyhítő tényezők ellenőrzése
Vizsgálja át a biztonsági tanácsadót, hogy vannak-e olyan enyhítő tényezők, amelyek lehetővé teszik a csomag továbbra is biztonsági rés mellett történő használatát. A biztonsági rés csak akkor létezhet, ha a kódot egy adott keretrendszeren, operációs rendszeren vagy egy speciális függvényen használják.
Javasolt csomag használata
Abban az esetben, ha biztonsági tanácsadást jelentenek a használt csomaghoz, és a csomag elavultnak vagy elhagyatottnak tűnik, fontolja meg a csomag szerzője által deklarált javasolt alternatív csomag vagy a hasonló funkciókból álló, karbantartott csomag használatát.
Javítás hozzáadása
Ha nem áll rendelkezésre javítás a biztonsági figyelmeztetéshez, érdemes javasolni olyan módosításokat, amelyek megoldják a biztonsági rés problémáját a csomag nyílt forráskódú adattárában található lekérési kérelemben, vagy lépjen kapcsolatba a szerzővel a NuGet.org csomag részleteinek oldalán található Contact owners
szakaszon keresztül.
Probléma megnyitása
Ha nem szeretné kijavítani a biztonsági rést, vagy nem tudja frissíteni vagy lecserélni a csomagot, nyisson meg egy hibát a csomag problémakövetőjében vagy az előnyben részesített kapcsolatfelvételi módszerben.
A(z) NuGet.org-on navigálhat a csomag részleteinek oldalára és kattinthat a Report package
-ra, amely segítségével kapcsolatba léphet a szerzővel.
Nem találhatók biztonsági rések
Ha nem találhatók biztonsági rések, ez azt jelenti, hogy az ismert biztonsági réseket tartalmazó csomagok nem találhatók a csomagdiagramon az ellenőrzés pillanatában.
Mivel a tanácsadó adatbázis bármikor frissíthető, javasoljuk, hogy rendszeresen ellenőrizze a kimenetet dotnet restore
, és biztosítsa ugyanezt a folyamatos integrációs folyamat során.
Összefoglalás
A biztonsági naplózási funkciók kulcsfontosságúak a szoftverprojektek biztonságának és integritásának fenntartásához. Ezek a funkciók további védelmi réteget biztosítanak a biztonsági rések ellen, és biztosítják, hogy megbízhatóan használhat nyílt forráskódú csomagokat.