详细了解 PowerShell 脚本安全性

适用于: Configuration Manager(current branch)

管理员负责在其环境中验证建议的 PowerShell 和 PowerShell 参数使用情况。 下面是一些有用的资源,可帮助管理员了解 PowerShell 的强大功能和潜在风险面。 本指南旨在帮助你缓解潜在风险面并允许使用安全脚本。

PowerShell 脚本安全性

使用Configuration Manager脚本功能,可以直观地查看和批准脚本。 另一个管理员可以请求允许其脚本。 管理员应知道 PowerShell 脚本可以包含模糊脚本。 模糊处理脚本可能是恶意脚本,在脚本审批过程中难以通过视觉检查进行检测。 直观查看 PowerShell 脚本并使用检查工具来帮助检测可疑脚本问题。 这些工具不能始终确定 PowerShell 作者的意图,因此可能会引起人们对可疑脚本的注意。 但是,这些工具将要求管理员判断它是恶意的还是故意的脚本语法。

建议

  • 使用下面引用的各种链接熟悉 PowerShell 安全指南。
  • 对脚本进行签名:确保脚本安全的另一种方法是先对其进行审核,然后对其进行签名,然后再导入脚本以供使用。
  • 不要在 PowerShell 脚本中存储密码 ((如密码) ),并详细了解如何处理机密。

有关 PowerShell 安全性的一般信息

选择此链接集合是为了为Configuration Manager管理员提供了解 PowerShell 脚本安全建议的起点。

防御 PowerShell 攻击

防止恶意代码注入

PowerShell - Blue Team,讨论深度脚本块日志记录、受保护的事件日志记录、反恶意软件扫描接口和安全代码生成 API

反恶意软件扫描接口的 API

PowerShell 参数安全性

传递参数是一种灵活使用脚本并将决策推迟到运行时的方法。 它还开辟了另一个风险面。

以下列表包含防止恶意参数或脚本注入的建议:

  • 仅允许使用预定义的参数。
  • 使用正则表达式功能验证允许的参数。
    • 示例:如果只允许特定的值范围,则使用正则表达式仅检查那些可以构成该区域的字符或值。
    • 验证参数有助于防止用户尝试使用某些可以转义的字符,例如引号。 可以有多个类型的引号,因此使用正则表达式验证你决定允许的字符通常比尝试定义所有不允许的输入更容易。
  • 使用PowerShell 库中的 PowerShell 模块“注入猎人”。
    • 可能存在误报,因此,当某些内容被标记为可疑时,请查找意向,以确定它是否是真正的问题。
  • Microsoft Visual Studio 具有脚本分析器,可帮助检查 PowerShell 语法。

以下标题为“DEF CON 25 - Lee Holmes - 获取$pwnd:攻击战斗强化 Windows Server”的视频概述了你可以针对 (特别是) 12:20 到 17:50 部分保护的问题类型:

环境建议

以下列表包含针对 PowerShell 管理员的一般建议:

  • 部署内置于 Windows 10 或更高版本的 PowerShell 最新版本,例如版本 5 或更高版本。 还可以部署Windows Management Framework
  • 启用和收集 PowerShell 日志,(可选)包括受保护的事件日志记录。 将这些日志合并到签名、搜寻和事件响应工作流中。
  • 在高价值系统上实现 Just Enough Administration,以消除或减少对这些系统的不受约束的管理访问。
  • 部署Windows Defender应用程序控制策略,以允许预先批准的管理任务使用 PowerShell 语言的全部功能,同时将交互式和未经批准的使用限制为有限的 PowerShell 语言子集。
  • 部署Windows 10或更高版本,让防病毒提供商能够完全访问所有内容 (包括在运行时生成或取消模糊处理的内容,) 由 Windows 脚本主机处理(包括 PowerShell)。