导航菜单

双枪团伙新动向,借云服务管理数十万僵尸网络

 

概述

近日,我们的域名异常监测系统 DNSMon 捕捉到域名 pro.csocools.com 的异常活动。根据数据覆盖度估算,感染规模超过100k。我们通过告警域名关联到一批样本和 C2,分析样本后发现是与双枪恶意程序相关的团伙开始新的大规模活动。近年来双枪团伙屡次被安全厂商曝光和打击,但每次都能死灰复燃高调复出,可见其下发渠道非常庞大。本次依然是因为受感染主机数量巨大,导致互联网监测数据异常,触发了netlab的预警系统。本报告中我们通过梳理和这些URL相关的C2发现了一些模式,做了一些推测。

我们观察到恶意软件除了使用百度贴吧图片来分发配置文件和恶意软件,还使用了阿里云存储来托管配置文件。为了提高灵活性和稳定性,加大阻拦难度,开发者还利用百度统计这种常见的网络服务来管理感染主机的活跃情况。同时我们在样本中多次发现了腾讯微云的URL地址,有意思的是我们在代码中并没有找到引用这些地址的代码。至此,双枪团伙第一次将BAT三大厂商的服务集成到了自己的程序中,可以预见使用开放服务来管理僵尸网络或将成为流行趋势。有必要澄清的是,这些公开服务本身均为技术中立,此恶意代码中滥用这些公开服务完全是其作者的蓄意行为,各主要互联网公司均在用户许可中明确反对并采取措施抵御这些恶意滥用行为。

5月14日起,我们联系到了百度安全团队,采取了联合行动,对该恶意代码的传播范围做了度量,并采取了抵御措施。截止本文发稿,相关的恶意代码下载链接已经被阻断。百度安全团队对该事件的声明见文末。

 

IOC关联分析

从告警域名入手,通过DNS解析记录和样本流量分析建立IOC关联,过滤掉孤立和噪音节点,我们找到了一组与此次传播活动有关的关键C2。从下面截取的部分IOC关联图可以看出,几乎所有的域名都和两个关键的ip 地址 125.124.255.20 和 125.124.255.79 有关,围绕这两个ip地址,双枪团伙从19年下半年开始依次启用了一批域名来控制和下发恶意程序。事实上这个团伙长期且稳定的控制了大量 125.124.255.0/24 网段的ip地址,可以看出他们拥有非常丰富的网络资源。

双枪团伙新动向,借云服务管理数十万僵尸网络

通过样本溯源可以看到,这次大规模感染主要是通过诱导用户安装包含恶意代码的网游私服客户端,具体感染方式大体分为两种,下面进行深入分析。

双枪团伙新动向,借云服务管理数十万僵尸网络

感染方式1 — 启动器内包含恶意代码

阶段1 — 下载并加载cs.dll恶意文件

各类私服入口

双枪团伙新动向,借云服务管理数十万僵尸网络

点击下载链接跳到私服主页

双枪团伙新动向,借云服务管理数十万僵尸网络

登录器下载 “蟠龙军衔.zip”

双枪团伙新动向,借云服务管理数十万僵尸网络

含恶意代码的私服客户端启动器被用户下载并执行,恶意代码访问配置信息服务器,然后根据配置信息从百度贴吧下载并动态加载名为 cs.dll 的最新版本恶意程序。cs.dll 中的敏感字串使用了一种变形的 DES 加密方法,这种加密算法和我们之前捕捉到的双枪样本高度相似。我们从样本主体 exe 文件入手,逐步分析上述恶意行为。

  • 文件结构”蟠龙军衔.exe” PE Resource 中包含 7 个文件,Widget.dll 是客户端组件,资源文件中的cs.dll 是旧版的恶意程序。4 个 .sys 文件是私服客户端的驱动程序,虽然命名为Game Protect,但我们在代码中发现了劫持流量插入广告的代码。 双枪团伙新动向,借云服务管理数十万僵尸网络
  • 下载配置信息启动器创建线程访问加密配置文件 http://mtdlq.oss-cn-beijing.aliyuncs.com/cscsmt.txt 双枪团伙新动向,借云服务管理数十万僵尸网络 双枪团伙新动向,借云服务管理数十万僵尸网络页面包含 8 行 16 进制字串,与密钥 B2 09 BB 55 93 6D 44 47 循环异或即可解密。

    双枪团伙新动向,借云服务管理数十万僵尸网络解密后是 8 个百度贴吧图片的地址。

    双枪团伙新动向,借云服务管理数十万僵尸网络

  • 下载图片文件切割并重组 cs.dll 文件直接访问图片地址,图片文内容看起来像是随机生成的。 双枪团伙新动向,借云服务管理数十万僵尸网络恶意程序会下载图片文件,每张图片使用 ><>>>< 为标记来分隔图像数据和恶意代码数据。

    双枪团伙新动向,借云服务管理数十万僵尸网络把所有恶意代码拼接起来我们得到了阶段 2 的恶意程序 cs.dll。

    双枪团伙新动向,借云服务管理数十万僵尸网络恶意程序通过内存映射的方式加载上述 cs.dll,然后调用导出函数 abcd() 进入阶段 2 ,所以并没有文件落地。

    双枪团伙新动向,借云服务管理数十万僵尸网络

