防止绕过 PowerShell 执行策略

问题描述 投票:0回答:3

我们在 RDS 环境中安装了 PowerShell。它目前用于远程管理和 App-V 虚拟应用程序发布等任务。据我了解,绕过受限执行策略相当容易。

但是,我找不到任何有关防止绕过执行策略(或使其变得更加困难)的有用信息。我正在考虑使用文件筛选 (AppLocker) 来阻止 PowerShell 文件,但我猜想攻击者可以使用附加到 Microsoft Office 文件的 VBA 脚本来执行 PowerShell 脚本。

目前我们的重点是监控,但我希望更多地关注预防。

powershell malware executionpolicy
3个回答
3
投票

你想要实现的目标是毫无意义的。有多种方法可以绕过执行策略。事实上,它并不是是出于安全原因而设计的。

  1. 到处安装 PS 5+ 并实现脚本块日志记录。您可以将所有日志放在某个共享目录中以分析\摄取它们。
  2. 移除所有地方的 PS2
  3. 阻止网络文件中的宏
  4. 使用应用程序白名单

这应该是一个很好的起点。

PS:您还可以监视事件 400,以在重新安装 PS2 时检测对 PS2 的绕过(这是您不希望出现在用户计算机上的情况)。


0
投票

实际上,有一些方法可以防止滥用 PowerShell(并使绕过执行策略变得毫无用处):

  1. 配置AppLocker:也锁定脚本
  2. 将 PowerShell 配置为使用约束模式,这样 .NET 代码就无法执行
  3. 对于您自己的应支持 .NET 代码的脚本,您可以使用代码签名者证书对脚本进行签名(这些脚本将被允许以约束模式 + AppLocker 运行)

除此之外,配置所有 PowerShell 命令的日志记录并通过中央位置发送它们(以便 IDS 可以监控这一点)也是一个很好的做法。

请参阅检测进攻性 PowerShell 攻击工具,了解有关如何实现此目的的更多详细信息。


0
投票

真正的答案是设置“MachinePolicy”(或“UserPolicy”)范围。这可以通过组策略编辑器完成,并且不能使用绕过命令覆盖。默认情况下,如果您在 PowerShell 中运行

Get-ExecutionPolicy -List
,您可能会看到顶部的两个都为“未定义”。

要更改它,请打开组策略编辑器并导航到:

Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell
并打开名为
Turn on Script Execution
的选项。

默认情况下未配置。如果您将其设置为

Disabled
,它将把 MachinePolicy 设置为“受限”。如果您将其设置为
Enabled
,您将看到一个下拉菜单,您可以在其中选择其他策略,例如仅签名脚本(“AllSigned 策略”)。

假设您将其设置为 AllSigned。然后,如果有人尝试运行如下命令:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

它会这样回应:

Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of AllSigned.

如果再次列出当前的执行策略,则会显示该人刚刚设置的具有该执行策略的范围。然而,即使是 Bypass,它实际上也不会应用,MachinePolicy 会获胜。即使 PowerShell 以管理员身份运行,MachinePolicy 仍然适用。

而且您也不能仅通过 PowerShell 更改 MachinePolicy,即使以管理员身份运行也是如此。如果你这样做,它会说:

Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes must be set through Group Policy.


PowerShell 7 的附加说明:

如果您使用单独下载的 PowerShell 7(不要与“Windows Powershell”混淆),则将使用完全独立的执行策略。要为此设置 MachinePolicy,您还需要使用组策略编辑器,但默认情况下不会在那里找到它。

要使 PowerShell 7 设置显示在组策略编辑器中,您需要运行 PowerShell 7 安装中包含的名为

InstallPSCorePolicyDefinitions.ps1
的脚本。您必须使用 PowerShell 7 运行此程序,并且可能以管理员身份运行。

现在,您将能够在 GPE 中找到这些设置:

Computer Configuration > Administrative Templates > PowerShell Core

它将具有与 Windows PowerShell 相同的设置,但幸运的是,他们有一个额外的选项来继承您为 Windows PowerShell 设置的内容。

© www.soinside.com 2019 - 2024. All rights reserved.