Bagikan melalui


Mengaudit dependensi paket untuk kerentanan keamanan

Tentang audit keamanan

Audit keamanan untuk manajer paket seperti NuGet adalah proses yang melibatkan analisis keamanan paket yang disertakan dalam proyek perangkat lunak. Ini melibatkan mengidentifikasi kerentanan, mengevaluasi risiko, dan membuat rekomendasi untuk meningkatkan keamanan. Audit dapat mencakup tinjauan paket itu sendiri, serta dependensi apa pun dan risiko terkaitnya. Tujuan audit adalah untuk mengidentifikasi dan mengurangi kerentanan keamanan apa pun yang dapat dieksploitasi oleh penyerang, seperti injeksi kode atau serangan pembuatan skrip lintas situs.

Kami juga memiliki posting blog yang membahas metode yang direkomendasikan untuk mengambil tindakan ketika paket dengan kerentanan yang diketahui ditemukan digunakan oleh proyek Anda, dan alat untuk membantu mendapatkan informasi lebih lanjut.

Ketersediaan fitur

NuGet .NET SDK Visual Studio Fitur
5.9 .NET 5 SDK (5.0.200) T/A dotnet list package --vulnerable
6.8 .NET 8 SDK (8.0.100) Visual Studio 2022 17.8 NuGetAudit untuk PackageReference
6.10 T/A Visual Studio 2022 17.10 NuGetAudit untuk packages.config
6.11 .NET 8 SDK (8.0.400) Visual Studio 2022 17.11 NuGetAuditSuppress untuk PackageReference
6.12 .NET 9 SDK (9.0.100) Visual Studio 2022 17.12 Sumber audit. NuGetAuditSuppress untuk packages.config.

Menjalankan audit keamanan dengan restore

Perintah restore secara otomatis berjalan ketika Anda melakukan operasi paket umum seperti memuat proyek untuk pertama kalinya, menambahkan paket baru, memperbarui versi paket, atau menghapus paket dari proyek Anda di IDE favorit Anda. Dependensi Anda diperiksa terhadap daftar kerentanan yang diketahui yang disediakan oleh sumber audit Anda.

  1. Pada baris perintah, navigasikan ke proyek atau direktori solusi Anda.
  2. Jalankan restore menggunakan alat pilihan Anda (yaitu dotnet, MSBuild, NuGet.exe, VisualStudio dll).
  3. Tinjau peringatan dan atasi kerentanan keamanan yang diketahui.

Mengonfigurasi Audit NuGet

Audit dapat dikonfigurasi melalui properti MSBuild dalam .csproj file atau MSBuild yang dievaluasi sebagai bagian dari proyek Anda. Kami menyarankan agar audit dikonfigurasi pada tingkat repositori.

Properti MSBuild Default Nilai yang dapat dipakai Catatan
NuGetAuditMode langsung direct dan all Jika Anda hanya ingin mengaudit dependensi tingkat atas, Anda dapat mengatur nilai ke direct. NuGetAuditMode tidak berlaku untuk proyek packages.config.
NuGetAuditLevel rendah low, moderate, high, dan critical Tingkat keparahan minimum untuk dilaporkan. Jika Anda ingin melihat moderate, , highdan critical saran (kecualikan low), atur nilai ke moderate
NuGetAudit benar true dan false Jika Anda ingin tidak menerima laporan audit keamanan, Anda dapat menolak pengalaman sepenuhnya dengan mengatur nilai ke false

Sumber Audit

Pemulihan mengunduh sumber dayaVulnerabilityInfo untuk memeriksa daftar paket yang digunakan setiap proyek. Daftar sumber didefinisikan oleh auditSources elemen di NuGet.Config, dan peringatan NU1905 dimunculkan jika salah satu sumber audit tidak memberikan info kerentanan apa pun. Jika auditSources tidak didefinisikan atau dibersihkan tanpa menambahkan sumber apa pun, maka packageSources akan digunakan dan peringatan NU1905 ditekan.