阶段2 — 上报主机信息,释放并加载恶意驱动

cs.dll 会进行一些简单的虚拟机和杀软对抗,利用百度统计服务上报 Bot 信息,释放第 3 阶段 VMP 加壳的驱动程序(包含x86/x64两个版本)。

  • DES 解密算法样本中的 DES 解密算法为恶意软件作者自定义实现,加密模式为 CBC,无填充。DES 加密算法的转换表与旧版(“双枪”木马的基础设施更新及相应传播方式的分析)相同 。本次恶意活动涉及的 DES 解密,都涉及 2 层解密,第一层解密,先以 Base64 算法解码字符串 dBvvIEmQW2s= 得到一份二进制数据,再以空密钥 \x00\x00\x00\x00\x00\x00\x00\x00 对上述二进制数据解密,得出字串 helloya\x00,再以此字串作为密钥,用自研 DES 算法解密其他大量密文数据。完整的解密过程如下: 双枪团伙新动向,借云服务管理数十万僵尸网络
  • 检查虚拟主机环境 VM 和 WM通过检查注测表项判断是否是 VMWare 主机,如果是 VM 主机代码则直接返回。 双枪团伙新动向,借云服务管理数十万僵尸网络检查系统服务 WayOSFw 是否存在,如果服务存在则直接返回。

    双枪团伙新动向,借云服务管理数十万僵尸网络

  • 创建 Bot ID使用系统 API 创建主机的 Bot ID,写入注册表 SOFTWARE\\PCID, 双枪团伙新动向,借云服务管理数十万僵尸网络
  • 利用百度统计服务管理 Bot恶意软件的开发者借用了百度统计接口的一些标准字段来上报主机敏感信息,利用百度统计这种常见的网络行为来管理感染主机的活跃情况。因为百度统计服务被大量网站使用,从流量上看是一套合规的浏览器网络行为,所以很难将其区分出来,加大了安全厂商打击的难度。恶意程序首先使用一个名为 DataWork() 的函数伪造浏览器请求,下载 hm.js 脚本。

    双枪团伙新动向,借云服务管理数十万僵尸网络 双枪团伙新动向,借云服务管理数十万僵尸网络保存返回信息中的用户 Cookie 信息 HMACCOUNT 到注册表。

    双枪团伙新动向,借云服务管理数十万僵尸网络 双枪团伙新动向,借云服务管理数十万僵尸网络通过 http://hm.baidu.com/hm.gif? 接口,恶意程序将提取到的统计脚本的版本信息this.b.v、用户 Cookie 信息、bot_id 和伪造的其它统计信息组包上报,恶意软件开发者使用百度统计的后台可以方便的管理和评估感染用户。

    双枪团伙新动向,借云服务管理数十万僵尸网络

  • 从 Dat 资源解密,创建,安装驱动检查是否安装了 XxGamesFilter 等私服客户端驱动。 双枪团伙新动向,借云服务管理数十万僵尸网络根据安装情况和操作系统版本选择不同的资源 ID,每一个资源对应不同版本的驱动(32 位系统使用 ID 为 111 或 109 资源,64 位系统使用 ID 为 110 或 112 的资源)。

    双枪团伙新动向,借云服务管理数十万僵尸网络资源是简单加密过的,以解密 32 位驱动为例,首先倒转数据顺序,然后逐字节和系统版本数值 32 异或,得到一个 VMP 加壳的驱动文件。

    双枪团伙新动向,借云服务管理数十万僵尸网络检测是否存在 TeSafe 驱动,如果存在刚中断感染流程。计算 TeSafe+{Computer Name} 的 MD5 值,检测是否存在名为该 MD5 字串的驱动,如果存在说明系统已经被感染过,也会中断感染流程。

    //拼接字串
    +00   54 65 53 61 66 65 2B 57 49 4E 2D 52 48 39 34 50      TeSafe+WIN-RH94P       
    +10   42 46 43 37 34 41 00 00 00 00 00 00 00 00 00 00      BFC74A..........       
    //拼接字串的MD5值 
    +00   46 34 36 45 41 30 37 45 37 39 30 33 33 36 32 30      F46EA07E79033620       
    +10   43 45 31 33 44 33 35 44 45 31 39 41 41 43 34 32      CE13D35DE19AAC42       
    

    如果系统 EnableCertPaddingCheck 注册表项关闭,则替换文件末尾 16 字节为随机数据。这样每个感染主机上的样本 HASH 值完全不一样,可以对抗基于 HASH 查杀的方案。

    双枪团伙新动向,借云服务管理数十万僵尸网络 双枪团伙新动向,借云服务管理数十万僵尸网络将驱动程序释放到 TEMP 目录下,文件名为长度为 7 的随机字符串。例如:”C:\Users\{User Name}\AppData\Local\Temp\iiitubl”

    注册驱动文件启动服务并检测安装是否成功。

    双枪团伙新动向,借云服务管理数十万僵尸网络

