ESET:OceanLotus 网络组织的新后门交付方案

在这篇文章中,我们将告诉您网络组织 OceanLotus(APT32 和 APT-C-00)最近如何使用公开可用的漏洞之一 CVE-2017-11882、Microsoft Office 中的内存损坏漏洞,以及该组织的恶意软件如何在受感染的系统上持久存在而不留下任何痕迹。 接下来,我们将介绍自 2019 年初以来,该组织如何使用自解压档案来运行代码。

OceanLotus 专门从事网络间谍活动,优先目标是东南亚国家。 攻击者伪造文件吸引潜在受害者的注意,说服他们执行后门,并且还在开发工具。 用于创建蜜罐的方法因攻击而异,从“双扩展”文件、自解压档案、带有宏的文档到已知的漏洞。

ESET:OceanLotus 网络组织的新后门交付方案

在 Microsoft 公式编辑器中使用漏洞

2018年年中,OceanLotus开展了一次利用CVE-2017-11882漏洞的活动。 360威胁情报中心专家分析了该网络组织的一份恶意文档(Research 中文是什么意思),包括漏洞利用的详细描述。 下面的帖子包含了此类恶意文档的概述。

第一阶段

文件 FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3)与上述研究中提到的类似。 它很有趣,因为它针对的是对柬埔寨政治感兴趣的用户(CNRP - 柬埔寨救国党,于 2017 年底解散)。 尽管有 .doc 扩展名,但该文档是 RTF 格式(见下图),包含垃圾代码,而且也被扭曲。

ESET:OceanLotus 网络组织的新后门交付方案
图 1. RTF 中的“垃圾”

即使存在乱码元素,Word 也能成功打开此 RTF 文件。 如图 2 所示,偏移量 0xC00 处有一个 EQNOLEFILEHDR 结构,后面是 MTEF 标头,然后是该字体的 MTEF 条目(图 3)。

ESET:OceanLotus 网络组织的新后门交付方案
图 2. FONT 输入值

ESET:OceanLotus 网络组织的新后门交付方案
图3。 FONT记录格式

字段中可能存在溢出 姓名,因为在复制之前没有检查其大小。 名称太长会触发漏洞。 从 RTF 文件的内容(图 0 中的偏移量 26xC2)可以看出,缓冲区填充了 shellcode,后跟一个虚拟命令 (0x90) 和返回地址 0x402114。 地址是一个对话框元素 EQNEDT32.exe, 表示指令 RET。 这会导致 EIP 指向字段的开头 姓名包含 shellcode。

ESET:OceanLotus 网络组织的新后门交付方案
图 4. 漏洞利用 shellcode 的开始

地址 0x45BD3C 存储一个被取消引用的变量,直到它到达指向当前加载的结构的指针 MTEFData。 其余的 shellcode 在这里。

shellcode 的目的是执行嵌入在打开文档中的第二段 shellcode。 原始 shellcode 首先尝试通过迭代所有系统描述符来查找打开文档的文件描述符(NtQuerySystemInformation 有论据 SystemExtendedHandleInformation)并检查它们是否匹配 PID 描述符和 PID 过程 WinWord 以及文档是否是使用访问掩码打开的 - 0x12019F.

为了确认已找到正确的句柄(而不是另一个打开文档的句柄),使用以下函数显示文件的内容 CreateFileMapping,并且 shellcode 检查文档的最后四个字节是否匹配“yyyy”(寻蛋法)。 找到匹配项后,文档将被复制到临时文件夹 (GetTempPath)如何 ole.dll。 然后读取文档的最后 12 个字节。

ESET:OceanLotus 网络组织的新后门交付方案
图 5. 文档结束标记

标记之间的 32 位值 AABBCCDD и yyyy 是下一个 shellcode 的偏移量。 它是使用函数调用的 CreateThread。 提取了与 OceanLotus 组织之前使用的相同的 shellcode。 Python仿真脚本,我们于 2018 年 XNUMX 月发布,仍然适用于第二阶段转储。

第二阶段

拆卸组件

文件和目录名称是动态选择的。 代码随机选择可执行文件或DLL文件的名称 C:Windowssystem32。 然后它向其资源发出请求并检索该字段 FileDescription 用作文件夹名称。 如果这不起作用,代码会从目录中随机选择一个文件夹名称 %ProgramFiles% или C:Windows (来自 GetWindowsDirectoryW)。 它避免使用可能与现有文件冲突的名称,并确保它不包含以下单词: windows, Microsoft, desktop, system, system32 или syswow64。 如果目录已存在,则名称中会附加“NLS_{6 个字符}”。

资源 0x102 被分析并将文件转储到 %ProgramFiles% или %AppData%,到随机选择的文件夹。 更改创建时间以使其具有相同的值 kernel32.dll.

例如,这是通过选择可执行文件创建的文件夹和文件列表 C:Windowssystem32TCPSVCS.exe 作为数据源。

ESET:OceanLotus 网络组织的新后门交付方案
图 6. 提取各种组件

