NuGet官方包源:我应该担心软件包的安全性吗?

17
根据这个页面

添加软件包没有集中的审核流程。当您上传软件包到NuGet软件包库(目前还不存在),您就不必等待数天或数周才能等待某人审核并批准它。相反,我们将依靠社区自我管理和监督软件库的内容。这是CodePlex.com和RubyGems.org的工作原则。

这让我感到不安。在我下载Firefox插件之前,我知道它不应该包含恶意代码,因为我了解所有addons.mozilla.org上的插件都经过Mozilla的审核。在我从codeplex.com或code.google.com下载开源项目之前,我知道它应该是安全的,因为任何人都可以检查它的源代码。而且我还可以使用WOT(信任之网)来了解其他人对该项目的看法。
但是,在我从NuGet官方包源下载软件包之前,例如这个,我不知道谁制作了这个软件包,也不知道其中包含了什么内容。在我看来,任何人都可以将任何东西打包成一个软件包,取任何想要的名称(如“Microsoft Prism”),只要该名称尚未使用,然后上传到官方包源。
我应该担心NuGet官方包源上软件包的安全性吗?
2个回答

14

您应该对从任何来源获取的软件保持警惕:

  1. 从Sourceforge.net、Codeplex.com等下载的二进制文件可能包含恶意代码(可能是由原提交者植入的,更可能是黑客插入网站中的),这些代码可能会在某个人(您?)受到攻击并引起警报之前不被察觉。
  2. 即使您从前面提到的其中一个网站下载源代码自己编译二进制文件,它仍然可能执行恶意行为,除非您查看所有源代码并理解它的作用。
  3. 甚至从“应用商店”(例如Apple iTunes、Android Market)下载的软件也可能包含恶意代码;一些审查过程部分自动化但仍然不可靠,并且发生的人工审核肯定不可靠!
  4. 过去有过包装软件包含恶意软件的例子!

也许您可以对软件(以二进制文件或源代码形式提供)具有的信任程度进行连续评估,而Nuget软件包库(以及CodePlex.com和RubyGems等)可能位于信任程度较低的一端。

这类问题有潜在解决方案,例如受信任计算平台联盟提出的方案,但它们对我们当前享有的开发软件和自由共享软件的自由性施加了巨大限制,而不需要从中央机构获取许可证或加密密钥。

我相信社区将会提出相应的规范和机制,以确保Nuget成为值得信赖的.NET开发人员软件库来源,同时保持其敏捷性,不需要正式的审查过程。然而,最终责任在于您作为用户确保您的IT安全不受影响,并且所采取的预防措施是与您编写的软件中IT安全的重要性相关的(例如家庭项目;可能很低。银行、医疗、工艺控制项目;可能很高!)


4
NuGet不管理信任。即使它这样做了,你仍然需要关心NuGet信任的内容是否可信。
你应该非常关注NuGet包中代码的安全性。你应该关心任何你不熟悉的代码的安全性。
我在使用NuGet和NPM时采取的方法如下:
  1. 完全锁定语义版本号。明确指定主要版本、次要版本和补丁号。不要假设新更新是安全的或者它们的语义版本是准确的。
  2. 仅在生产环境中使用已知的当前版本。
  3. 在有限制的测试环境中尝试任何东西,例如使用不是本地管理员账户的账户,在测试机的IP上未授予特权资源的访问权限等等。
  4. 检查供应商。例如,如果Amazon发布了一个AWS SDK的包,那么如果你信任Amazon,那么这个包可能是安全的。
例如,目前我唯一信任的包,可以直接添加到生产环境中的是Newtonsoft.Json和Nhibernate。我最担心的是新的开源包是否按照描述的那样工作,因此在我投入时间之前,它们是否符合我的需求。
我认为,如果你对包进行了足够的研究,以确定它是否适合生产环境,那么你可能已经了解了足够多的软件和社区相关信息,以确定它不会做任何恶意行为。对软件及其社区进行研究对我而言比NuGet的认可更重要,因为我们都希望它是完美的中央机构决定的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接