使用应用控件保护 PowerShell

Windows 10 包括两种技术: 适用于企业的 应用控件和 AppLocker,可用于控制应用程序。 它们使你能够创建锁定体验,以帮助保护 PowerShell 环境。

AppLocker 的构建基于软件限制策略的应用程序控制功能。 使用 AppLocker 可以创建规则来允许或拒绝特定用户或组的应用。 可以根据文件的唯一属性来识别应用。

Windows 10 中引入的应用程序控制(作为 Windows Defender 应用程序控制 (WDAC)引入),允许你控制允许在 Windows 上运行哪些驱动程序和应用程序。

锁定策略检测

PowerShell 可检测适用于企业的 AppLocker 和应用控制系统范围的策略。 AppLocker 没有办法查询策略强制状态。 若要检测 AppLocker 是否正在强制实施系统范围的应用程序控制策略,PowerShell 会创建两个临时文件,并测试是否可以执行它们。 文件名使用以下名称格式:

  • $env:TEMP/__PSAppLockerTest__<random-8dot3-name>.ps1
  • $env:TEMP/__PSAppLockerTest__<random-8dot3-name>.psm1

适用于企业的应用控制是适用于 Windows 的首选应用程序控制系统。 应用控制提供 API,可用于发现策略配置。 应用控制在Microsoft安全响应中心(MSRC)定义的服务条件下设计为安全功能。 有关详细信息,请参阅 适用于 Windows 的应用程序控件和 应用控件和 AppLocker 功能可用性

注意

在应用控件或 AppLocker 之间进行选择时,建议使用适用于企业的 App Control 而不是 AppLocker 实现应用程序控制。 Microsoft不再投资 AppLocker。 尽管 AppLocker 可能会继续接收安全修补程序,但它不会接收功能增强功能。

应用控制策略强制实施

当 PowerShell 在应用控制策略下运行时,其行为会根据定义的安全策略进行更改。 在应用控制策略下,PowerShell 以模式运行策略 FullLanguage 允许的受信任脚本和模块。 所有其他脚本和脚本块都不受信任,并在 ConstrainedLanguage 模式下运行。 当不受信任的脚本尝试执行 ConstrainedLanguage 模式下不允许的操作时,PowerShell 会引发错误。 很难知道脚本为何无法在 ConstrainedLanguage 模式下正确运行。

应用控制策略审核

PowerShell 7.4 添加了一项新功能,用于在审核模式下支持应用控制策略。 在审核模式下,PowerShell 在 ConstrainedLanguage 模式下运行不受信任的脚本且没有任何错误,但会将消息记录到事件日志中。 日志消息描述了如果策略处于“强制”模式,将应用哪些限制。

更改历史记录

Windows PowerShell 5.1 是支持应用控制的第一个 PowerShell 版本。 App Control 和 AppLocker 的安全功能通过每个新版本的 PowerShell 进行改进。 以下章节介绍了每个 PowerShell 版本中的支持变化。 这些更改是累积更新,因此高版本中描述的功能包括低版本中的功能。

PowerShell 7.4 中的更改

在 Windows 上,当 PowerShell 在应用控制策略下运行时,其行为会根据定义的安全策略进行更改。 在应用控制策略下,PowerShell 以模式运行策略 FullLanguage 允许的受信任脚本和模块。 所有其他脚本和脚本块都不受信任,并在 ConstrainedLanguage 模式下运行。 当不受信任的脚本尝试执行不允许的操作时,PowerShell 会引发错误。 很难知道脚本为何无法在 ConstrainedLanguage 模式下正确运行。

PowerShell 7.4 现在支持审核模式下的应用控制策略。 在审核模式下,PowerShell 会在 ConstrainedLanguage 模式下运行不受信任的脚本,但会将消息记录到事件日志中,而不是引发错误。 日志消息描述了如果策略处于“强制”模式,将应用哪些限制。

PowerShell 7.3 中的更改

  • PowerShell 7.3 现在支持通过应用控制 API 阻止或允许 PowerShell 脚本文件的功能。

PowerShell 7.2 中的更改

  • AppLocker 有一种边界案例,你只具有“拒绝”规则,而未使用受约束的模式执行允许绕过执行策略的策略。 从 PowerShell 7.2 开始,已进行了更改,以确保 AppLocker 规则优先于 Set-ExecutionPolicy -ExecutionPolicy Bypass 命令。

  • PowerShell 7.2 现在禁止在锁定计算机上的 NoLanguage 模式 PowerShell 会话中使用 Add-Type cmdlet。

  • PowerShell 7.2 现在禁止脚本在 AppLocker 系统锁定条件下使用 COM 对象。 在内部使用 COM 或 DCOM 的 cmdlet 不受影响。

其他阅读材料