Karena mitigasi umum untuk serangan penggantian paket adalah menggunakan satu sumber paket yang upstream dari nuget.org, sehingga NuGet tidak dikonfigurasi untuk menggunakan nuget.org sebagai sumber paket, sumber audit dapat digunakan untuk menggunakan nuget.org (atau sumber lain yang menyediakan informasi kerentanan) tanpa juga menggunakannya sebagai sumber paket.

Sumber data untuk database kerentanan nuget.org adalah GitHub Advisory Database. Perhatikan bahwa protokol V2 tidak digunakan lagi, jadi jika nuget.config Anda masih menggunakan titik akhir V2, Anda harus bermigrasi ke titik akhir V3.

<configuration>
    <auditSources>
        <clear />
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    </auditSources>
</configuration>

Sumber audit tersedia dari NuGet 6.12, .NET 9.0.100 SDK, dan Visual Studio 2022 17.12. Sebelum versi ini, Audit NuGet hanya akan menggunakan sumber paket untuk mengunduh informasi kerentanan. Sumber audit tidak digunakan oleh dotnet list package --vulnerable saat ini.

Mengecualikan saran

Anda dapat memilih untuk mengecualikan saran tertentu dari laporan audit dengan menambahkan item MSBuild baru NuGetAuditSuppress untuk setiap saran. NuGetAuditSuppress Tentukan item dengan metadata yang Include= diatur ke URL penasihat yang ingin Anda tekan.

<ItemGroup>
    <NuGetAuditSuppress Include="https://github.com/advisories/XXXX" />
</ItemGroup>

Mirip dengan properti konfigurasi audit NuGet lainnya, NuGetAuditSuppress item dapat ditentukan di tingkat proyek atau repositori.

NuGetAuditSuppress tersedia untuk proyek PackageReference mulai dari NuGet 6.11, Visual Studio 17.11, dan .NET 8.0.400 SDK. Ini tersedia untuk packages.config dari Visual Studio 17.12 dan NuGet 6.12.

Kode peringatan

Kode Peringatan Alasan
NU1900 Kesalahan berkomunikasi dengan sumber paket, saat mendapatkan informasi kerentanan.
NU1901 Paket dengan tingkat keparahan rendah terdeteksi
NU1902 Paket dengan tingkat keparahan sedang terdeteksi
NU1903 Paket dengan tingkat keparahan tinggi terdeteksi
NU1904 Paket dengan tingkat keparahan kritis terdeteksi
NU1905 Sumber audit tidak menyediakan database kerentanan

