首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >借助 NuGet Audit 让我们的应用更安全

借助 NuGet Audit 让我们的应用更安全

作者头像
郑子铭
发布于 2025-02-06 05:08:55
发布于 2025-02-06 05:08:55
2530
举报

借助 NuGet Audit 让我们的应用更安全

Intro

这次 .NET Conf China 我分享了一个关于 NuGet Audit 的一个话题 “NuGet Audit 让你的应用更安全” ,之所以分享这个话题,我们公司最近安全部门对我们的系统做安全审计以避免引入有漏洞的依赖来保证我们的系统安全性,而 NuGet Audit(审计)可以帮助我们更好地发现代码中有漏洞的依赖,所以想抛出这个话题希望也能对大家有所帮助

这次分享的内容大概分成四部分

  • 什么是 NuGet Audit
  • 为什么我们需要 NuGet Audit
  • 如何使用配置 NuGet Audit
  • NuGet Audit 后面的一些计划

What

首先我们来看一下什么是 NuGet Audit,在升级到 .NET 8/9 之后,如果你的项目有一些老的 NuGet 包没有升级可能会看到类似下面这样的警告

nuget audit warnings

这里我截了两个 VS 里的截图,中间这个是使用 dotnet-cli 还原 NuGet 包时出现的警告,这个表示引用的 NuGet 包有安全漏洞,可能要升级到新的版本解决。

从下面的两个警告信息里可以看到这里有一个 GitHub 的链接,这个链接打开之后是 GitHub 安全专家们建立的一个安全建议数据库,NuGet Audit 警告信息就是基于 GitHub 的已经经过审核之后的安全建议数据来触发警告的,使用 GitHub 比较多的朋友可能会注意到 Github 有一个 Dependabot 它也是基于这个数据库对用户开源项目提醒安全漏洞风险的。

GitHub Advisory Database

Why

那为什么我们需要这个功能呢?为什么会引入这个功能呢?用一个词来总结就是安全 Security。

在企业运营的过程中会有供应链的概念,产品从一个个零件到加工运输到最后交付到客户手上。

在软件系统中也会有一个软件供应链的概念,一个开源项目可能会被打包分发到世界各地的各个系统中,如果这个开源项目依赖有漏洞那么就会导致很多系统都有安全风险

software-supply-chain

现在有一个词比较流行,这个词就是 “左移” 是什么意思呢,就是说在软件工程和 IT 管理里,要在流程时间线的早期解决任务和问题。看这个图可以看出来源代码和依赖出于最左侧,也就意味着我们注重安全的话应该更加注意这一环节,从源头避免安全漏洞的引入。

对于安全团队来说,从新建项目开始到编写第一行代码开发测试到部署到项目上线运作每个环节都有安全风险,所以我们开发者所在的第一个环节更要注重安全的问题。

security-ops-overview

在我们的项目里相信也肯定会有一些开源项目的依赖,如何能够及时发现系统中的依赖是否有安全漏洞呢?NuGet Audit 就是帮助我们发现安全风险的,我们在还原项目依赖的时候就会可以触发 NuGet Audit 的检查

前两年有一个比较出名的漏洞问题就是 JAVA 里的 log4j 的漏洞,是一个典型的软件供应链安全的例子

因为被使用的比较广泛,之前热议全球,我们公司的安全团队之前也曾要求我们公司检查所有的 JAVA 应用是否有使用 log4j,不知道大家公司有没有 JAVA 应用,有没有受到影响,还是 dotnet 清真哈

log4j boom

How

那我们如何使用 NuGet 的审计呢?Just Upgrade,只需要升级即可

upgrade

.NET 8 引入了 NuGet 审计的支持,.NET 9 引入了更多配置的支持,之后的 .NET 10 中也还会再继续在 NuGet 的审计上投入

今天我们演示的示例是基于 .NET 9 的毕竟我们 .NET 9 已经发布了一个月了,也鼓励大家有条件的话升级到 .NET 9

升级到 .NET 8 之后的版本后,NuGet 审计默认是打开的,如果你的项目只是示例之类的项目不想打开可以通过 NuGetAudit 这个 property 来显式地禁用,这里第一个示例禁用了 NuGet Audit 所以是没有警告的

默认 NuGetAudit 只检查引用的 NuGet 包引用,对于包引用的引用不会检查,这里显式地指定 NuGetAuditModedirect 为了更好的展示,而且示例项目指定了别的配置所以也需要 override 项目中的配置

