稽核安全性弱點的套件相依性
NuGet 等套件管理員的安全性稽核是一個程式,涉及分析軟體專案中所含套件的安全性。 這包括識別弱點、評估風險,以及提出改善安全性的建議。 稽核可以包含套件本身的檢閱,以及任何相依性及其相關聯的風險。 稽核的目標是要識別並減輕攻擊者可能利用的任何安全性弱點,例如程式代碼插入或跨網站腳本攻擊。
我們也有一篇 部落格文章 ,其中討論在發現已知弱點的套件可供您的專案使用時採取動作的建議方法,以及協助取得詳細資訊的工具。
NuGet (英文) | .NET SDK | Visual Studio | 功能 |
---|---|---|---|
5.9 | .NET 5 SDK (5.0.200) | N/A | dotnet list package --vulnerable |
6.8 | .NET 8 SDK (8.0.100) | Visual Studio 2022 17.8 | PackageReference 的 NuGetAudit |
6.10 | N/A | Visual Studio 2022 17.10 | packages.config 的 NuGetAudit |
6.11 | .NET 8 SDK (8.0.400) | Visual Studio 2022 17.11 | PackageReference 的 NuGetAuditSuppress |
6.12 | .NET 9 SDK (9.0.100) | Visual Studio 2022 17.12 | 稽核來源。 packages.config 的 NuGetAuditSuppress 。 |
當您 restore
第一次載入專案、新增套件、更新套件版本,或從您慣用 IDE 中的專案移除套件時,命令會自動執行。
系統會根據稽 核來源所提供的已知弱點清單來檢查您的相依性。
- 在命令行上,流覽至您的專案或方案目錄。
restore
使用您慣用的工具執行 (例如 dotnet、MSBuild、NuGet.exe、VisualStudio 等)。- 檢閱警告並解決已知的安全性弱點。
稽核可以透過專案中的 .csproj
MSBuild 屬性來設定,或評估為專案的 MSBuild 檔案。
建議您在存放庫層級設定稽核。
MSBuild 屬性 | 預設 | 可能值 | 備註 |
---|---|---|---|
NuGetAuditMode | 全部 | direct 和 all |
如果您要只稽核最上層相依性,您可以將值設定為 direct 。 NuGetAuditMode 不適用於 packages.config 專案。 |
NuGetAuditLevel | 愛荷華州 | low 、moderate 、high 和 critical |
要報告的最小嚴重性層級。 如果您想要查看 moderate 、 high 和 critical 諮詢 (排除 low ),請將值設定為 moderate |
NuGetAudit | true | true 和 false |
如果您想要不收到安全性稽核報告,您可以將值設定為 ,以完全退出體驗 false |
注意:在 .NET 8 中,NuGetAuditMode 的預設值為 direct
。
因此,將 SdkAnalysisLevel 設定為8.0.400
據以變更 NuGetAuditMode 的預設值。
還原會下載伺服器 VulnerabilityInfo
的資源 ,以檢查每個專案所使用的套件清單。
來源清單是由 NuGet.Config 中的 元素所定義,如果有任何稽核來源未提供任何弱點資訊,就會引發警告 NU1905。auditSources
如果未 auditSources
定義或清除但未新增任何來源, packageSources
則會使用 ,並隱藏NU1905警告。
由於套件替代攻擊的常見緩和措施是 使用從 nuget.org 上游上游的單一套件來源,因此 NuGet 未設定為使用 nuget.org 作為套件來源,因此稽核來源可用來使用 nuget.org(或任何其他提供弱點資訊的來源),而不使用它作為套件來源。
nuget.org 弱點資料庫的數據源是 GitHub Advisory Database。 請注意, V2 通訊協定已被取代,因此,如果您的 nuget.config 仍在使用 V2 端點,您必須移轉至 V3 端點。
<configuration>
<auditSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</auditSources>
</configuration>
稽核來源可從 NuGet 6.12、.NET 9.0.100 SDK 和 Visual Studio 2022 17.12 取得。
在此版本之前,NuGet 稽核只會使用套件來源來下載弱點資訊。
目前不會使用 dotnet list package --vulnerable
稽核來源。
您可以選擇為每個諮詢新增 NuGetAuditSuppress
MSBuild 專案,以排除稽核報告中的特定諮詢。
定義專案 NuGetAuditSuppress
,並將 Include=
元數據設定為您想要隱藏的諮詢 URL。
<ItemGroup>
<NuGetAuditSuppress Include="https://github.com/advisories/XXXX" />
</ItemGroup>
類似於其他 NuGet 稽核組態屬性, NuGetAuditSuppress
專案可以在專案或存放庫層級定義。
NuGetAuditSuppress
從 NuGet 6.11、Visual Studio 17.11 和 .NET 8.0.400 SDK 開始,適用於 PackageReference 專案。
它適用於 Visual Studio 17.12 和 NuGet 6.12 的 packages.config。
警告碼 | 原因 |
---|---|
NU1900 | 與套件來源通訊時發生錯誤,同時取得弱點資訊。 |
NU1901 | 偵測到低嚴重性套件 |
NU1902 | 偵測到中度嚴重性套件 |
NU1903 | 偵測到高嚴重性套件 |
NU1904 | 偵測到嚴重性套件 |
NU1905 | 稽核來源不提供弱點資料庫 |
您可以自定義組建,將這些警告視為錯誤 ,將警告視為錯誤,或將警告視為錯誤。
例如,如果您已經使用 <TreatWarningsAsErrors>
將所有 (C#、NuGet、MSBuild 等) 警告視為錯誤,您可以使用 <WarningsNotAsErrors>$(WarningsNotAsErrors);NU1901;NU1902;NU1903;NU1904</WarningsNotAsErrors>
來防止未來探索到的弱點中斷組建。
或者,如果您想要將低度和中度弱點保留為警告,但將高和嚴重弱點視為錯誤,而且您不使用 TreatWarningsAsErrors
,您可以使用 <WarningsAsErrors>$(WarningsAsErrors);NU1903;NU1904</WarningsAsErrors>
。
注意
packages.config 專案不支援訊息嚴重性之 MSBuild 屬性,例如 NoWarn
和 TreatWarningsAsErrors
。
成功還原項目之後,具有自--vulnerable
變數,dotnet list package
可根據哪些套件有已知的弱點來篩選套件。
請注意, --include-transitive
不是預設值,因此應該包含。
我們也有一篇 部落格文章 ,其中討論在發現已知弱點的套件可供您的專案使用時採取動作的建議方法,以及協助取得詳細資訊的工具。
如果找到安全性弱點,且套件有可用的更新,您可以:
.csproj
使用包含安全性修正的較新版本來編輯 或其他套件版本位置 。Directory.Packages.props
。- 使用 Visual Studio 中的 NuGet 套件管理員使用者介面來更新個別套件。
dotnet add package
使用個別套件識別碼執行 命令,以更新至最新版本。
如果最上層套件的可轉移相依性中存在已知的弱點,您有下列選項:
- 將固定套件版本新增為直接套件參考。 注意: 當新的套件版本更新可供使用時,請務必移除此參考,並務必維護預期行為的已定義屬性。
- 使用 中央套件管理搭配可轉移的釘選功能。
- 隱藏諮詢 ,直到可以加以解決為止。
- 在最上層套件的追蹤器中提出問題,以要求更新。
如果已知弱點存在於沒有安全性修正的套件中,您可以執行下列動作。
- 檢查諮詢報告中概述的任何緩和因素。
- 如果套件標示為已過時或已放棄,請使用建議的套件。
- 如果套件 開放原始碼,請考慮提供修正。
- 在套件的問題追蹤器中開啟問題。
檢閱安全性建議程式,以取得任何可能允許您繼續使用套件與弱點的緩和因素。 只有在呼叫特定架構、操作系統或特殊函式上使用程式代碼時,才會存在此弱點。
針對您使用的套件回報安全性諮詢,且套件標示為已被取代或似乎已放棄,請考慮使用套件作者所宣告的任何建議替代套件,或包含維護類似功能的套件。
如果安全性諮詢的修正不存在,您可能會想要建議變更,以解決套件 開放原始碼 存放庫提取要求中的弱點,或透過 Contact owners
NuGet.org 套件詳細數據頁面上的 區段連絡作者。
如果您不想修正弱點或無法更新或取代套件,請在套件的問題追蹤器或慣用的連絡方法中開啟問題。
在 NuGet.org 上,您可以瀏覽至套件詳細數據頁面,然後按兩下 Report package
將引導您與作者連絡。
如果找不到任何安全性弱點,這表示您目前檢查的套件圖形中找不到具有已知弱點的套件。
由於諮詢資料庫可以隨時更新,因此建議您定期檢查您的 dotnet restore
輸出,並確保持續整合程式中相同。
安全性稽核功能對於維護軟體專案的安全性和完整性至關重要。 這些功能提供額外的保護層,防範安全性弱點,並確保您可以放心地使用 開放原始碼 套件。