阶段3 — 劫持系统进程,下载后续恶意程序

驱动运行后会拷贝自己到 Windows/system32/driver/{7个随机字符}.sys,伪造驱动设备信息为常见的合法驱动,如 fltMgr.sys ,向系统进程 Lassas.exe 和 svchost.exe 注入 DLL 模块。完成整个初始化过程后,就形成了一个驱动和 DLL 模块通过 DeviceIoControl() 通信合作来完成作务的工作模式,这是一个驱动级别的下载器。所有敏感的配置信息都保存在驱动内部,DLL 通过调用驱动来获得配置服务器相关信息,根据下载的配置信息去百度贴吧下载其它恶意代码,进行下一阶段的恶意活动。

  • 驱动运行后用APC注入法向系统进程 Lassas.exe 注入 DLL 模块。 双枪团伙新动向,借云服务管理数十万僵尸网络 双枪团伙新动向,借云服务管理数十万僵尸网络 双枪团伙新动向,借云服务管理数十万僵尸网络 双枪团伙新动向,借云服务管理数十万僵尸网络
  • DLL 配合驱动的执行过程。DLL 首先尝试创建互斥对象 {12F7BB4C-9886-4EC2-B831-FE762D4745DC} ,防止系统创建多个实例。 双枪团伙新动向,借云服务管理数十万僵尸网络接着会检查宿住进程是否是 Lsass.exe 或 svchost.exe,确保不是运行在沙箱之类的分析环境中。

    双枪团伙新动向,借云服务管理数十万僵尸网络尝试创建设备 “\\.\F46EA07E79033620CE13D35DE19AAC42″句柄,建立和驱动模块的通信。

    双枪团伙新动向,借云服务管理数十万僵尸网络向驱动发送 0x222084 设备控制码,获得连接服务器的配置信息。和配置服务器的通信使用 HTTPS+DES 的双重加密方式,配置信息包含三个重要的部分:

    双枪团伙新动向,借云服务管理数十万僵尸网络

    1. 主机信息上报服务 https://cs.wconf5.com:12709/report.ashx,供 DLL 上报主机基本信息。bot id,安装时间等基本信息。 双枪团伙新动向,借云服务管理数十万僵尸网络是否安装 360 杀毒,是否是虚拟机环境。

      双枪团伙新动向,借云服务管理数十万僵尸网络是否是无盘工作站。

      双枪团伙新动向,借云服务管理数十万僵尸网络上报主机信息使用DES加密,密钥为 HQDCKEY1。

      双枪团伙新动向,借云服务管理数十万僵尸网络

    2. 访问 https://cs.wconf5.com:12710/123.html 下载配置信息: 双枪团伙新动向,借云服务管理数十万僵尸网络配置信息依然是变形 DES 加密,解密密钥为 HQDCKEY1。解密后可以看到配置信息使用自定义的格式,两个百度图片为一组,截取有效数据拼接为一个有效文件:

      双枪团伙新动向,借云服务管理数十万僵尸网络

    3. 配置信息 https://share.weiyun.com/5dSpU6a 功能未知: 双枪团伙新动向,借云服务管理数十万僵尸网络所有驱动样本返回的配置信息都包含一个腾讯微云地址,直接访问该地址可以看到若干字符和数字组成的无意义字串。我们在收集到的配置信息中发现,每组数据中的配置信息服务器和微云保存的数据存在特定的模式。以上图为例,访问腾讯微云,获取字符串 cs127,其同组数据中的配置文件服务器的子域为 cs.xxxx.com ,端口为127xx。这看起来像是一种动态生成配置文件服务器地址的策略,推测可能是还在开发阶段的功能,所以样本中并未包含对应代码。

