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.

  1. Komut satırında projenize veya çözüm dizininize gidin.
  2. Tercih ettiğiniz araçları (dotnet, MSBuild, NuGet.exe, VisualStudio vb.) kullanarak çalıştırın restore .
  3. 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 allayarlayabilirsiniz. NuGetAuditMode packages.config projeleri için geçerli değildir
NuGetAuditLevel Iowa low, moderate, highve critical Rapor için en düşük önem düzeyi. , highve critical önerilerini (hariç) lowgörmek moderateisterseniz, 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 alldeğ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 TreatWarningsAsErrorskullanabilirsiniz <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.