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.
- Pada baris perintah, navigasikan ke proyek atau direktori solusi Anda.
- Jalankan
restore
menggunakan alat pilihan Anda (yaitu dotnet, MSBuild, NuGet.exe, VisualStudio dll). - 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 , , high dan 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.