PowerShell执行策略被powershell.exe参数破坏了。

3
在PowerShell中,除了尝试控制哪些脚本文件可以运行之外,限制性执行策略是否有优势?
默认情况下,不允许运行PowerShell脚本,但似乎如果恶意方想要运行PowerShell脚本,他们可以使用调用带有设置为“bypass”的-ExecutionPolicy参数的PowerShell的BAT文件进行引导。
我是否漏掉了什么,或者这样做是否会破坏执行策略机制?为什么要签名脚本(看起来很麻烦),而不是只需使执行策略不那么严格?
以下是我编写的BAT脚本,它创建了一个未签名的.ps1文件并运行它。它适用于执行策略为“受限制”的计算机,应该禁止脚本。UAC已启用,但没有弹出提升提示。它甚至拨打互联网并获取"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

1
请注意,当执行策略通过本地/组策略定义时,绕过执行策略将失败。 - Ansgar Wiechers
2个回答

1
执行策略可以防止他人修改正在由其他人或自动化进程(例如计划任务)运行的现有脚本。从安全角度来看,使用.bat文件与将代码编译为相同操作的.exe没有区别。
此外,当机器通过本地/组策略设置执行策略时(根据Ansgar在问题评论中的评论),-ExecutionPolicy参数无法工作。

啊,所以签名更有效地用于完整性和身份验证,而不是防止任意代码运行。那么,“受限制”的默认执行策略似乎并没有什么帮助。 - Vimes
2
它在大型组织中非常有用,这些组织拥有本地CA服务器并使用签名证书授权给指定的管理员来更新脚本。它还提供了某种审计跟踪。签名证书将告诉您最后修改它的人是谁。 - mjolinor

0

默认的PowerShell执行策略禁止运行脚本,仅仅用于防止意外调用脚本。即使在早期版本的PowerShell中没有每个实例参数,也很容易被轻松违反,只需进行以下操作:

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

任何真正想运行脚本的人都可以使用此方法或其他各种机制来运行脚本。它只是用于防止意外执行脚本。


默认情况下允许交互式代码(否则shell本身将被禁用),但我更多地考虑的是恶意方试图在他人机器上执行代码而不需要该人的合作。我想这归结为,为什么要签署脚本,当你可以关闭限制性执行策略呢? - Vimes
2
这个策略以及不自动执行 .ps1 文件的策略旨在防止重复出现 LOVE-LETTER-FOR-YOU.txt.ps1。 :-) 但是,这只是一个速度障碍。 - Keith Hill
1
如果恶意代码在您的计算机上,并且可以访问PowerShell,则它们可以随心所欲地执行操作。他们甚至可能会因为绕过运行脚本的“安全”限制而开怀大笑。这真是太容易了。有时我觉得它只是为了让我更难处理新的机器安装而存在。 - JaredPar
@Kieth,所以听起来技术娴熟的用户应该将执行策略降低,而脚本签名更适用于IT专业人员部署脚本到非技术娴熟的用户机器上? - Vimes
哦,等等——这听起来好像没有什么可以阻止“LOVE-LETTER-FOR-YOU.txt.bat”,它具有与“LOVE-LETTER-FOR-YOU.txt.ps1”相同的功能。嗯。 - Vimes

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