【问题标题】:What security restrictions are placed on Powershell scripts run during a NuGet package install/init?在 NuGet 包安装/初始化期间运行的 Powershell 脚本有哪些安全限制?
【发布时间】:2011-05-02 14:03:00
【问题描述】:

当您从 NuGet 安装包时,它可以运行一些 Powershell 脚本来进行设置(例如导出要在包管理器控制台中使用的命令)。

我正在尝试(但失败)查找这些脚本可以/不能做什么的详细信息。具体来说——我们应该担心这些恶意代码吗?他们可以读取文件系统、发送网络请求等吗?

【问题讨论】:

  • 基于文档,我会说它们不受限制。无论如何,您可能需要文件系统或 Web 访问来(卸载)安装软件包,因此限制它可能没有太大意义。
  • 安装/卸载将二进制文件复制到文件夹中的软件包与能够读取/写入文件系统上的任何文件并通过网络发送的脚本不同:)
  • 我也怀疑没有限制(并且“报告滥用”链接的存在也表明了这一点),但如果是这种情况,我认为第一次安装时应该更清楚一点可能包含恶意代码的新软件包:/

标签: powershell nuget


【解决方案1】:

当 NuGet 设置 PowerShell 主机时,它会检查当前的 ExecutionPolicy 是什么。如果它不是 Unrestricted、RemoteSigned 或 Bypass,它会强制当前进程 (devenv.exe) 的 ExecutionPolicy 为 RemoteSigned。

PowerShell 看不到从 Internet 下载的嵌入式脚本 init.ps1、install.ps1 等,因此没有什么可以阻止恶意脚本在您的计算机上执行您的帐户有权执行的任何操作。

此时,所有 NuGet 包创建者几乎都在“荣誉”系统上。我相信 Ruby Gems 也有类似的情况。

NuGet 确实能够使用私有包源,因此如果安全性至关重要,我建议您下载并审查所有包,并且只允许安装来自这些受信任源的包。

【讨论】:

  • 我担心的不是我,只是普通的程序员。我想实际上,二进制文件中的代码也可以做任何事情,所以我们需要相信作者。我认为也许应该在 NuGet 对话框中更清楚地说明包可能的破坏性/恶意程度。
【解决方案2】:

我会听从 NuGet 团队的某个人,但我几乎可以肯定他们在当前执行策略下运行。

这是我自己的 nuget 控制台的剪辑:

PM> Get-ExecutionPolicy
RemoteSigned

如果我以管理员身份打开 PowerShell 并更改执行策略,nuget 会报告更改:

PM> Get-ExecutionPolicy
Restricted

总之,您在默认主机上设置的任何执行策略也适用于 nuget 控制台。

【讨论】:

  • 嗯,现在我更困惑了。我认为默认策略是所有脚本都必须签名,但 NuGet 正在运行从 Web 下载的可能未签名的脚本?
  • 默认策略是根本不运行脚本。但是很容易改变这个政策。它并不是真正的安全保护,更多的是儿童安全锁。 :)
  • 我的意思是,无论执行策略设置如何,NuGet 似乎都在“来自互联网”运行未签名的脚本?
【解决方案3】:

当您从 Internet 下载脚本时,除非它是使用安装程序安装的,并且您已授予它升级的安装权限,否则这些脚本将被标记为被阻止。您必须通过右键单击脚本并选择“取消阻止”按钮来授权(取消阻止)它们。

【讨论】:

  • 我说的是作为 NuGet 包安装的一部分执行的脚本,它们不会被标记为来自网络,并且无论如何都会执行。
猜你喜欢
  • 2012-12-31
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 2015-05-27
相关资源
最近更新 更多