第三个示例我们指定了一个 NuGetAuditLevelcritical 此时我们发现又没有警告了,因为前面的警告级别是 high 所以我们指定了 critical 时低于这个级别的就不会再警告了,默认是 low,所有的警告都会警告,有需要配置的话可以用这个配置来配

最后一个示例指定了 NuGetAuditModeall,这里可以看到比前面多了一个警告,多了一个没有直接引用的 nuget 包的警告,因为我们显式声明了要检查所有的依赖,即使是间接引用的 NuGet 依赖也会被检查

这里需要注意一下 .NET 9 正式版的第一个 SDK 版本 9.0.100 里默认是 all 但是在上周发布的 9.0.101 版本中默认值又改回了 direct,如果需要设置为 all 需要自己显式的设置一下

NuGet 审计是在还原包时触发的也就是 dotnet restore,而 dotnet build/dotnet publish 默认会触发 dotnet restore 如图所示,不过注意的话注意到 warning 会出现两次,在 GitHub 上提了一个 issue,感兴趣的话大家可以关注一下 https://github.com/dotnet/sdk/issues/45367

dotnet build/publish

默认审计的信息是警告,我们能不能让他变成错误呢,而不是 warning 因为有些朋友不会注意警告,直接变成错误来就能引起大家的注意了,我们可以借助 MSBuild 的特性来将警告信息变成错误,这里展示了两种方式

第一种方式是设置 WarningsAsErrors 可以将需要的 ErrorCode 设置一下将警告变成错误

第二种方式是设置 TreatWarningsAsErrors=true 这种方式会将所有的警告都视为警告,对于项目有质量要求的项目推荐设置,对于某些不想 warning 的可以设置 NoWarn 来排除

warning as error

除了 dotnet restore 的时候可以看有漏洞的依赖我们也可以通过 dotnet list package 来查看,默认不会检查间接依赖,可以通过 --include-transitive 来检查

dotnet list package --vulnerable

这里我们看到我们间接依赖的 NuGet.Common 这个依赖有漏洞,那是哪一个 NuGet 包导致了这个依赖了呢?我们可以通过 .NET 9 中的 dotnet nuget why 命令来检查依赖,这里是一个使用示例,可以看到输出的结果中清晰地表明了是哪一个 package 导致了这个依赖,如果有多个层级依赖也会都列出来

dotnet-nuget-why

对于直接引用的 NuGet 包我们可以直接升级对应 package 的包,对于间接引用的包要怎么修复呢,同样地我们需要引用高版本没有漏洞的依赖,这里推荐大家使用中心化的包版本管理,解决这个问题会变得更简单,直接在 Directory.Package.props 文件中引用即可,无需在具体的项目中添加引用,后续直接依赖的版本升级了不需要这个了也可以方便地移除这个依赖项

Fix vulnerable in CPM

那如果某个版本有漏洞但是目前还没有修复版本怎么办呢?我们可以配置 NuGetAuditSuppress 临时忽略某个安全漏洞的警告

suppress and sources

如果我们自己的私有 NuGet package 源也支持 Audit,也可以配置在 nuget.config 的 Audit Source 里

最后我们来一些 NuGet Audit 接下来的一些计划和功能

NuGet Audit Next

NuGet 团队准备支持一个命令来修复项目中所有的安全漏洞,从开始 Github 漏洞的界面可以看到是有修复版本的信息的,是有可能自动升级到没有漏洞版本的,这样有多个安全风险的话我们就不用一个一个检查一个个升级了,期待!

前面我们提到了可以配置 audit source,后面也将会支持基于本地文件的 audit source,感觉主要是为了本地 folder nuget source 吧

另外在安装一个有安全漏洞的 nuget 依赖时后面也会发出警告,你正在安装一个有漏洞的包版本,避免引入不安全的依赖

最后再提一个 SBOM 的支持,SBOM 全称是 Software Bill of Materials 软件物质清单,会生成一个依赖清单,帮助安全团队更好的理解和审计依赖,在打包 nuget package 的时候可以生成一个依赖清单在 nuget package 里,目前 SDK 层面还不支持,可以单独引用 Microsoft.Sbom.Targets 可以参考:https://github.com/WeihanLi/SamplesInPractice/blob/main/NuGetSamples/NuGetSamples.csproj

More

