Salim Bitam

攻击链导致 XWORM 和 AGENTTESLA

我们的团队最近观察到一个新的恶意软件活动,该活动采用了一个多阶段的完善流程。该活动旨在诱骗毫无戒心的用户点击看似合法的文档。

阅读需 10 分钟攻击模式, 恶意软件分析
Attack chain leads to XWORM and AGENTTESLA

要点

  • 威胁行为者正在使用他们自己的自定义 .NET 加载器部署已知的恶意软件
  • 威胁行为者采用简单且众所周知的策略,例如通过修补程序和基本的自定义 .NET 加载器来绕过 AMSI
  • 威胁行为者正在滥用合法的免费文件托管服务

前言

我们的团队最近观察到一个新的恶意软件活动,该活动采用了一个多阶段的完善流程。该活动旨在诱骗毫无戒心的用户点击看似合法的文档,但实际上是伪造的。攻击者利用武器化的 Word 文档来执行恶意的 PowerShell 脚本,并利用自定义混淆的 .NET 加载器来加载各种恶意软件,包括 XWORM 和 AGENTTESLA。

RTF 加载器代码分析

概述

在最近的一次调查中,我们发现了一个名为 Card & Booking Details.docx 的恶意 Word 文档。此文档的设计意图是欺骗受害者,并包含两个伪造的扫描文档,即信用卡和护照。

打开文档后,会提取托管在 www.mediafire[.]com/file/79jzbqigitjp2v2/p2.rtf 的 RTF 对象。

此 RTF 对象包含一个启用宏的 Excel 对象。打开此宏时,它会下载一个混淆的 PowerShell 脚本,该脚本反过来会部署不同的恶意软件家族。

在撰写本文时,我们观察到两个不同的恶意软件家族,即 XWORM 和 AGENTTESLA,已通过此执行链部署。上述两个恶意软件家族都由同一个自定义 .NET 加载器加载到受感染系统的内存中。加载后,恶意负载可以执行一系列功能,例如窃取敏感数据和在受感染的系统上执行命令。

在这篇研究文章中,我们将逐步介绍恶意软件的初始执行,并详细说明我们发现的功能。

提取恶意的 VBA

RTF 文档包含多个嵌入对象,其中一个引起了我们的注意:Excel.SheetMacroEnabled

我们可以使用 rtfdumpy.py(Didier Stevens 开发的用于分析 RTF 文件的脚本)来转储对象,并使用 olevba.py(Philippe Lagadec 开发的用于从 OLE 对象中提取任何嵌入式 VBA 脚本的脚本)。下面显示的提取 VBA 脚本从 https://www.mediafire[.]com/file/xnqxmqlcj51501d/7000m.txt/file 下载并执行恶意的 PowerShell 脚本。

PowerShell 脚本分析

恶意的 PowerShell 脚本使用字符串替换进行混淆,以逃避检测并使分析更加困难。

它包含十六进制格式的其他 PowerShell 脚本块,这些脚本块将部署在受感染的机器中,旨在通过设置持久性、绕过 AMSI、禁用 Windows Defender 并创建更新恶意软件的机制来准备环境。最终目标是安装两个 .NET 二进制文件,即加载器和有效负载(XWORM / AGENTTESLA)。

删除恶意文档

恶意软件首先删除原始 Word 文档,首先终止进程 Winword.exe,然后删除位于每个用户的默认 DownloadsDesktop 文件夹中的所有 .DOCX 文件。此初始步骤显示了恶意软件的破坏性,以及它如何潜在地损害用户的数据。

持久性

恶意软件在路径 C:\ProgramData\MinMinons 中创建一个目录,该目录用于存储其他 PowerShell 脚本和二进制文件。然后,将当前正在运行的 PowerShell 脚本复制到 C:\ProgramData\MinMinons\Candlegraphy.\_\_\_

接下来,恶意软件会反混淆用于创建持久性的第一个嵌入式 PowerShell 脚本。它首先写入一个 JScript 文件,该文件通过 ActiveXObject shell 调用保存在 C:\ProgramData\MinMinons\Candlegraphy.\_\_\_ 中的原始 PowerShell 脚本,然后创建一个名为“MOperaChrome”的计划任务,以使用 Microsoft 签名的 Windows 脚本宿主 (WSH) 实用程序wscript.exe)运行 JScript 文件。

AMSI 绕过

第二个嵌入式 PowerShell 脚本负责通过修补 amsiInitFailed 标志来绕过 AMSI。这样做时,AMSI 的初始化将失败,从而阻止对正在进行的进程启动任何扫描。此外,PowerShell 脚本会继续禁用 Microsoft Windows Defender 服务。

用户创建

该脚本会创建一个名为“System32”的本地管理员帐户,并将其添加到远程桌面用户组。这使攻击者能够通过远程桌面协议 (RDP) 登录。接下来,该脚本会禁用计算机的防火墙,以允许不受边缘控制筛选的入站 RDP 连接尝试。

恶意软件更新持久性

第三个嵌入式脚本存储一个辅助 JScript 文件,其目的是下载恶意软件的修订版或更新版。此文件将保存到 C:\ProgramData\MinMinons\miguan.js 的预定位置。此外,还会创建一个名为 (“miguaned”) 的计划任务,以通过 wscript.exe 执行 JScript 文件,类似于前面描述的任务。

JScript 通过调用 ActiveXObject 和以下 CLSID {F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}(对应于 Shell 对象)来创建 WScript.Shell 对象实例,然后从 URL https://billielishhui.blogspot[.]com/atom.xml 下载更新的 PowerShell 恶意软件。

.NET 加载器

