详细了解 PowerShell 脚本安全性

适用于: Configuration Manager(current branch)

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

PowerShell 脚本安全性

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

建议

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

有关 PowerShell 安全的一般信息

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

防御 PowerShell 攻击

防止恶意代码注入

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

用于反恶意软件扫描接口的 API

PowerShell 参数安全性

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

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

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

以下视频标题为“DEF CON 25 - Lee Holmes - Get $pwnd: Attacking Battle Hardened Windows Server”概述了您可以防范 (问题类型,尤其是 12:20 到 17:50) 部分:

环境建议

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

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