资源结构 0x102 在滴管中是相当复杂的。 简而言之,它包含:
— 文件名
— 文件大小和内容
— 压缩格式 (COMPRESSION_FORMAT_LZNT1,由函数使用 RtlDecompressBuffer)

第一个文件重置为 TCPSVCS.exe,这是合法的 AcroTranscoder.exe (根据 FileDescription,SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).

您可能已经注意到,某些 DLL 文件大于 11 MB。 这是因为可执行文件内放置了大量连续的随机数据缓冲区。 这可能是避免某些安全产品检测的一种方法。

确保坚持

资源 0x101 释放器中包含两个 32 位整数,指定如何提供持久性。 第一个值指定恶意软件在没有管理员权限的情况下将如何持续存在。

ESET:OceanLotus 网络组织的新后门交付方案
表 1. 无管理员权限的持久化机制

第二个整数的值指定恶意软件在以管理员权限运行时应如何实现持久性。

ESET:OceanLotus 网络组织的新后门交付方案
表 2. 具有管理员权限的持久化机制

服务名称是不带扩展名的文件名; 显示名称是文件夹的名称,但如果它已经存在,则会在其后附加字符串“Revision 1”(数量不断增加,直到找到未使用的名称)。 操作员确保服务的持久性是稳健的 - 如果出现故障,服务应在 1 秒后重新启动。 然后是值 WOW64 新服务的注册表项设置为4,表明它是32位服务。

计划任务是通过几个COM接口创建的: ITaskScheduler, ITask, ITaskTrigger, IPersistFile и ITaskScheduler。 本质上,恶意软件创建隐藏任务,设置帐户信息以及当前用户或管理员信息,然后设置触发器。

这是一项每日任务,持续时间为 24 小时,两次执行之间的间隔为 10 分钟,这意味着它将连续运行。

恶意位

在我们的示例中,可执行文件 TCPSVCS.exe (AcroTranscoder.exe)是加载随其一起重置的 DLL 的合法软件。 在这种情况下,有趣的是 Flash Video Extension.dll.

它的功能 DLLMain 只是调用另一个函数。 存在一些模糊谓词:

ESET:OceanLotus 网络组织的新后门交付方案
图 7. 模糊谓词

经过这些误导性检查后,代码会得到一个部分 .text 文件 TCPSVCS.exe,将其防御更改为 PAGE_EXECUTE_READWRITE 并通过添加虚拟指令来重写它:

ESET:OceanLotus 网络组织的新后门交付方案
图 8. 指令序列

最后是函数地址 FLVCore::Uninitialize(void), 导出 Flash Video Extension.dll,添加指令 CALL。 这意味着恶意DLL加载后,当运行时调用 WinMain в TCPSVCS.exe,指令指针将指向NOP,导致 FLVCore::Uninitialize(void), 下个阶段。

该函数只是创建一个互斥体,开头为 {181C8480-A975-411C-AB0A-630DB8B0A221}后跟当前用户名。 然后,它读取转储的 *.db3 文件(其中包含与位置无关的代码),并使用 CreateThread 来执行内容。

*.db3 文件的内容是 OceanLotus 组织通常使用的 shellcode。 我们再次使用我们发布的模拟器脚本成功解压了其有效负载 在GitHub上.

脚本提取了最后阶段。 该组件是一个后门,我们已经分析过 之前的海莲花研究。 这可以通过GUID来确定 {A96B020F-0000-466F-A96D-A91BBF8EAC96} 二进制文件。 恶意软件配置在 PE 资源中仍然是加密的。 它的配置大致相同,但 C&C 服务器与以前的不同:

- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz

OceanLotus 团队再次展示了不同技术的组合来避免检测。 他们带回来了一张“精致”的感染过程图。 通过选择随机名称并用随机数据填充可执行文件,它们减少了可靠 IoC 的数量(基于哈希值和文件名)。 而且,由于使用了第三方DLL加载,攻击者只需删除合法的二进制文件即可 AcroTranscoder.

自解压档案

在 RTF 文件之后,该小组转向使用常见文档图标的自解压 (SFX) 存档,以进一步迷惑用户。 Threatbook 对此写道(链接 的英文)。 启动后,自解压 RAR 文件将被删除,并执行带有 .ocx 扩展名的 DLL,其最终有效负载已在之前记录过 {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll。 自 2019 年 XNUMX 月中旬以来,OceanLotus 一直在重复使用该技术,但随着时间的推移改变了一些配置。 在本节中,我们将讨论技术和变化。

制作诱饵

文件 THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB)于 2018 年首次发现。 这个 SFX 文件是明智地创建的 - 在描述中(版本信息)它说这是一张 JPEG 图像。 SFX 脚本如下所示:

ESET:OceanLotus 网络组织的新后门交付方案
图 9.SFX 命令

恶意软件重置 {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC),还有一张图片 2018 thich thong lac.jpg.

诱饵图像如下所示:

ESET:OceanLotus 网络组织的新后门交付方案
图 10. 诱饵图像