信息安全审计(英语:Information security audit)是对组织的信息安全水平进行审计的过程,其工作主要是对系统活动纪录和相关系统文件的独立审查。信息安全审核的目的在于提高系统信息安全水平,避免存在风险的系统设计,并优化安全措施和安全流程的效率。

信息安全审计的范围十分广泛,其目的亦可根据企业在不同阶段的发展目标而存在不同的侧重点,在以下领域均可进行开展:

  • 信息安全管理组织与制度;
  • 访问控制管理;
  • 网络安全漏洞扫描渗透测试、代码安全扫描、机房及设备物理安全、应用系统安全、信息系统日志管理、加密传输和加密设备管理、补丁管理、IT 项目开发管理;
  • 隐私数据安全、数据库和操作系统安全、信息资产分级和管理、数据资产全生命周期管理评估、信息安全事件管理、业务连续性;
  • 人力安全、IT 外包安全管理、信息安全意识教育

软件包管理器如 NuGet 的安全审计是一个涉及分析软件项目中包含的软件包安全性的过程。这包括识别漏洞、评估风险和提出改进安全性的建议。审计可以包括对软件包本身的审查,以及任何依赖及其相关风险。审计的目标是识别和减轻任何可能被攻击者利用的安全漏洞,例如代码注入或跨站脚本攻击

第三方或开源依赖项中可能存在的漏洞可能是您无法像您编写的代码那样严格控制的依赖项,这可能会在供应链中造成潜在的安全风险。

如果这些依赖项之一存在漏洞,那么就有可能存在漏洞。这可能很可怕,因为依赖项之一可能会在我们不知情的情况下发生变化。即使现在依赖项中存在漏洞,但无法利用,将来也可以利用。

最后有一些更多 NuGet Audit 相关内容的参考链接分享给大家,希望对大家有所帮助

