PowerShell 提供多种功能,旨在提高脚本编写环境的安全性。
执行策略
PowerShell 执行策略是一项安全功能,用于控制 PowerShell 加载配置文件和运行脚本的条件。 此功能有助于防止恶意脚本的执行。 可使用组策略设置为计算机和用户设置执行策略。 执行策略仅适用于 Windows 平台。
有关更多信息,请参阅 about_Execution_Policies。
使用 SecureString 类
PowerShell 具有多个支持使用 System.Security.SecureString
类的 cmdlet。
与任何 .NET 类一样,可以在自己的脚本中使用 SecureString。 但是,Microsoft 不建议使用 SecureString 进行新开发。 Microsoft 不建议使用密码或依赖其他方法来进行身份验证,例如证书或 Windows 身份验证。
PowerShell 继续支持 SecureString 类以实现后向兼容性。 使用 SecureString 仍然比使用纯文本字符串更安全。 PowerShell 仍依赖于 SecureString 类型,以避免意外将内容公开到控制台或日志中。 请仔细使用 SecureString ,因为它可以轻松转换为纯文本字符串。 有关使用 SecureString 的完整讨论,请参阅 System.Security.SecureString 类文档。
模块和脚本块日志记录
模块日志记录使你能够为选定的 PowerShell 模块启用日志记录。 此设置在计算机上的所有会话中都有效。 PowerShell 记录 Windows PowerShell 事件日志中指定模块的管道执行事件。
脚本块日志记录可用于处理命令、脚本块、函数和脚本(无论是以交互方式调用还是通过自动化来处理)。 owerShell 将此信息记录到 Microsoft-Windows-PowerShell/Operational 事件日志。
有关详细信息,请参阅以下文章:
AMSI 支持
Windows 反恶意软件扫描接口 (AMSI) 是一种 API,允许应用程序将操作传递给反恶意软件扫描程序(例如 Windows Defender),以扫描恶意有效负载。 从 PowerShell 5.1 开始,在 Windows 10(及更高版本)上运行的 PowerShell 将所有脚本块传递到 AMSI。
PowerShell 7.3 扩展了发送到 AMSI 进行检查的数据。 它现在包括所有 .NET 方法调用。
有关 AMSI 的详细信息,请参阅 AMSI 如何提供帮助。
受约束的语言模式
ConstrainedLanguage 模式通过限制 PowerShell 会话中允许的 cmdlet 和 .NET 类型来保护系统。 有关完整说明,请参阅 about_Language_Modes。
应用程序控件
Windows 10 包括两种技术: 适用于企业的 应用控件和 AppLocker ,可用于控制应用程序。 PowerShell 检测是否正在强制实施系统范围的应用程序控制策略。 此策略会在运行脚本块、脚本文件或加载模块文件时应用某些行为,以防止在系统上执行任意代码。
应用控制企业版在Microsoft安全响应中心(MSRC)定义的服务条件下设计为安全功能。 应用控件是 Windows 的首选应用程序控制系统。
有关 PowerShell 如何支持 AppLocker 和应用控制的详细信息,请参阅 使用应用控件来保护 PowerShell。
软件材料帐单 (SBOM)
从 PowerShell 7.2 开始,所有安装包都包含软件材料帐单 (SBOM)。 PowerShell 团队还为他们拥有但独立于 PowerShell 提供的模块生成 SBOM。
可以在以下位置找到 SBOM 文件:
- 在 PowerShell 中的
$PSHOME/_manifest/spdx_2.2/manifest.spdx.json
处找到 SBOM。 - 对于模块,在
_manifest/spdx_2.2/manifest.spdx.json
下的模块文件夹中找到 SBOM。
SBOM 的创建和发布是将联邦政府网络安全现代化和加强软件供应链安全的第一步。 有关此计划的详细信息,请参阅博客文章在 Microsoft 使用 SPDX 生成 SBOM。
安全服务标准
PowerShell 遵守 Microsoft 的 Windows 安全服务标准。 仅安全功能符合服务条件。
安全功能
- 适用于企业的应用控制系统锁定
- 使用适用于企业的 App Control 的约束语言模式
深度防御功能
- 使用 AppLocker 锁定系统
- 使用 AppLocker 的受约束语言模式
- 执行策略