【问题标题】:PowerShell execution policy subverted by a powershell.exe parameterPowerShell 执行策略被 powershell.exe 参数破坏
【发布时间】:2019-08-02 18:53:59
【问题描述】:

在 PowerShell 中,除了尝试控制哪些脚本文件可以运行之外,限制性执行策略还有其他优势吗?

默认情况下,不允许运行 PowerShell 脚本,但似乎如果恶意方想要运行 PowerShell 脚本,他们可以使用调用 PowerShell 且 -ExecutionPolicy 参数设置为“绕过”的 BAT 文件引导进入该脚本.

我是否遗漏了什么,或者这是否破坏了执行策略机制?当您可以减少执行策略的限制时,为什么要签署脚本(looks like quite a hassle)?

下面是我编写的一个 BAT 脚本,它创建一个未签名的 .ps1 文件并运行它。它在执行策略为Restricted 的机器上工作,这应该禁止脚本。 UAC 已打开且不显示任何提升提示。它甚至可以拨出到 Internet 并获取 "Hey, Scripting Guy!" 博客的最新标题。

echo write-host "`r`nPowershell code running on $(hostname).`r`n`r`nHere's the latest headline from the 'Hey, Scripting Guy!' blog: '$(([xml](New-Object Net.WebClient).DownloadString("http://blogs.technet.com/b/heyscriptingguy/atom.aspx")).feed.entry[0].title)'.`r`n`r`nPress Enter to close.`r`n"; read-host > script.ps1
powershell -ExecutionPolicy bypass -Command .\script.ps1

【问题讨论】:

  • 请注意,当执行策略通过本地/组策略定义时,绕过执行策略将失败。

标签: powershell


【解决方案1】:

执行策略将阻止某人修改由其他人运行的现有脚本,或作为自动化进程(例如计划任务)运行的脚本。从安全的角度来看,使用该 .bat 文件与将执行相同操作的代码编译成 .exe 没有什么不同。

此外,当the execution policy is set via local/group policy 在机器上时,-ExecutionPolicy 参数不起作用(根据 Ansgar 对问题的评论)。

【讨论】:

  • 啊,所以签名对于完整性和身份验证更有效,而不是阻止任意代码运行。那么,“restricted”的默认执行策略似乎并没有那么有用。
  • 在拥有本地 CA 服务器并使用颁发给指定更新脚本的管理员的签名证书的大型组织中非常有用。它还提供了一些审计线索。它所签署的证书会告诉你最后修改它的人是谁。
【解决方案2】:

禁止脚本的默认 PowerShell 执行策略仅用于防止意外调用脚本。通过执行以下操作,即使在没有 per instance 参数的早期版本的 powershell 上,它也可能被轻微违反

  • 在记事本中打开任何要运行的脚本
  • 将内容复制到剪贴板
  • 将剪贴板粘贴到 powershell 实例中

任何真正想要运行脚本的人都可以使用此机制或各种其他机制来执行此操作。它仅对防止意外执行脚本非常有用

【讨论】:

  • 默认情况下允许交互代码(或者外壳本身将被禁用),但我更多地考虑的是恶意方试图在没有该人合作的情况下在其他人的机器上执行代码。我想这可以归结为,当您可以关闭限制性执行策略时,为什么还要签署脚本?
  • 这项政策以及在双击时不会自动执行 .ps1 文件的政策旨在防止 LOVE-LETTER-FOR-YOU.txt.ps1 的重复。 :-) 但是,是的,这只是一个减速带。
  • @JohnB 如果恶意代码在您的机器上并且可以访问 powershell,他们可以随心所欲。当他们绕过运行脚本的“安全”限制时,他们甚至可能会笑一点。到处走走很容易。有时我认为它只是让我更难处理新机器的安装
  • @Kieth,所以听起来精通技术的用户应该关闭执行策略,而脚本签名更适合将脚本部署到非精通用户的机器的 IT 专业人员?
  • 哦,等等 - 所以听起来没有什么能阻止“LOVE-LETTER-FOR-YOU.txt.bat”,它与“LOVE-LETTER-FOR-YOU.txt.ps1”具有相同的功能.嗯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-27
  • 2020-10-08
  • 2021-06-29
相关资源
最近更新 更多