有什么方法可以安全地使用 Nuget?

信息安全 应用安全 源代码 开源 打补丁 更新
2021-09-03 22:38:37

Visual Studio 现在包括一个包管理器,它可以从 Internet 下载和更新软件包。通用名称是“Nuget”

我遇到的问题是,任何人都可以通过欺骗 owner field来假装是其他人这会在更新和验证每个补丁的真实性方面打开一大堆蠕虫。

  • 这些是有效的担忧吗?(我错过了吗?)

  • 我们可以实施哪些技术和程序控制来限制风险?

  • 有什么方法可以安全地使用 Nuget?

3个回答

NuGet 目前不支持对包或 nuspec 文件进行代码签名,因此无法真正识别包的作者。这个问题是在 2010 年作为功能请求提出的,但没有引起太多关注,也没有实施。请参阅http://nuget.codeplex.com/workitem/79

目前,一个已经存在的 NuGet 包只能通过最初上传它的同一帐户进行升级,但这并不能验证代码的实际作者,我相信这就是你所得到的。

在 NuGet 之外,程序集的代码签名仍然存在。基于此,我建议您理想情况下:

  • 仅使用来自受信任发布者的签名程序集。
  • 在您的项目中使用强名称引用(将项目/程序集绑定到特定的公钥)。
  • 验证您下载的每个程序集的签名。

另一个问题可能是 NuGet 包可以附加 PowerShell 安装/卸载脚本,这些脚本在使用 NuGet 包命令行时会自动运行。NuGet 1.4+ 确实支持 PowerShell 脚本的代码签名,因此我建议将 PowerShell 执行策略留给 RemoteSigned。

或者不要使用 NuGet 并从官方版本下载 .msi/.exe 并验证文件上的签名。

由于从 CLR 到 3rd 方库的所有内容都将通过 ASP.NET vNext 中的 NuGet 分发,因此我相信 NuGet 团队已承诺在 Visual Studio 2015 发布时支持签名包。

见博客公告: http: //blog.nuget.org/20150203/package-signing.html

另外,请参阅签名规范:https ://github.com/aspnet/Signing/blob/dev/Spec.md

Nuget 现在支持包 ID 保留(另请参阅新闻稿

这允许在开发人员和生产者之间建立额外的信任,但也是朝着信任持续集成 (CI) 构建的正确方向迈出的一步(因为确定性构建在 .NET中是不可能的)