完成上述初始化过程后,驱动开始根据配置文件进入真正的功能操作。根据解析的配置文件,dll和驱动模块配合可以完成非常复杂的功能,下面罗列其中一部分功能。

  • 更新驱动文件程序会使用另一套算法得到DES解密密钥 HelloKey,最后用 DES 算法解出最终数据: 双枪团伙新动向,借云服务管理数十万僵尸网络
  • 劫持进程ip地址。 双枪团伙新动向,借云服务管理数十万僵尸网络
  • 向系统中添加证书 双枪团伙新动向,借云服务管理数十万僵尸网络
  • 下载文件到 TEMP 目录并创建进程。 双枪团伙新动向,借云服务管理数十万僵尸网络
  • 篡改 DNS配置 双枪团伙新动向,借云服务管理数十万僵尸网络
  • PAC 代理劫持 双枪团伙新动向,借云服务管理数十万僵尸网络

 

感染方式2 — DLL 劫持

感染方式 2 依然是以私服客户端为载体,但是在技术细节上有较大差异。

登录器下载页面:

双枪团伙新动向,借云服务管理数十万僵尸网络

下载后的登录器:

双枪团伙新动向,借云服务管理数十万僵尸网络

多款类似游戏的私服客户端的组件 photobase.dll 被替换成同名的恶意 DLL 文件,恶意 DLL 文件的 PE Resource 中包含 3 个关键文件:

双枪团伙新动向,借云服务管理数十万僵尸网络

恶意 photobase.dll 有两个关键动作:

  1. 首先会释放相应架构的恶意驱动程序,然后注册系统服务并启动;
  2. 然后加载真正的 photobase.dll 文件,并将导出函数转发到真正的 photobase.dll。

后续感染流程同上。 这是一套标准的 DLL 劫持加载方式。

阶段1 — 释放并加载恶意驱动

恶意 photobase.dll 文件会首先为即将释放的恶意驱动文件生成一个随机文件名,文件名为 10 个随机字符,文件后缀为 .dat,并把自身 PE Resource 中相应的驱动文件放到 %windir%\Temp\目录下。

然后为落地的恶意驱动文件注册系统服务,并启动服务:

双枪团伙新动向,借云服务管理数十万僵尸网络

恶意驱动接下来的活动与前面第一种感染方式雷同,即下载、解密并最终加载其他恶意文件。

阶段2 — 加载真 photobase.dll

在恶意 photobase.dll PE Resource 中的真 photobase.dll 文件的前 2 个字节被置空:

双枪团伙新动向,借云服务管理数十万僵尸网络

恶意 photobase.dll 从 PE Resource 中提取这份文件的时候,会把这前 2 个字节以 MZ(PE 文件头) 填充:

双枪团伙新动向,借云服务管理数十万僵尸网络

然后,恶意的 photobase.dll 文件会为刚载入的真正的 photobase.dll 文件载入动态链接库、导入相关函数,最后,把真 photobase.dll 中的导出函数转发到自己的导出函数中。部分转发的导出函数如下:

双枪团伙新动向,借云服务管理数十万僵尸网络

以上面高亮的导出函数 Sqm::AddToStream() 为例,恶意 photobase.dll 中的转发实现如下:

双枪团伙新动向,借云服务管理数十万僵尸网络

 

百度安全团队声明

基于海量威胁情报,百度安全反黑产开放平台配合测算出僵尸网络的规模。平台同时启动相关措施,尝试对受僵尸网络控制的用户进行风险提示。在本次联合行动中,通过黑产威胁情报分析、共享、应对等举措,我们对于双枪团伙的作案技术手段、逻辑及规则形成进一步认知。

 

附录

DES 加解密算法中的自定义转换表:

以下转换表不同于大部分 DES 加解密的公开实现,左移位数表与 SBox 表都同于常见 DES 算法实现。