自定义 DOTNET 加载器采用 P/INVOKE 技术来调用本机 Windows API,并通过 进程掏空将有效负载注入签名的 Microsoft 二进制文件中。

加载器的代码采用了各种混淆技术来阻碍分析,包括使用死指令、重命名符号以使代码可读性更低且更混乱以及编码字符串。幸运的是,可以使用像 de4dot 这样的工具来输出其人类可读版本。

恶意软件利用 LoadLibraryGetProcAddress API 来访问所需的 Windows API。为了模糊这些 API 的名称,加载器使用一系列替换和字符串反转方法将其以编码格式存储在二进制文件中。

加载器随后使用 CreateProcessA API 以暂停状态启动一个进程。以下是它用作恶意代码宿主的可执行文件列表:

  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegSvcs.exe
  • C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegSvcs.exe
  • C:\Windows\Microsoft.NET\Framework\v3.5\Msbuild.exe

这些二进制文件经过系统签名和信任,可以逃避依赖于系统进程白名单的安全软件的检测。然后,它使用 Zwunmapviewofsection 来取消映射目标进程的内存,将有效负载写入暂停的进程,然后使用 ResumeThread API 恢复线程。

最终有效负载

在我们的研究中,我们发现威胁行为者一直在部署不同的有效负载。具体来说,我们观察到 2 个家族:XWORM 和 AGENTTESLA。

XWORM 因其能够采用复杂的虚拟化和沙箱检测等功能而在地下犯罪市场中声名狼藉,这些功能用于避免检测并支持在受感染系统内的持久性。

尤其令人担忧的是,XWORM 在互联网上可以很容易地获得破解版本,其中 2.1 版本尤其普遍。这突显了地下网络犯罪市场的危险性以及恶意行为者可以轻松访问和利用强大工具的情况。

观察到 XWORM 家族的两个不同版本,分别为 2.2 和 3.1 版本。以下是 XWORM 样本的纯文本配置。

AGENTTESLA 是一种用 .NET 编写的木马和凭据窃取器。虽然它最早出现在 2014 年,但现在它是最活跃和恶意的软件之一。AGENTTESLA 定价合理,并包含开发人员的支持,因此技术技能有限的网络犯罪分子也可以轻松访问。

我们分析的样本经过了大量混淆处理,伪装成 AVG 安装程序,并利用 Discord 进行 C2 通信。它通过以下 webhook 将盗取的信息上传到攻击者的 Discord 频道:https://discord[.]com/api/webhooks/1089956337733087274/uYNA_D8Ns1z9NZ3B1mGp0XXyGq-785KLGIfEAZsrz3TJd5fvOjXA927F7bUTTzbNT6Zk

观察到的对手战术和技术

Elastic 使用 MITRE ATT&CK 框架来记录威胁使用的常见战术、技术和程序。

战术

战术代表一种技术或子技术的“原因”。它们代表了对手的战术目标:执行操作的原因。

技术/子技术

技术和子技术代表对手如何通过执行操作来实现战术目标。

检测逻辑

YARA

Elastic Security 创建了 YARA 规则来识别此活动。以下是用于识别 XWORM 和 AGENTTESLA 恶意软件家族的 YARA 规则。

rule Windows_Trojan_Xworm_732e6c12 {
meta:
    author = "Elastic Security"
    id = "732e6c12-9ee0-4d04-a6e4-9eef874e2716"
    fingerprint = "afbef8e590105e16bbd87bd726f4a3391cd6a4489f7a4255ba78a3af761ad2f0"
    creation_date = "2023-04-03"
    last_modified = "2023-04-03"
    os = "Windows"
    arch = "x86"
    category_type = "Trojan"
    family = "Xworm"
    threat_name = "Windows.Trojan.Xworm"
    source = "Manual"
    maturity = "Diagnostic"
    reference_sample = "bf5ea8d5fd573abb86de0f27e64df194e7f9efbaadd5063dee8ff9c5c3baeaa2"
    scan_type = "File, Memory"
    severity = 100

strings:
    $str1 = "startsp" ascii wide fullword
    $str2 = "injRun" ascii wide fullword
    $str3 = "getinfo" ascii wide fullword
    $str4 = "Xinfo" ascii wide fullword
    $str5 = "openhide" ascii wide fullword
    $str6 = "WScript.Shell" ascii wide fullword
    $str7 = "hidefolderfile" ascii wide fullword
condition:
    all of them}

rule Windows_Trojan_AgentTesla_d3ac2b2f {
meta:
    author = "Elastic Security"
    id = "d3ac2b2f-14fc-4851-8a57-41032e386aeb"
    fingerprint = "cbbb56fe6cd7277ae9595a10e05e2ce535a4e6bf205810be0bbce3a883b6f8bc"
    creation_date = "2021-03-22"
    last_modified = "2022-06-20"
    os = "Windows"
    arch = "x86"
    category_type = "Trojan"
    family = "AgentTesla"
    threat_name = "Windows.Trojan.AgentTesla"
    source = "Manual"
    maturity = "Diagnostic, Production"
    reference_sample = "65463161760af7ab85f5c475a0f7b1581234a1e714a2c5a555783bdd203f85f4"
    scan_type = "File, Memory"
    severity = 100

strings:
    $a1 = "GetMozillaFromLogins" ascii fullword
    $a2 = "AccountConfiguration+username" wide fullword
    $a3 = "MailAccountConfiguration" ascii fullword
    $a4 = "KillTorProcess" ascii fullword
    $a5 = "SmtpAccountConfiguration" ascii fullword
    $a6 = "GetMozillaFromSQLite" ascii fullword