- 概述
蔓灵花,又名"Bitter"、"APT-C-08"、"T-APT-17"以及"苦象",常对南亚周边及孟加拉湾海域的相关国家发起网络攻击,主要针对巴基斯坦和中国两国。其攻击目标主要包括政府部门、核工业、能源、国防、军工、船舶工业、航空工业以及海运等行业,其主要意图是窃取敏感资料。该组织从2013年起就开始活跃,近年长期通过攻击组件下发的方式来完成对目标设备的控制行为,大致的攻击流程如下,以恶意文档文件如chm文档等作为攻击入口,引诱用户打开执行,从而调用如xxx.msi等软件下载后续攻击组件。观成安全分析人员通过长期跟踪和样本狩猎主动发现Bitter组织使用频率最高的攻击组件wmRAT的10个样本,对比进行分析发现有如下特点:
- 各个样本的整体执行逻辑、通信协议无变化并且依旧使用大端口交互通信
- 各个样本的通信数据格式无变化,为四字节标识/控制码+四字节长度+数据/控制指令
- 各个样本的字符串加密和通信加密均采用移位加密的方式,不同的样本使用的密钥有所变化
- 各个样本发送的心跳数据和心跳时间均有变化,发送的心跳数据多为"X"、"-"、"0"、"1"、"."几种元素的组合
- 控制指令有所增加,由最初的9个增加到14个,功能较之前更为完善,并且部分样本中存在重复使用的行为
- 与2022年的版本相比,增加网络连接测试
可以看到各个样本在休眠特征、数据格式以及上线包上没有发生变化,而在网络连接测试、使用的密钥情况、心跳包和控制指令方面,不同的样本之间出现了差异,逐渐进行更新迭代,攻击武器的发展趋向成熟。以下将从这两个方面进行详细分析。
- 基本信息
此次分析的10个wmRAT样本的基本信息如下表:
表 1 样本基本信息
编号 | 样本hash | C2 | 端口 | 协议 | 日期 |
样本1 | b7a9407b47baf7442e0baf94a3b4cc8b7420cb01364fc8e6a3c622b7ae39301f | kryoblockbind.net 23.189.40.206 | 31174 | TCP | 2022-10-12 |
样本2 | caf871247b7256945598816e9c5461d64b6bdb68a15ff9f8742ca31dc00865f8 | devqrytoprar.net 185.243.112.42 | 80 | TCP | 2022-12-01 |
样本3 | 5ab76cf85ade810b7ae449e3dff8a19a018174ced45d37062c86568d9b7633f9 | devqrytoprar.net 185.243.112.42 | 47810 | TCP | 2023-01-04 |
样本4 | 7bda85911c5d2d51655f20d0362d87d114465974852dd1add423dfd2cef3fc53 | uxmesysconsole.com 77.72.18.158 | 60099 | TCP | 2023-08-10 |
样本5 | 32005ebee5daadaa5ea96ae9891632b68184c29e92908080dcfcef7f3c0c4f83 | uxmesysconsole.com 77.72.18.158 | 60099 | TCP | 2023-09-04 |
样本6 | 813c67414723ea162e789b1fc4b269839351863050f27a2f906426dac3a86f39 | dtzappaccount.com 45.66.248.66 | 59142 | TCP | 2023-09-23 |
样本7 | 552ec2ce24113e3f46b4e0cf6bc91eea483ad2eaf351eb92ee77f882b96d4006 | uxmesysconsole.com 77.72.18.158 | 80 | TCP | 2023-10-24 |
样本8 | 14e43110cc3c40bf56d95df0079cc744055b1568dbceac05b50a2c0159bef872 | dtzappaccount.com 45.66.248.66 | 59142 | TCP | 2023-11-13 |
样本9 | fc9f84bad598c057b595efbca7ae0ae9a1678de7f2185275953424b3ec47a00e | dtzappaccount.com 45.66.248.66 | 59142 | TCP | 2023-11-13 |
样本10 | 132098213b5923463611e6fc77bfce0cfad3d727566ce0e87e9723456c698ae6 | maxdimservice.com 89.40.206.85 | 52529 | TCP | 2023-11-28 |
- 共同特征
- 休眠
样本运行后会多次调用Sleep函数使程序进入休眠,试图绕过沙箱检测,所有样本都有此特征。
图 1 休眠代码
-
- 数据格式
各个样本均使用自定义的TCP通信协议,通信数据包具有一定的结构,发送数据使用三次send函数发送,也使用三次recv函数接收。
第一次发送、接收的数据为控制码或标识码;第二次发送、接收的为第三次要发送数据的长度;第三次则为实际传输的数据,服务端发送控制指令,客户端返回窃取的数据,采用所有字节(+密钥)的方式加密传输。
图 2 数据结构
-
- 上线包
样本在 TCP连接成功后都获取电脑名、用户名、系统版本这三个设备信息上传C2,数据中间用”||”符号拼接。各个样本的上线包格式不变,为四字节标识码+四字节数据长度+上线数据。
图 3 上线信息
图 4 上线包流量
图 5 数据解密
- 差异性表现
- 网络连接测试
各个样本连接测试都有区别,共使用过三种网络连接测试,包括microsoft、baidu和Intel。
图 6 microsoft连接测试
图 7 baidu连接测试
图 8 Intel连接测试
-
- 密钥变化
部分样本使用的字符串加密密钥和通信加密密钥存在差别,目前样本使用过的字符串加密密钥有0x5、0x14、0x2E、0x31和0x2D,使用过的通信加密密钥有0x5、0x14、0x13。其中2023年2月之前的样本字符串加密和通信加密均使用相同的加密密钥,在这之后不再使用相同的密钥,这样即使攻击者获得了样本字符串加密的密钥,也无法轻易推断后续通信的密钥,这种差异化的加密策略增加了破解的难度。
表 2 样本字符串加密密钥
编号 | 字符串加密密钥 | 编号 | 字符串加密密钥 |
样本1 | 0x5 | 样本6 | 0x31 |
样本2 | 0x14 | 样本7 | 0x2E |
样本3 | 0x14 | 样本8 | 0x31 |
样本4 | 0x2E | 样本9 | 0x31 |
样本5 | 0x2E | 样本10 | 0x2D |
表 3 样本通信加密密钥
编号 | 通信加密密钥 | 编号 | 通信加密密钥 |
样本1 | 0x5 | 样本6 | 0x13 |
样本2 | 0x14 | 样本7 | 0x13 |
样本3 | 0x14 | 样本8 | 0x13 |
样本4 | 0x13 | 样本9 | 0x13 |
样本5 | 0x13 | 样本10 | 0x14 |
-
- 心跳包
各个样本发送的心跳数据和心跳时间均有变化。发送的心跳数据多为"X"、"-"、"0"、"1"、"."几种元素的组合,心跳时间的精确度从一开始的整数变成浮点数,心跳包的格式为四字节标识符+四字节长度+数据,数据在样本中硬编码。其中最新批露的样本连接成功会每隔150.045秒发送心跳包到服务器,见下图:
图 9 心跳包
图 10 心跳包流量
表 4 各版本心跳包数据及时间
编号 | 数据 | 时间 |
样本1 | 00 00 00 00 00 00 00 01 5d(X) | 120秒 |
样本2 | 00 00 00 00 00 00 00 01 6c(X) | 120秒 |
样本3 | 00 00 00 00 00 00 00 01 44(0) | 120秒 |
样本4 | 00 00 00 0F 00 00 00 02 40 40(--) | 152.555秒 |
样本5 | 00 00 00 0F 00 00 00 03 40 40 40(---) | 153.555秒 |
样本6 | 00 00 00 15 00 00 00 02 44 40(1-) | 140.550秒 |
样本7 | 00 00 00 0F 00 00 00 02 40 40(--) | 152.555秒 |
样本8 | 00 00 00 15 00 00 00 01 44 (1) | 141.650秒 |
样本9 | 00 00 00 15 00 00 00 02 41 41(..) | 141.650秒 |
样本10 | 00 00 00 11 00 00 00 02 41 45(-1) | 150.045秒 |
-
- 控制指令
在2022年批露的样本中可以看到,指令较少,功能不完善,存在较多无功能指令,远控程序还处于研发阶段。相较于2022年的老样本,最新批露的样本中控制指令有所增加,由最初的9个增加到14个,功能较之前更为完善,远控程序开发的已经较为成熟。对各个样本总结后发现使用的控制指令共有四类,见下表。
表 5 四种控制指令
第一种 | 第二种 | 第三种 | 第四种 |
0 获取信息上传,包括计算机名、用户名、磁盘占用率等 | 5 发送截屏数据到服务器 | 7 发送截屏数据到服务器 | 0 将文件信息发送至服务器 |
1 远程shell | 6 接收文件数据 | 10 接收文件数据 | 3 关闭指定文件流 |
5 关闭文件流 | 8 从服务器接收信息,寻找指定文件处理后发送至服务器 | 12 从服务器接收信息,寻找指定文件处理后发送至服务器 | 4 向指定文件流中写入数据 |
6 接收文件到文件流打开的文件路径 | 10 打开指定的URL,并获取文件 | 14 打开指定的URL,并获取文件 | 6 打开指定文件流,并向服务器传输数据 |
8 打开文件,上传数据,单次0x2000字节 | 11 查找指定目录文件,并进行操作 | 15 查找指定目录文件,并进行操作 | 9 发送文件数据到远程服务器,并计算发送进度 |
11 上传文件数据单次上传0x2000字节及以下 | 13 搜索指定目录文件,将文件信息发送至服务器 | 19 搜索指定目录文件,将文件信息发送至服务器 | 10 申请空间输入输出流 |
12 搜索指定路径,将信息上传 | 15 获取信息上传,包括计算机名、用户名、磁盘占用率等 | 21 获取信息上传,包括计算机名、用户名、磁盘占用率等 | 11 打开文件,上传数据 |
15 搜索指定路径,将文件名上传 | 16 使用powershell执行命令、创建管道获取数据等 | 22 使用powershell执行命令、创建管道获取数据等 | 12 打开指定的URL,并获取文件 |
20 搜索指定目录文件,将文件信息发送至服务器,某些大小格式的文件不支持 | 20 关闭指定文件流 | 25 打开指定文件流,并向服务器传输数据 | 13 查找指定目录文件,并进行操作 |
21 向指定文件流中写入数据 | 28 发送文件数据到远程服务器,并计算发送进度 | 15 搜索指定目录文件,将文件信息发送至服务器 | |
23 打开指定文件流,并向服务器传输数据 | 30 关闭指定文件流 | 17 获取信息上传,包括计算机名、用户名、磁盘占用率等 | |
26 发送文件数据到远程服务器,并计算发送进度 | 31 向指定文件流中写入数据 | 18 使用powershell执行命令、创建管道获取数据等 | |
26 发送截屏数据到服务器 | |||
27 接收文件数据 |
模拟服务器下发指令lstcts,获取信息包括计算机名、用户名、磁盘占用率等,见下图:
图 11 控制指令流量
图 12 数据解密
- 检测
观成瞰云(ENS)-加密威胁智能检测系统能够对表格中列举的所有wmRAT样本进行检出,用最新批露的样本举例,检测结果见下图。
图 13 观成瞰云(ENS)-加密威胁智能检测系统检测结果
- 总结
在对蔓灵花的远控程序"wmRAT"多个样本的分析中可以看出该组织不断在对攻击武器做开发使功能逐渐完善,但是样本整体执行逻辑没有变化,通信使用的加密手法比较简单,功能仍然以文件搜索和上传下载等为主。在流量侧,攻击武器使用TCP协议进行通信,自定义加密格式不定,变化灵活,因此这种加密流量检测的难度进一步提高。观成安全团队将对蔓灵花组织的动向做长期跟踪,针对各类使用自定义加密的最新威胁密切跟进,并随时更新方案进行应对。