【威胁研究】浅谈攻击与防御之 PowerShell_北京源点思博科技有限公司 

【威胁研究】浅谈攻击与防御之 PowerShell

2020-09-15 17:12| 发布者: | 查看: |

【威胁研究】浅谈攻击与防御之 PowerShell



引言
本文为“浅谈攻击与防御”系列博文的其中一篇。本月度系列博文将重点介绍已知的攻击者为实施网络攻击而采用的多种不同策略和技术,以及组织可如何进行检测并最终阻止它们。我将使用 Mitre ATT&CK 知识库和术语来帮助大家了解各种技术。如果您还不知道 Mitre ATT&CK 是做什么的,请观看我在 2018 年发表的博客和视频:了解敌人战术,方能百战不殆(https://www.fortinet.com/blog/industry-trends/smarter-security-starts-with-understanding-how-cybercriminals-wo)。 
 
我使用 ATT&CK 知识库的原因之一是安全行业正趋于更精细地评估某项安全措施在应对现实世界攻击时是否有效。越来越多的组织和网络安全专业人员正在使用该知识库来更准确地衡量安全措施的有效性。如果贵组织尚未这样做,那么我强烈建议您考虑一下,绝对不会让您失望。

首先,我将在本文分析一款广受欢迎的工具:PowerShell

 
PowerShell 概述 
微软的 .NET 是一种免费的跨平台 Web 服务策略,旨在帮助管理员使用多种语言编辑器和库来快速构建应用。PowerShell 于 2006 年 11 月首次发布,是一种基于 .NET 的命令行脚本语言,可帮助管理员和高级用户快速自动化管理操作系统所需的某些日常任务。它还可用于使用多种语言编辑器和库来快速构建跨平台应用。在管理网络操作系统方面,它几乎已成为事实上的标准。PowerShell 现在已经开源,并默认安装在许多版本的 Windows 上。
 
 
 

与此同时,我们大多数人也都知道,恶意攻击者非常成功地利用了这种易于使用的脚本语言,包括利用它来安装恶意负载。以下是其中几个原因: 

 
 
 
  • PowerShell 现在预装在 Windows 计算机上;

  • 它提供了一种简单的方法,可以直接从内存中执行任意有效负载,该功能可能非常有用,但同时它也允许传递无文件恶意软件 ;

  • 容易混淆,以逃避基于签名的防御;

  • PowerShell 是受信任的工具(管理员每天都在使用),并且通常不会对其进行加固;

  • 许多使用 PowerShell 的恶意脚本都可以免费获得,包括 PowerShellEmpire、PowerSploit 等工具。

 
由于 PowerShell 具有上述和类似特性,因此多年来一直为网络攻击者所利用。幸运的是,更高版本的脚本语言为 PowerShell 环境提供了更好的防护功能。 
抵御 PowerShell 攻击
 
 

您可以利用下面的 PowerShell 防御措施:

 
 
 

受限语言模式

  • 禁止直接访问:.NET 脚本,通过 Add-Type cmdlet 调用 Win32 API,以及与 COM 对象进行交互(注意:请谨慎操作,因为您可能会破坏一些现有的 PowerShell 管理任务)

 

PowerShell v5(此版本具有许多不错的功能,可提供更好的安全性 - 请升级)

  • 脚本块日志记录 – 允许查看脚本试图执行的操作。之前的版本未记录此活动。

  • 全系统转录

  • 防恶意软件集成(版本 3 提供该功能) – AMSI(防恶意软件扫描界面)为其他安全厂商提供了一个界面,以便在脚本运行之前对其进行查看。(一个很好用的工具,但是一些迂回攻击仍然可以绕过) 

  • Applocker – 帮助根据 applocker 策略验证脚本。

 

记录 PowerShell 活动  

  • 通过组策略为各种 PowerShell 模块启用日志记录。 

 

删除 PowerShell v2

  • 该版本较旧且不安全,在安装版本 5 时不会删除。如果未被删除,攻击者仍可以利用这个不安全的版本。(powershell.exe -Version 2.0 -Command {<scriptblock>} -ExecutionPolicy <ExecutionPolicy>)

 

代码签名

  • 您可以对 PowerShell 脚本进行代码签名,并且仅运行那些已签名的脚本。(虽然同样有办法绕过,但仍有用) 

 

Just Enough Administration (JEA) 

  • 通过 PowerShell Remoting 启用基于角色的管理,从而让您可以根据登录的用户限制执行的操作。 

 

您可能已经注意到的,我在向您提供安全措施建议时,提到攻击者仍然有办法绕开其中的一些安全措施,例如 PowerShell 降级攻击、进程注入和 PowerShell 混淆等迂回技术。尽管如此,这些安全措施仍然很有价值,因为并非每个攻击者都知道如何实施这些迂回攻击,所以它们能够抵御技术水平一般的攻击者(可能大部分攻击者的技术水平都一般)。还请记住,您可以运行 PowerShell 脚本而无需调用 powershell.exe。 
 
实际案例和检测
通常,攻击者会结合利用 PowerShell 和武器化文档(例如 Word 或 Excel 文件)来执行恶意负载。通常,文档中会包含一个宏,该宏将用于调用 PowerShell 来执行其恶意负载。当然,该工具的用途远不止于此,但现在,我们只着重介绍一些使用 PowerShell 来下载和执行文件的常用技术。 
 
PowerShell 允许您使用 Invoke-WebRequest、System.Net.WebClient 和 Start-BitsTransfer 下载文件。文件下载完成后,您可以使用 Start-Process、Invoke-item 或 Invoke-Expression 运行下载的文件。如果您曾看到过这种组合,并且知道您的管理员没有使用这些工具来下载和执行文件,那么它就可能是恶意文件,此时您需要检查一下。 
 
除了下载文件,System.Net.Webclient 还让您将文件内容直接下载到内存中正在运行的进程中,然后运行它。这就是所谓的“无文件恶意软件”,用来试图绕过传统的杀毒产品。以下是使用 System.Net.Webclient cmdlet 的两种方法,以及一些我们在野外看到的用于下载恶意负载然后执行它的恶意脚本实例。 
 
  • (New-object System.net.webclient).Downloadfile() – 文件被下载到磁盘 

  • (New-object System.net.webclient).DownloadString() – 将内容直接移到内存中 

 
图 1 (见下)示例中,攻击者生成 PowerShell 代码,并利用该代码从多个动态生成的 URL 下载 Emotet 文件。如欲了解更多有关此威胁的信息,请查看我们去年撰写的博文:Emotet 恶意软件新变体分析(https://www.fortinet.com/blog/threat-research/analysis-of-a-fresh-variant-of-the-emotet-malware)。

【图 1】用于下载 Emotet 文件的 PowerShell 代码 
图 2 为 PowerShell 下载 NetWire RAT 这个已知威胁(该威胁记录了受害者的所有键盘操作(击键记录器))的示例。如欲了解更多信息,FortiGuard Labs 此前曾写过一篇关于该威胁变体的文章:通过网络钓鱼传播的 NetWire RAT 新变体(https://www.fortinet.com/blog/threat-research/new-netwire-rat-variant-spread-by-phishing)。 
 
 
 

您可以利用下面的 PowerShell 防御措施:

 
 
 

受限语言模式

  • 禁止直接访问:.NET 脚本,通过 Add-Type cmdlet 调用 Win32 API,以及与 COM 对象进行交互(注意:请谨慎操作,因为您可能会破坏一些现有的 PowerShell 管理任务)

 

PowerShell v5(此版本具有许多不错的功能,可提供更好的安全性 - 请升级)

  • 脚本块日志记录 – 允许查看脚本试图执行的操作。之前的版本未记录此活动。

  • 全系统转录

  • 防恶意软件集成(版本 3 提供该功能) – AMSI(防恶意软件扫描界面)为其他安全厂商提供了一个界面,以便在脚本运行之前对其进行查看。(一个很好用的工具,但是一些迂回攻击仍然可以绕过) 

  • Applocker – 帮助根据 applocker 策略验证脚本。

 

记录 PowerShell 活动  

  • 通过组策略为各种 PowerShell 模块启用日志记录。 

 

删除 PowerShell v2

  • 该版本较旧且不安全,在安装版本 5 时不会删除。如果未被删除,攻击者仍可以利用这个不安全的版本。(powershell.exe -Version 2.0 -Command {<scriptblock>} -ExecutionPolicy <ExecutionPolicy>)

 

代码签名

  • 您可以对 PowerShell 脚本进行代码签名,并且仅运行那些已签名的脚本。(虽然同样有办法绕过,但仍有用) 

 

Just Enough Administration (JEA) 

  • 通过 PowerShell Remoting 启用基于角色的管理,从而让您可以根据登录的用户限制执行的操作。 

 

您可能已经注意到的,我在向您提供安全措施建议时,提到攻击者仍然有办法绕开其中的一些安全措施,例如 PowerShell 降级攻击、进程注入和 PowerShell 混淆等迂回技术。尽管如此,这些安全措施仍然很有价值,因为并非每个攻击者都知道如何实施这些迂回攻击,所以它们能够抵御技术水平一般的攻击者(可能大部分攻击者的技术水平都一般)。还请记住,您可以运行 PowerShell 脚本而无需调用 powershell.exe。 

【图 3】可疑的父/子进程关系 
 
 
 

检测恶意 PowerShell 活动时需注意的其他信号是标记选项。以下是一些注意事项:

 
 
 
  • 执行绕过 – 它允许您在执行策略设置完成后将其绕过。即使为获得更高安全性设置了限制,此标记也可以绕过其中的一些限制。 

  • WindowsStyle 隐藏 – 从字面不难看出,该标记将对用户进行隐藏操作。 

  • Nop 或 Noprofile – 此标记将忽略您设置的配置文件中的命令。

  • Enc/Encode – 它将使用 base64 编码进行编码。

  • 大小写混合 – 文本字母被大小写混合。

  • lex – 运行命令或表达式 。

 
图 4(见下)为使用 Base64 编码的 PowerShell 脚本的示例。

【图 4】用 Base64 编码的 PowerShell 脚本 

 
上述内容介绍的大多是攻击者如何利用 PowerShell 执行负载,以获得对计算机的初始访问权。但请记住,PowerShell 技术也可以用于在网络上横向移动和/或建立持久性。
 
了解了攻击者使用 PowerShell 的各种方式之后,就需要确保收集正确的日志并设置正确的安全控制。我们的 FortiEDR 技术和/或 FortiResponder MDR 服务能够防御或检测并响应所有与 PowerShell 相关的已知(和许多未知)威胁,从而确保您始终保持良好安全状态。可用于检测的另一个很好用的 Fortinet Security Fabric 控件是带有 Windows 代理/Sysmon 的 FortiSIEM。该控件包含了许多预先设置的规则,可在检测到通过 PowerShell 执行的恶意活动时被触发。图 5(见下)为打开 PowerShell并随后尝试下载时触发警报。 
【图 5】打开 PowerShell 并下载文件时触发警报 
 
如果您既没有这些控件,也没有类似技术,但是想要自己执行此操作,那么请确保在端点上记录进程信息(查找事件 4688/4104),并确保能够查看 PowerShell 脚本(脚本块日志记录)内容。做到这两点之后您才能创建自己的触发器,但由于需要考虑的指标有很多(并且一直在增长),因此创建自己的触发器可能会很难。图 6 为 下载并执行 MimiKatz 以转储凭据的 PowerShell 脚本示例。 
【图 6】下载并执行 MimiKatz 的 PowerShell 脚本 

技术复现
逐渐摸清攻击者利用 PowerShell 的方式之后,您将需要测试自己的防御措施或请咨询公司为您进行测试。无论通过哪种方式,都最好了解一下您可以使用的工具。下面列出了一些测试工具。
模拟工具
Atomic Red Team
  • 通过执行简单和原子测试来测试控件,测试所采用的技术与攻击者的技术一样。

 
APT Simulator 
  • 一种 Windows 批处理脚本,它使用一组工具和输出文件使系统看起来已被破坏。

 
Caldera(主要是被攻击后)
  • 一种自动化的攻击者仿真系统,可在 Windows 企业网络中执行被攻击后的对抗行为。


开源防御测试工具
Kali Linux/Metasploit
  • 基于 Debian 的 Linux 发行版,旨在进行高级渗透测试和安全审计。Kali 包含了数百种工具,可用于执行各种信息安全任务,例如渗透测试、安全研究、计算机取证和逆向工程。

 
PowerShell Empire(不再维护,但仍然很好用) 
  • Empire 是基于加密安全通信和灵活架构的纯 PowerShell 漏洞利用后代理

 
PowerSploit
  • PowerSploit 是 Microsoft PowerShell 模块的集合,可用于在所有评估阶段为渗透测试人员提供帮助。

 
Unicorn Python 脚本 
  • 一个简单的工具,可用来使用 PowerShell 降级攻击,然后将 shellcode 直接注入内存。可以使用的工具还有很多,但这些工具比较好用。您必须亲自试用这些工具,并了解如何创建混淆宏,该宏可用于创建测试所需的典型恶意 Word 文档。它包含了一个 PowerShell 脚本,该脚本使用 Unicorn 脚本(PowerShell 降级攻击)和 Metasploit 与远程服务器建立了连接。此种工具可以帮助您测试安全防御措施,并确保配备正确的控件和日志记录
     

    结语

    如您所见,PowerShell 工具既可用来做好事,也可用来做坏事。当攻击者使用这些预先安装的工具时,由于无需安装其他工具即可完成其恶意攻击任务,因此被称为“离地攻击”。检测并最终保护您的组织免受这些技术攻击的关键是,首先要了解环境中的正常 PowerShell 行为是什么样子的,然后了解恶意行为有哪些迹象。如此您便能够测试环境中是否存在恶意技术,从而更好地了解安全状况。
     

     

    请注意,在您需要注意的许多事项中,我在上面只提到了其中很少的几点,因此请确保您了解所有最新的恶意技术,最好是确保供应商的安全控制措施跟上最新威胁技术,并能够通过 EDR、UEBA 和 SIEM等技术解决风险并识别恶意活动。最后提醒一下大家,在您测试每种 PowerShell 攻击技术的过程中,了解该技术、模拟该攻击技术、监视您的安全控制、评估是否存在任何差距及记录并进行所需的技术改进非常重要。

<
>

 
QQ在线咨询
售前咨询热线
010-82095611
售后服务热线
010-82095611
返回顶部