时间线
11 月 10 日,我们发现了一次多阶段 PowerShell 攻击,该攻击使用冒充哈萨克斯坦卫生部的文件诱饵,目标是哈萨克斯坦。
11 月 8 日,一个用户名为 DangerSklif(可能是指莫斯科的急诊医院)的攻击者创建了一个 GitHub 帐户(目前账号不存在)并上传了攻击的第一部分。
概述
攻击者在伪装成来自“哈萨克斯坦共和国卫生部”邮件,邮件中含有名为“Уведомление.rar”(“Notice.rar”)的 RAR压缩包。文件中包含一个同名的 lnk 文件,和伪装成来自“哈萨克斯坦共和国卫生部”的 PDF 文档。打开 lnk 文件后,将打开一个 PDF 文件以迷惑受害者,同时在后台执行此攻击的多个阶段。
pdf文件是对哈萨克斯坦国家卫生局发布的 Covid 19 政策的修订。
攻击过程
下图展示了这次攻击的全过程。
首先执行 lnk 文件,该文件调用 PowerShell 以通过运行多个Powershell脚本来操作注册表项和执行多种技术,例如权限提升和持久性。
这次攻击的所有阶段都托管在一个DangerSklif的用户于 11 月 8 日创建名为GoogleUpdate 的Github 存储库中 。该DangerSklif 用户注册于11月1日。可以看出这是一次针对性的攻击。
分析
嵌入的 lnk 文件被混淆,去混淆后我们可以看到它使用 cmd.exe 调用 PowerShell 从 Github 帐户(lib7.ps1)下载并执行攻击的第一阶段。
该 lib7.ps1 下载来自同一个帐户Github上,并将其存储在PDF文件目录中(其实可以下载在更隐蔽的目录中)。在下一步中,它会打开PDF 以迷惑目标,同时它会在后台执行其余过程,包括获取操作系统版本并根据操作系统版本下载下一阶段。
下载操作使用的是.net中的WebClient,比较常规的一种下载方法。获取操作系统版本的为win32_OperatingSystem.
如果操作系统版本为 7 或 8,则下载并执行 lib30.ps1 ,如果操作系统版本为 10,则下载并执行 lib207.ps1。检查操作系统的版本主要是为了进行提权。
这些提权技术在TA505在Srv Helper 的活动中使用过。
运行的 PowerShell 脚本包含一个 Base64 编码,解码后,在 CBC 模式下由三重 DES (3DES) 算法解密:
脚本的第一部分定义了一个名为 heller 的函数,作用是提升系统权限并允许绕过 UAC,在这里一共使用了2种技术:
技术 1 — 在任务计划程序中使用 SilentCleanup 任务:
SilentCleanup 可以由用户启动,在这种情况下,它会以提升的权限运行。可执行文件的路径是使用 %windir% 环境变量在其属性中指定的,例如,可以重置其值以触发 PowerShell 脚本的启动。在这种情况下,运行任务将导致 PowerShell 脚本以管理员权限启动,绕过 UAC。
该技术被黑客用于针对 Windows 8 和 Windows 10 系统。
该技术背后的代码与Metasploit 框架的模块实现相同。
技术 2 — 使用 sysprep.exe 系统实用程序和 DLL 劫持加载:
首先,创建一个帮助程序脚本以重新启动目录 C:WindowsTemp 中的 PowerShell 脚本。然后创建一个包含辅助 DLL CRYPTBASE.dll(PowerShell 脚本包含 x86 和 x64 版本的库)的 CAB 存档。
然后使用 wusa.exe 系统实用程序将此存档解压缩到文件夹 C:WindowsSystem32Sysprep 中。
接下来,sysprep.exe 系统实用程序启动,加载先前解压的 DLL,然后 DLL 继续执行帮助脚本。然后PowerShell 脚本将以管理员权限重新启动,绕过 UAC。
代码语言:javascript复制http://www.labofapenetrationtester.com/2015/09/bypassing-uac-with-powershell.html
POC:
https://github.com/samratashok/nishang/blob/master/Escalation/Invoke-PsUACme.ps1
在这次的攻击中,攻击者使用使用任务计划程序中的 SilentCleanup任务绕过 Windows 10 中的 UAC:使用Lib207.ps1 绕过 Windows 10 中的 UAC。用于执行绕过的 PowerShell 命令使用 0x58 密钥进行 XOR 加密。
解密命令后,我们可以看到UAC绕过的过程,包括在Task Scheduler中创建一个SilentCleanup任务,调用PowerShell以更高的权限执行创建的vbs文件。
在 Windows 7 和 8 中使用 sysprep.exe 系统实用程序和 DLL 旁加载绕过 UAC:Lib30.ps1 用于执行此绕过。与 lib207.ps1 类似,此 PowerShell 脚本也是 XOR 加密的,但使用不同的密钥 (0x02)。
该过程首先在“ Windows/Temp ”目录中创建一个批处理文件 ( cmd.bat ) 。在下一步中,将创建一个包含 DLL(Windows 7 为 CRYPTBASE.dll 或 Windows 8 为 shcore.dll)的 cab 存档文件。然后使用 wusa.exe 将此 cab 文件解压缩到 C:WindowsSystem32Sysprep 目录中.
最后,sysprep.exe 系统实用程序启动哪一侧加载 Windows 7 的 CRYPTBASE.dll 或 Windows 8 的 shcore.dll。此 DLL 执行创建的cmd.bat文件,从而导致以高权限执行它,用来绕过UAC。
绕过 UAC 后,在所有操作系统版本中,都会下载并执行下一阶段的有效负载 ( lib106.ps1 )。
此阶段执行以下操作:
在ProgramFiles 目录中创建一个 vbs 文件 (cu.vbs), 并通过将此 vbs 文件添加到HKLMSoftwareMicrosoftWindowsCurrentVersionRun 注册表项来使这种多阶段攻击持久化 。
使用“Attrib.exe h”命令隐藏 vbs 文件。
使用 PowerShell下载并执行最后阶段 ( updater.ps1 )。
最后一个阶段 ( updater.ps1 ) 是在 PowerShell 中执行 Cobalt Strike的payload。这个 PowerShell 脚本是 Cobalt Strike 的 PowerShell payload的免杀。
虽然经过免杀处理,但还是明显看出来是coabltstrike的powershell payload。采用 base64 编码并使用 35 密钥进行 XOR 加密。在解码和解密 ShellCode 后,它使用 VirtualAlloc 将其分配到内存中,最后通过调用 Invoke 函数执行它。
比较常规的一次攻击,分享一下
https://blog.malwarebytes.com/threat-intelligence/2021/11/a-multi-stage-powershell-based-attack-targets-kazakhstan/
https://www.ptsecurity.com/ww-en/analytics/pt-esc-threat-intelligence/operation-ta505-part2/