# Permutation and translation tables for DES
__pc1 = [
56, 48, 40, 32, 24, 16, 8,
0, 57, 49, 41, 33, 25, 17,
9, 1, 58, 50, 42, 34, 26,
18, 10, 2, 59, 51, 43, 35,
62, 54, 46, 38, 30, 22, 14,
6, 61, 53, 45, 37, 29, 21,
13, 5, 60, 52, 44, 36, 28,
20, 12, 4, 27, 19, 11, 3
]
# permuted choice key (table 2)
__pc2 = [
13, 16, 10, 23, 0, 4,
2, 27, 14, 5, 20, 9,
22, 18, 11, 3, 25, 7,
15, 6, 26, 19, 12, 1,
40, 51, 30, 36, 46, 54,
29, 39, 50, 44, 32, 46,
43, 48, 38, 55, 33, 52,
45, 41, 49, 35, 28, 31
]
# initial permutation IP
__ip = [
57, 49, 41, 33, 25, 17, 9, 1,
59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5,
63, 55, 47, 39, 31, 23, 15, 7,
56, 48, 40, 32, 24, 16, 8, 0,
58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6
]
# Expansion table for turning 32 bit blocks into 48 bits
__expansion_table = [
31, 0, 1, 2, 3, 4,
3, 4, 5, 6, 7, 8,
7, 8, 9, 10, 11, 12,
11, 12, 13, 14, 15, 16,
15, 16, 17, 18, 19, 20,
19, 20, 21, 22, 23, 24,
23, 24, 25, 26, 27, 28,
27, 28, 29, 30, 31, 0
]
# 32-bit permutation function P used on the output of the S-boxes
__p = [
15, 6, 19, 20, 28, 11,
27, 16, 0, 14, 22, 25,
4, 17, 30, 9, 1, 7,
23, 13, 31, 26, 2, 8,
18, 12, 29, 5, 21, 10,
3, 24
]
# final permutation IP^-1
__fp = [
39, 7, 47, 15, 55, 23, 63, 31,
38, 6, 46, 14, 54, 22, 62, 30,
37, 5, 45, 13, 53, 21, 61, 29,
36, 4, 44, 12, 52, 20, 60, 28,
35, 3, 43, 11, 51, 19, 59, 27,
34, 2, 42, 10, 50, 18, 58, 26,
33, 1, 41, 9, 49, 17, 57, 25,
32, 0, 40, 8, 48, 16, 56, 24
]

 

联系我们

感兴趣的读者,可以在 twitter 或者通过邮件 netlab[at]360.cn 联系我们。

 

部分IOC:

C&Cs

pro.csocools.com
www.w15773.com
cs.wconf5.com
cs.ledfaguang.com
white.fei46413.com

MD5

aa497dfb5a92c28f7fa5b8e049155da0
081e586a6010b3b72ba4934f8cbdb368
04db0b062c7491a124bf7388d783c17e
0c0f43ed8317869918a23a7e7bfeb0e8
1785ef2d8bd40d8af32cca0f536cb6e8
3fb5e2c05b73168c3f259d64b8978a64

URLs

https://share.weiyun.com/5XqTYW6
https://www.w15773.com:12310/123.html
https://www.w15773.com:12309/report.ashx
http://www.w15773.com:12313/config.html
http://www.w15773.com:8889/stat1.ashx
https://pro.csocools.com:12310/123.html
https://pro.csocools.com:12309/report.ashx
http://pro.csocools.com:8889/stat1.ashx
https://share.weiyun.com/5dSpU6a
https://cs.wconf5.com:12709/report.ashx
https://cs.wconf5.com:12710/123.html
https://cs.wconf5.com:12713/config.html
https://cs.wconf5.com:12715/GetTag.ashx
http://cs.wconf5.com:8889/stat1.ashx
https://cs.ledfaguang.com:12710/123.html
https://cs.ledfaguang.com:12709/report.ashx
http://cs.ledfaguang.com:12713/config.html
http://cs.ledfaguang.com:8889/stat1.ashx
http://white.fei46413.com:12313/config.html
http://white.fei46413.com:8889/stat1.ashx
https://ap.echoit1.com:12310/123.html
https://ap.echoit1.com:12309/report.ashx
https://ap.echoit1.com:12710/123.html
https://ap.echoit1.com:12709/report.ashx

相关推荐

CVE-2020-0904:Hyper-V类型混淆任意地址解引用漏洞分析

译文声明 本文是翻译文章,文章原作者Daniel Fernandez Kuehr,文章来源:labs.bluefrostseC++urity.de 原文地址:https://labs.bluefrostsecurity.de/advisories/bfs-sa-2020-003/ 译文仅供参考,具体内容表达以...

JustSystems Ichitaro(一太郎)缓冲区溢出漏洞

  漏洞简介 IC++hitaro(一太郎)是日本JustSystems公司的一套文字处理软件。 JustSystems Ichitaro在处理JTD文档的过程中存在基于堆的缓冲区溢出漏洞,允许远程攻击者可利用该漏洞构建恶意文件,诱使用户解...