Anda dapat menyesuaikan build Anda untuk memperlakukan peringatan ini sebagai kesalahan untuk memperlakukan peringatan sebagai kesalahan, atau memperlakukan peringatan bukan sebagai kesalahan. Misalnya, jika Anda sudah menggunakan <TreatWarningsAsErrors> untuk memperlakukan semua peringatan (C#, NuGet, MSBuild, dll) sebagai kesalahan, Anda dapat menggunakan <WarningsNotAsErrors>$(WarningsNotAsErrors);NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors> untuk mencegah kerentanan yang ditemukan di masa mendatang merusak build Anda. Atau, jika Anda ingin menjaga kerentanan rendah dan sedang sebagai peringatan, tetapi memperlakukan kerentanan tinggi dan kritis sebagai kesalahan, dan Anda tidak menggunakan TreatWarningsAsErrors, Anda dapat menggunakan <WarningsAsErrors>$(WarningsAsErrors);NU1903;NU1904</WarningsAsErrors>.

Catatan

Properti MSBuild untuk tingkat keparahan pesan seperti NoWarn dan TreatWarningsAsErrors tidak didukung untuk proyek packages.config.

dotnet list package --vulnerable

Setelah proyek berhasil dipulihkan, dotnet list package memiliki --vulnerable argumen untuk memfilter paket berdasarkan paket mana yang memiliki kerentanan yang diketahui. Perhatikan bahwa --include-transitive itu bukan default, jadi harus disertakan.

Tindakan saat paket dengan kerentanan yang diketahui dilaporkan

Kami juga memiliki posting blog yang membahas metode yang direkomendasikan untuk mengambil tindakan ketika paket dengan kerentanan yang diketahui ditemukan digunakan oleh proyek Anda, dan alat untuk membantu mendapatkan informasi lebih lanjut.

Kerentanan keamanan ditemukan dengan pembaruan

Jika kerentanan keamanan ditemukan dan pembaruan tersedia untuk paket, Anda dapat:

  • .csproj Edit atau lokasi versi paket lainnya (Directory.Packages.props) dengan versi yang lebih baru yang berisi perbaikan keamanan.
  • Gunakan antarmuka pengguna manajer paket NuGet di Visual Studio untuk memperbarui paket individual.
  • Jalankan dotnet add package perintah dengan ID paket masing-masing untuk memperbarui ke versi terbaru.

Paket Transitif

Jika kerentanan yang diketahui ada dalam dependensi transitif paket tingkat atas, Anda memiliki opsi berikut:

  • Tambahkan versi paket tetap sebagai referensi paket langsung. Catatan: Pastikan untuk menghapus referensi ini saat pembaruan versi paket baru tersedia dan pastikan untuk mempertahankan atribut yang ditentukan untuk perilaku yang diharapkan.
  • Gunakan Manajemen Paket Pusat dengan fungsionalitas penyematan transitif.
  • Tekan saran sampai dapat diatasi.
  • Ajukan masalah di pelacak paket tingkat atas untuk meminta pembaruan.

Kerentanan keamanan ditemukan tanpa pembaruan

Jika kerentanan yang diketahui ada dalam paket tanpa perbaikan keamanan, Anda dapat melakukan hal berikut.

  • Periksa faktor mitigasi yang diuraikan dalam laporan penasihat.
  • Gunakan paket yang disarankan jika paket ditandai tidak digunakan lagi atau ditinggalkan.
  • Jika paket sumber terbuka, pertimbangkan untuk memberikan kontribusi perbaikan.
  • Buka masalah di pelacak masalah paket.

Periksa faktor mitigasi

Tinjau penasihat keamanan untuk faktor mitigasi apa pun yang memungkinkan Anda untuk terus menggunakan paket dengan kerentanan. Kerentanan mungkin hanya ada ketika kode digunakan pada kerangka kerja tertentu, sistem operasi, atau fungsi khusus dipanggil.

Menggunakan paket yang disarankan

Jika penasihat keamanan dilaporkan untuk paket yang Anda gunakan dan paket ditandai tidak digunakan lagi atau tampaknya ditinggalkan, pertimbangkan untuk menggunakan paket alternatif yang disarankan yang telah dinyatakan oleh penulis paket atau paket yang terdiri dari fungsionalitas serupa yang dipertahankan.

Berkontribusi perbaikan

Jika perbaikan tidak ada untuk saran keamanan, Anda mungkin ingin menyarankan perubahan yang mengatasi kerentanan dalam permintaan pull pada repositori sumber terbuka paket atau hubungi penulis melalui Contact owners bagian di halaman detail paket NuGet.org.

Buka masalah

Jika Anda tidak ingin memperbaiki kerentanan atau tidak dapat memperbarui atau mengganti paket, buka masalah dalam pelacak masalah paket atau metode kontak pilihan. Pada NuGet.org, Anda dapat menavigasi ke halaman detail paket dan mengklik Report package yang akan memandu Anda untuk menghubungi penulis.

Tidak ditemukan kerentanan keamanan

Jika tidak ada kerentanan keamanan yang ditemukan, ini berarti bahwa paket dengan kerentanan yang diketahui tidak ditemukan dalam grafik paket Anda pada saat ini Anda memeriksa. Karena database penasihat dapat diperbarui kapan saja, sebaiknya periksa output Anda dotnet restore secara teratur dan pastikan hal yang sama dalam proses integrasi berkelanjutan Anda.

Ringkasan

Fitur audit keamanan sangat penting untuk menjaga keamanan dan integritas proyek perangkat lunak. Fitur-fitur ini memberi Anda lapisan perlindungan tambahan terhadap kerentanan keamanan dan memastikan bahwa Anda dapat menggunakan paket sumber terbuka dengan percaya diri.