References

  • https://learn.microsoft.com/en-us/nuget/concepts/auditing-packages
  • https://learn.microsoft.com/en-us/nuget/concepts/security-best-practices
  • https://devblogs.microsoft.com/nuget/announcing-nuget-6-8-maintaining-security-with-ease/
  • https://devblogs.microsoft.com/nuget/nugetaudit-2-0-elevating-security-and-trust-in-package-management/
  • https://learn.microsoft.com/en-us/nuget/api/vulnerability-info
  • https://github.com/advisories?query=type%3Areviewed+ecosystem%3Anuget
  • https://github.com/github/advisory-database
  • https://www.youtube.com/watch?v=Nw9ouFSiMjk
  • https://github.com/NuGet/Home/issues/12497
  • https://github.com/NuGet/Home/issues?q=is%3Aopen+is%3Aissue+label%3AArea%3ANuGetAudit
  • https://github.com/NuGet/Home/issues/13816
  • https://github.com/NuGet/Home/issues/12497
  • https://github.com/WeihanLi/SamplesInPractice/blob/main/NuGetSamples/NuGetSamples.csproj
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Ubuntu Server 下 Lynis 的深度实践:从安全审计到合规性管理
在当今数字化时代,服务器安全已成为企业信息安全体系的核心支柱。随着网络攻击手段的日益复杂和频繁,传统的被动防御策略已不足以应对多变的安全威胁。Ubuntu Server 作为广泛使用的企业级操作系统,其安全性直接关系到企业核心业务的连续性和数据资产的完整性。
徐关山
2025/10/05
1500
从3亿到48亿:NuGet周下载量跃迁背后的.NET生态演进与未来挑战(2019-2025)
在Nuget 网站上有一个每周下载统计数据的页面 :https://www.nuget.org/stats 。 从2020年开始我就习惯每个月收集下的NuGet包下载量数据,我把这些数据都收集放在知识星球。
张善友
2025/09/24
1890
从3亿到48亿:NuGet周下载量跃迁背后的.NET生态演进与未来挑战(2019-2025)
Claude Code安全审计子代理实战指南:打造你的代码安全卫士
今天要分享的是我精心优化的安全审计子代理——这个配置能让Claude Code像一个资深的安全专家,从漏洞扫描到威胁建模,从代码审计到合规检查,帮你构建坚不可摧的安全防线。
前端达人
2025/10/09
2410
Claude Code安全审计子代理实战指南:打造你的代码安全卫士
使用 Visual Studio 快速创建 NuGet 程序包并发布到 NuGet 官网
在前面的 .NET EF Core 快速入门实战教程章节中我们创建了一个名为 EFCoreGenericRepository 的 .NET 9 通用仓储类库,今天我们来把这个 EF Core 通用仓储类库打包成 NuGet 程序包并发布到 NuGet 官网(https://www.nuget.org),并在项目中引入我们发布的 NuGet 程序包。
追逐时光者
2025/10/17
980
使用 Visual Studio 快速创建 NuGet 程序包并发布到 NuGet 官网
“npm audit”安全工具的安全警告泛滥成灾,害码农们分心!
Facebook的软件工程师Dan Abramov发出了呼吁,要求让一款特别烦人的 JavaScript安全工具保持静默——该工具的创建者或多或少也认为确实有改进的空间。 “到今天为止,npm audit堪称整个npm生态系统上的一个污点”,Abramov 在一篇博文中宣称。“修复它的最佳时间就是在将其作为默认工具发布之前。修复它的下一个最佳时间就是现在。” 据Abramov声称,该命令标记出来的安全漏洞中99%是常见使用场景下的误报。而这在广大npm用户当中似乎是一种相当普遍的观点。 十多年前,Isaa
云头条
2022/03/18
9410
【独家】K8S漏洞报告|近期多个CVE漏洞解读
安全漏洞CVE-2019-11247/ CVE-2019-11248/ CVE-2019-11249分析
CNCF
2019/12/04
4.5K0
【独家】K8S漏洞报告|近期多个CVE漏洞解读
【产品那些事】什么是软件成分分析(SCA)?
在现代软件开发环境中,开发团队经常会依赖于开源的第三方组件来节省时间和提高效率。这些组件本身是由开源社区(Github、Gitee)贡献者来开发,然而,这也带来了一些潜在的安全风险,特别是涉及到供应链安全(这些组件的开发者队安全队安全方面的了解几乎为0、恶意的供应链投毒风险)和第三方组件的质量问题(存在抄袭、开源许可证合规风险)。
没事就要多学习
2024/09/09
1.9K0
【产品那些事】什么是软件成分分析(SCA)?
详解SBOM:定义、关系、区别、最佳实践和生成工具
SBOM 是软件材料清单(Software Bill of Materials)的缩写。它是一份详细记录软件构建过程中使用的所有组件、库和依赖项的清单。
Peter Shen
2023/09/01
10.5K0
详解SBOM:定义、关系、区别、最佳实践和生成工具
Istio公布2022年安全审计结果
Istio 是平台工程师信任的一个项目,用于在其 Kubernetes 生产环境中实施安全策略。我们非常关注代码的安全性,并维护一个健壮的漏洞管理程序[2]。为了验证我们的工作,我们定期邀请项目的外部审查,我们很高兴地公布我们的第二次安全审计的结果[3]。
CNCF
2023/02/12
4690
Istio公布2022年安全审计结果
etcd发布最新版本3.4的第三方安全审计
我们很自豪地宣布,etcd团队已经成功地完成了etcd最新版本3.4的第三方安全审计。通过Trail of Bits对etcd v3.4.3进行了第三方安全审计。我们感谢CNCF对本次审计的赞助。也非常感谢所有etcd维护人员,特别是Gyuho Lee、Hitoshi Mitake和Brandon Philips在整个审计工作过程中与我们一起工作。
CNCF
2020/08/07
9560
AgileConfig 1.8.0 已适配 .NET8
Hello 大家好。本月圈子里最大的事莫过于 .NET8 正式 release。群友们都在适配 .NET8。抽个周末我也把 AgileConfig 升级到了 .NET8。下面把升级的过程简单记录一下,其中有个小坑,对大家升级的时候可能有所帮助。
MJ.Zhou
2023/12/11
5450
AgileConfig 1.8.0 已适配 .NET8
Dependency-Track:分析开源组件漏洞,帮助组织识别和减少软件供应链中的风险
2021年底的Log4j核弹级漏洞刚过去,近期XZ漏洞又被推上热搜。近期准备结合一些工具实践,介绍下关于研发过程中的开源治理,也是近些年被炒的很火的“供应链安全”。
DevOps在路上
2024/04/15
1.9K0
Dependency-Track:分析开源组件漏洞,帮助组织识别和减少软件供应链中的风险
前端安全—你必须要注意的依赖安全漏洞
Lodash 是一款非常流行的 npm 库,每月的下载量超过 8000 万次,GitHub 上使用它的项目有超过 400 万。前段时间 Lodash 的一个安全漏洞刷爆了朋友圈,我们先来回忆下这个安全漏洞:
ConardLi
2020/02/13
1.5K0
一文解答DevOps平台的制品库是什么
不同开发语言的源码编译构建打包的二进制文件,例如Java JAR,WAR,EAR格式;Android AAR格式;其他软件包格式,例如NuGet软件包,Ruby gems,NPM软件包;Docker镜像和Helm charts;普通ZIP或.tar.gz、dmg等压缩文件;可执行文件格式,例如.exe 或.sh 文件,以及Android APK、Apple IPA等各种安装程序格式。
嘉为蓝鲸
2022/08/03
2.4K0
一文解答DevOps平台的制品库是什么
使用 .NET 升级助手将.NET Framework应用迁移到.NET 5
如果我们的.NET Framework应用程序本身年龄够大,是一座屎山难以修复,.NET 5确是一种采用当今最先进材料构建的现代绿色住宅,.NET 升级助手 能让我们的迁移工作轻松一些,它也不是万能的,没办法帮助我们把系统搞的更好,在我们迁移的过程中还是需要进行一些手动工作的。
张善友
2021/06/01
4.3K1
使用 .NET 升级助手将.NET Framework应用迁移到.NET 5
npm install 输出信息解析与最佳实践
在执行 npm install 后,终端通常会打印出三部分核心信息:新增包的数量、审计包的数量以及安装所用的时间;紧接着若有依赖包启用了资助(funding)功能,还会提示可运行 npm fund 查看详情。新增包数量代表安装的直接依赖和所有子依赖总和 ,审计包数量则反映出对刚安装的依赖进行安全检查时扫描的包总数 ,安装时长则是一项性能指标,用于评估安装过程的耗时 。当看到“packages are looking for funding”提示时,意味着当前项目所依赖的某些开源库显式声明了资金支持需求,用户可以选择运行 npm fund 跟进捐助链接 。
编程小妖女
2025/06/23
2930
npm install 输出信息解析与最佳实践
一个适合.NET Core的代码安全分析工具 - Security Code Scan
  本文主要翻译自Security Code Scan的官方Github文档,结合自己的初步使用简单介绍一下这款工具,大家可以结合自己团队的情况参考使用。此外,对.NET Core开发团队来说,可以参考张队的《.NET Core 必备安全措施》看看可以使用哪些方法提高我们.NET Core应用程序的安全性,此文也算是对张队的那篇文章的一个补充。此外,本文不会介绍常见的Web攻击及其场景,有兴趣的园友可以读读参考书《白帽子讲Web安全》一书。
Edison Zhou
2018/12/27
1.6K0
一篇文章带你全面了解 Rust 与 安全
在技术和工程领域中,"Safety"(功能安全性)和 "Security"(信息安全保障)是两个关键概念,它们虽然听起来相似,但代表着不同的关注点。尤其是中文翻译,这两个英文单词都被翻译为「安全」一词,所以会让一些人造成一些困惑。
张汉东
2024/04/15
7740
一篇文章带你全面了解 Rust 与 安全
OpenSCA用开源的方式做开源风险治理:Why? What? How?
《供应链攻击威胁局势报告》显示,预计2021年的供应链攻击数量将增加至上一年的四倍之多。《2021年软件供应链安全报告》显示,425名大型企业的IT、安全和DevOps主管中,64%的人报告称去年受到了供应链攻击的影响。Gartner预测,97%的企业应用程序将依赖于开源的使用,且超过70%的应用程序因使用开源组件而产生缺陷和漏洞。
OpenSCA社区
2023/02/16
1.6K0
2023版漏洞评估工具Top10
前言 对于发现资产中已知漏洞、配置不当等问题的工具,大家习惯性称之为“漏洞扫描”工具,但随着技术演进,很多工具越来越智能,逐渐具备分析总结能力,因此将它们称为“漏洞评估”工具似乎更准确。 大多数漏洞评估工具都能覆盖常规漏洞,例如OWASP Top10,但一般都各有所长。常见的区分维度包括部署灵活性、扫描速度、扫描准确度以及与流程管理、代码开发等平台的整合性。如果不考虑license的限制和成本,很多团队都会选择同时部署多款工具。本文推荐的开源工具能与主流的流程管理平台集成,输出包含优先级的处置分析报告
FB客服
2023/02/24
2K0
2023版漏洞评估工具Top10
推荐阅读
相关推荐
Ubuntu Server 下 Lynis 的深度实践:从安全审计到合规性管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档