Güvenlik açıkları için paket bağımlılıklarını denetleme
Güvenlik denetimleri hakkında
NuGet gibi paket yöneticileri için güvenlik denetimi, bir yazılım projesine dahil edilen paketlerin güvenliğini analiz etmeyi içeren bir işlemdir. Bu, güvenlik açıklarını tanımlamayı, riskleri değerlendirmeyi ve güvenliği geliştirmeye yönelik önerilerde bulunmayı içerir. Denetim, paketlerin gözden geçirilmesinin yanı sıra bağımlılıkları ve bunların ilişkili risklerini içerebilir. Denetimin amacı, kod ekleme veya siteler arası betik saldırıları gibi saldırganlar tarafından kötüye kullanılabilecek güvenlik açıklarını belirlemek ve azaltmaktır.
Ayrıca, projeniz tarafından bilinen bir güvenlik açığına sahip bir paket kullanıldığında eylem gerçekleştirmeye yönelik önerilen yöntemimizi ve daha fazla bilgi almaya yardımcı olacak araçları ele alan bir blog gönderimiz var.
Özellik kullanılabilirliği
NuGet | .NET SDK | Visual Studio | Özellik |
---|---|---|---|
5.9 | .NET 5 SDK (5.0.200) | Yok | dotnet list package --vulnerable |
6.8 | .NET 8 SDK (8.0.100) | Visual Studio 2022 17.8 | PackageReference için NuGetAudit |
6.10 | Yok | Visual Studio 2022 17.10 | packages.config için NuGetAudit |
6.11 | .NET 8 SDK (8.0.400) | Visual Studio 2022 17.11 | PackageReference için NuGetAuditSuppress |
6.12 | .NET 9 SDK (9.0.100) | Visual Studio 2022 17.12 | Denetim kaynakları. packages.config için NuGetAuditSuppress . |
ile güvenlik denetimi çalıştırma restore
Projeyi restore
ilk kez yükleme, yeni paket ekleme, paket sürümünü güncelleştirme veya sık kullandığınız IDE'de projenizden paket kaldırma gibi ortak bir paket işlemi yaptığınızda komut otomatik olarak çalıştırılır.
Bağımlılıklarınız, denetim kaynaklarınız tarafından sağlanan bilinen güvenlik açıkları listesine göre denetleniyor.
- Komut satırında projenize veya çözüm dizininize gidin.
- Tercih ettiğiniz araçları (dotnet, MSBuild, NuGet.exe, VisualStudio vb.) kullanarak çalıştırın
restore
. - Uyarıları gözden geçirin ve bilinen güvenlik açıklarını giderin.
NuGet Denetimini Yapılandırma
Denetim, projenizin bir parçası olarak değerlendirilen bir .csproj
veya MSBuild dosyasındaki MSBuild özellikleri aracılığıyla yapılandırılabilir.
Denetimin depo düzeyinde yapılandırılması önerilir.
MSBuild Özelliği | Varsayılan | Olası değerler | Notlar |
---|---|---|---|
NuGetAuditMode | tümü (1) | direct ve all |
Hem üst düzey hem de geçişli bağımlılıkları denetlemek isterseniz, değerini olarak all ayarlayabilirsiniz. NuGetAuditMode packages.config projeleri için geçerli değildir |
NuGetAuditLevel | Iowa | low , moderate , high ve critical |
Rapor için en düşük önem düzeyi. , high ve critical önerilerini (hariç) low görmek moderate isterseniz, değerini olarak ayarlayınmoderate |
NuGetAudit | true | true ve false |
Güvenlik denetimi raporlarını almak istemiyorsanız, değerini olarak ayarlayarak deneyimi tamamen geri çevirebilirsiniz false |
(1) NuGetAuditMode varsayılan olarak direct
.NET 8.0.100 SDK ve VS 17.8'de kullanıma sunulduğunda olarak belirlenmiştir. .NET 9.0.100 SDK ve VS 17.12'de varsayılan olarak all
değiştirildi.
Denetim Kaynakları
Geri yükleme, her projenin kullandığı paket listesini denetlemek için bir sunucunun VulnerabilityInfo
kaynağını indirir.
Kaynak listesi NuGet.Config öğesi tarafından auditSources
tanımlanır ve denetim kaynaklarından herhangi biri güvenlik açığı bilgisi sağlamazsa NU1905 uyarısı oluşturulur.
Tanımlanmamışsa veya herhangi bir kaynak eklemeden temizlenmişse auditSources
kullanılır packageSources
ve NU1905 uyarısı gösterilmez.
Paket değiştirme saldırılarının yaygın bir azaltması, nuget.org yukarı akış sağlayan tek bir paket kaynağı kullanmak olduğundan, NuGet nuget.org paket kaynağı olarak kullanacak şekilde yapılandırılmadığından, denetim kaynakları nuget.org (veya güvenlik açığı bilgilerini sağlayan başka bir kaynağı) paket kaynağı olarak kullanmadan kullanmak için kullanılabilir.
nuget.org'un güvenlik açığı veritabanı için veri kaynağı GitHub Danışmanlık Veritabanı'dır. V2 protokolünüzün kullanım dışı bırakıldığını unutmayın; dolayısıyla nuget.config'iniz hala V2 uç noktasını kullanıyorsa V3 uç noktasına geçmeniz gerekir.
<configuration>
<auditSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</auditSources>
</configuration>
Denetim kaynakları NuGet 6.12, .NET 9.0.100 SDK ve Visual Studio 2022 17.12'den kullanılabilir.
Bu sürümden önce NuGet Denetimi, güvenlik açığı bilgilerini indirmek için yalnızca paket kaynaklarını kullanır.
Denetim kaynakları şu anda tarafından dotnet list package --vulnerable
kullanılmaz.
Danışmanları dışlama
Her öneri için yeni NuGetAuditSuppress
bir MSBuild öğesi ekleyerek belirli önerileri denetim raporundan dışlama seçeneğini belirleyebilirsiniz.
Meta verilerin gizlenmek Include=
istediğiniz öneri URL'sine ayarlandığı bir NuGetAuditSuppress
öğe tanımlayın.
<ItemGroup>
<NuGetAuditSuppress Include="https://github.com/advisories/XXXX" />
</ItemGroup>
Diğer NuGet denetim yapılandırma özelliklerine benzer şekilde, NuGetAuditSuppress
öğeler proje veya depo düzeyinde tanımlanabilir.
NuGetAuditSuppress
, NuGet 6.11, Visual Studio 17.11 ve .NET 8.0.400 SDK'sından başlayarak PackageReference projeleri için kullanılabilir.
Visual Studio 17.12 ve NuGet 6.12'den packages.config için kullanılabilir.
Uyarı kodları
Uyarı Kodu | Nedeni |
---|---|
NU1900 | Güvenlik açığı bilgileri alınırken paket kaynağıyla iletişim kurulurken hata oluştu. |
NU1901 | Düşük önem derecesi algılanan paket |
NU1902 | Orta önem derecesinde paket algılandı |
NU1903 | Yüksek önem derecesi algılanan paket |
NU1904 | Kritik önem derecesi algılanan paket |
NU1905 | Denetim kaynağı güvenlik açığı veritabanı sağlamaz |
Derlemenizi özelleştirerek bu uyarıları hata olarak değerlendirerek uyarıları hata olarak değerlendirebilir veya uyarıları hata olarak değil olarak değerlendirebilirsiniz.
Örneğin, zaten tüm (C#, NuGet, MSBuild, vb.) uyarıları hata olarak işlemek için kullanıyorsanız <TreatWarningsAsErrors>
, gelecekte keşfedilen güvenlik açıklarının derlemenizi bozmasını önlemek için kullanabilirsiniz <WarningsNotAsErrors>NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors>
.
Alternatif olarak, düşük ve orta düzeydeki güvenlik açıklarını uyarı olarak tutmak, ancak yüksek ve kritik güvenlik açıklarını hata olarak ele almak ve kullanmıyorsanız TreatWarningsAsErrors
kullanabilirsiniz <WarningsAsErrors>NU1903;NU1904</WarningsAsErrors>
.
Not
gibi NoWarn
TreatWarningsAsErrors
ileti önem derecelerine yönelik MSBuild özellikleri packages.config projeleri için desteklenmez.
dotnet list package --vulnerable
Bir proje başarıyla geri yüklendikten sonra, dotnet list package
hangi paketlerin bilinen güvenlik açıklarına sahip olduğuna göre paketleri filtrelemeye yönelik bir --vulnerable
bağımsız değişkeni vardır.
--include-transitive
Varsayılan olmadığını, bu nedenle eklenmesi gerektiğini unutmayın
Bilinen güvenlik açıklarına sahip paketler bildirildiğinde eylemler
Ayrıca, projeniz tarafından bilinen bir güvenlik açığına sahip bir paket kullanıldığında eylem gerçekleştirmeye yönelik önerilen yöntemimizi ve daha fazla bilgi almaya yardımcı olacak araçları ele alan bir blog gönderimiz var.
Güncelleştirmelerle birlikte bulunan güvenlik açıkları
Güvenlik açıkları bulunursa ve paket için güncelleştirmeler varsa şunlardan birini yapabilirsiniz:
.csproj
veya diğer paket sürümü konumunu (Directory.Packages.props
) güvenlik düzeltmesi içeren daha yeni bir sürümle düzenleyin.- Tek tek paketi güncelleştirmek için Visual Studio'daki NuGet paket yöneticisi kullanıcı arabirimini kullanın.
- En son sürüme
dotnet add package
güncelleştirmek için ilgili paket kimliğiyle komutunu çalıştırın.
Geçişli Paketler
En üst düzey paketin geçişli bağımlılıklarında bilinen bir güvenlik açığı varsa şu seçeneklere sahipsiniz:
- Sabit paket sürümünü doğrudan paket başvurusu olarak ekleyin. Not: Yeni bir paket sürümü güncelleştirmesi kullanılabilir olduğunda bu başvuruyu kaldırdığınızdan ve beklenen davranış için tanımlı öznitelikleri koruduğunuzdan emin olun.
- Geçişli sabitleme işleviyle Merkezi Paket Yönetimi'ni kullanın.
- Çözümlenebilene kadar öneriyi gizleme.
- Güncelleştirme istemek için üst düzey paketin izleyicisinde bir sorun oluşturun.
Güncelleştirme olmadan bulunan güvenlik açıkları
Güvenlik düzeltmesi olmayan bir pakette bilinen bir güvenlik açığının mevcut olması durumunda aşağıdakileri yapabilirsiniz.
- Danışmanlık raporunda özetlenen risk azaltma faktörlerini denetleyin.
- Paket kullanım dışı olarak işaretlendiyse veya bırakıldıysa önerilen bir paket kullanın.
- Paket açık kaynak bir düzeltme eklemeyi göz önünde bulundurun.
- Paketin sorun izleyicisinde bir sorun açın.
Azaltıcı faktörleri denetleme
Güvenlik açığıyla birlikte paketi kullanmaya devam etmenizi sağlayacak tüm azaltıcı faktörler için güvenlik danışmanını gözden geçirin. Güvenlik açığı yalnızca kod belirli bir çerçevede, işletim sisteminde veya özel bir işlev çağrıldığında mevcut olabilir.
Önerilen paketi kullanma
Kullandığınız paket için bir güvenlik önerisi bildirilirse ve paket kullanım dışı olarak işaretlenirse veya kullanımdan kaldırılmış gibi görünürse, paket yazarının bildirdiği önerilen alternatif paketi veya korunan benzer işlevlerden oluşan bir paketi kullanmayı göz önünde bulundurun.
Düzeltmeye katkıda bulunma
Güvenlik önerisi için bir düzeltme yoksa, paketin açık kaynak deposundaki bir çekme isteğindeki güvenlik açığını gideren değişiklikler önermek veya NuGet.org paketi ayrıntı sayfasındaki bölüm aracılığıyla Contact owners
yazara başvurmak isteyebilirsiniz.
Sorun açma
Güvenlik açığını düzeltmek istemiyorsanız veya paketi güncelleştiremiyor veya değiştiremiyorsanız, paketin sorun izleyicisinde veya tercih edilen iletişim yönteminde bir sorun açın.
NuGet.org, paket ayrıntıları sayfasına gidebilir ve yazarla iletişim kurmanız için size yol gösterecek olan seçeneği tıklatabilirsiniz Report package
.
Güvenlik açığı bulunamadı
Herhangi bir güvenlik açığı bulunmazsa, bu, denetlediğiniz şu anda paket grafiğinizde bilinen güvenlik açıklarına sahip paketlerin bulunamadığını gösterir.
Danışmanlık veritabanı herhangi bir zamanda güncelleştirilebildiğinden, sürekli tümleştirme sürecinizde çıkışınızı düzenli olarak denetlemenizi dotnet restore
ve aynı işlemi yapmanızı öneririz.
Özet
Güvenlik denetimi özellikleri, yazılım projelerinin güvenliğini ve bütünlüğünü korumak için çok önemlidir. Bu özellikler, güvenlik açıklarına karşı ek bir koruma katmanı sağlar ve açık kaynak paketlerini güvenle kullanabilmenizi sağlar.