您可能已经注意到,SFX 脚本中的前两行调用 OCX 文件两次,但这不是错误。

{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)

OCX 文件的控制流程与其他 OceanLotus 组件非常相似 - 许多命令序列 JZ/JNZ и PUSH/RET,与垃圾代码交替。

ESET:OceanLotus 网络组织的新后门交付方案
图 11. 混淆代码

过滤掉垃圾代码后,导出 DllRegisterServer,称为 regsvr32.exe,看起来像这样:

ESET:OceanLotus 网络组织的新后门交付方案
图 12. 基本安装程序代码

基本上,在第一次通话时 DllRegisterServer 导出设置注册表值 HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model 对于 DLL 中的加密偏移量(0x10001DE0).

当第二次调用该函数时,它会读取相同的值并在该地址执行。 从这里读取并执行 RAM 中的资源和许多操作。

该 shellcode 与过去 OceanLotus 活动中使用的 PE 加载程序相同。 可以使用以下方法进行仿真 我们的剧本。 最后他重置了 db293b825dcc419ba7dc2c49fa2757ee.dll,将其加载到内存中并执行 DllEntry.

DLL 提取其资源的内容,对其进行解密 (AES-256-CBC) 和解压缩 (LZMA)。 该资源具有特定的格式,易于反编译。

ESET:OceanLotus 网络组织的新后门交付方案
图 13. 安装程序配置结构 (KaitaiStruct Visualizer)

配置是明确指定的 - 根据权限级别,二进制数据将被写入 %appdata%IntellogsBackgroundUploadTask.cpl или %windir%System32BackgroundUploadTask.cplSysWOW64 对于 64 位系统)。

通过创建名为的任务来确保进一步的持久性 BackgroundUploadTask[junk].job哪里 [junk] 代表一组字节 0x9D и 0xA0.

任务应用程序名称 %windir%System32control.exe,参数值为下载的二进制文件的路径。 隐藏任务每天都会运行。

从结构上来说,CPL 文件是一个具有内部名称的 DLL ac8e06de0a6c4483af9837d96504127e.dll,导出一个函数 CPlApplet。 该文件解密其唯一的资源 {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll,然后加载这个DLL并调用它唯一的导出 DllEntry.

后门配置文件

后门配置已加密并嵌入其资源中。 配置文件的结构与上一个非常相似。

ESET:OceanLotus 网络组织的新后门交付方案
图 14. 后门配置结构(KaitaiStruct Visualizer)

尽管结构相似,但许多字段值已从图中所示的值进行了更新 我们的旧报告.

二进制数组的第一个元素包含一个 DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), 经腾讯鉴定。 但由于导出名称已从二进制文件中删除,因此哈希值不匹配。

额外研究

在收集样本时,我们注意到一些特征。 刚才描述的标本出现在 2018 年 2019 月左右,其他类似标本最近出现在 XNUMX 年 XNUMX 月中旬至 XNUMX 月初。 SFX 存档被用作感染媒介,丢弃合法的诱饵文档和恶意 OSX 文件。

尽管 OceanLotus 使用假时间戳,但我们注意到 SFX 和 OCX 文件的时间戳始终相同(0x57B0C36A (世界标准时间 08 年 14 月 2016 日 @ 晚上 7:15)和 0x498BE80F (分别为 02/06/2009 @ 7:34am UTC)。 这可能表明作者有某种“设计者”,使用相同的模板,只是改变了一些特征。

在我们自2018年初以来研究的文件中,有各种名称表明了攻击者感兴趣的国家:

— 柬埔寨媒体新联系信息(New).xls.exe
— 李建香 (个人简历).exe(简历的伪造 pdf 文档)
— 反馈,28 年 29 月 2018 日至 XNUMX 日在美国举行的集会.exe

自从发现后门 {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll 以及几位研究人员发布的分析结果,我们观察到恶意软件配置数据发生了一些变化。

首先,作者开始从辅助 DLL 中删除名称(DNSprov.dll 和两个版本 HttpProv.dll)。 然后操作员停止打包第三个 DLL(第二个版本 HttpProv.dll),选择只嵌入一个。

其次,许多后门配置字段被更改,随着许多 IoC 可用,可能会逃避检测。 作者修改的重要字段包括:

  • AppX 注册表项已更改(请参阅 IoC)
  • 互斥编码字符串(“def”、“abc”、“ghi”)
  • 端口号

最后,分析的所有新版本都在 IoC 部分中列出了新的 C&C。

发现

海莲花不断发展。 网络小组专注于完善和扩展工具和诱饵。 作者使用引人注目的文档来伪装恶意负载,这些文档的主题与目标受害者相关。 他们开发新方案并使用公开可用的工具,例如公式编辑器漏洞。 此外,他们正在改进工具以减少受害者计算机上残留的工件数量,从而减少被防病毒软件检测到的机会。

妥协指标

妥协指标以及 MITRE ATT&CK 属性均可用 关于Welive安全 и 在GitHub上.

来源: habr.com

添加评论