新兴DDoS Botnet家族Ripper正在持续进化

发布时间 - 2023-07-21 17:29:26    点击率:414次

概述

2023 年 7月初,我们捕获到了一个未知 DDoS Botnet 家族样本,该样本诸多基础函数从 Mirai 源码移植而来,但在主机行为、网络控制协议方面又做了很大改动。样本中的多个核心函数由 “ripper_” 开头,所以我们把这个家族命名为Ripper

我们对其样本和 C&C 的关联分析,发现该家族已经传播了数月时间,只不过之前的样本与现在的样本变化比较大。经过梳理,我们暂时把 Ripper 家族的样本分为 3 个版本:V0、V1 和 最新的 V2。

Ripper 的传播机制借鉴自 Mirai:样本中内置 Telnet 弱口令扫描模块,扫描模块会把扫描结果上报给 Report Server,攻击者会根据上报的扫描结果,控制 Loader 向失陷主机植入 Ripper 的木马文件。最新的 Ripper V2 中,C&C 还会通过特定的指令动态更新样本扫描用到的弱口令字典。从我们的威胁监控系统中可以看到,Ripper V2 最近在 7.4 日到 7.6 日有一波积极传播:

样本关键行为分析

以如下 Ripper V2 样本为例,我们对样本关键特性进行分析:

文件名 文件类型 文件大小 文件MD5
loki.arm6 ELF 32-bit LSB executable, ARM 105760 bytes c244f9422006848e3893d0b8b8fc6b8f

初始化准备工作

首先,样本会尝试用以下命令重置 iptables 规则:

iptables-P INPUT ACCEPTiptables-P FORWARD ACCEPTiptables-P OUTPUT ACCEPTiptables-t NAT -Fiptables-t mangle -Fiptables-t NAT -Fiptables-Fiptable-X

紧接着,Ripper V2 会在控制台输出 “exec\\r\\n”,从 Mirai 移植的 rand_init() 做随机函数初始化,然后通过 init_load_address() 函数设定样本工作需要用到的 C&C 服务器地址和端口,最后在本地开启一个 Socks5 服务,端口为63254,可以用作 Socks5 代理节点。Socks5 服务开启成功后,在控制台输出 “START-S5\\n“。

Ripper V2 设定了 3 组工作用的 C&C 服务器,其中地址相同,只是端口不同:

  • util_srv_addr: 自己搭建的域名解析服务地址,在攻击指令解析环节和 Socks5 代理服务中用来解析目标域名,端口 15757
  • cnc_srv_addr: C&C 控制的服务器地址,端口 15636
  • report_srv_addr: 扫描结果上报的服务器地址,端口 20216

Ripper V2 的 C&C 地址字符串经过自定义编码逻辑进行变形,要经过 lets_encrypt() 函数经过解码。对于内置的 C&C “15.217.144.198” 来说,解码的结果就是把首位字符和末位字符对调位置,得出 “85.217.144.191” 就是其 C&C IP。

C&C 通信

首先是连接 C&C 服务器,Ripper V2 用UDP 协议与 C&C 通信:

上线

Ripper V2 的 Bot 向 C&C 发送的数据包有 3 种:

指令代码 说明
0x55 上线
0x29 上报 Socks5 服务端口
0x36 Pong

成功连接 C&C 之后,样本会立即向 C&C 发送上线包。上线包的内容中第一个字节是上线包的指令代码0x55,后面紧接着就是样本的启动参数(bot_tag)。拼接好之后交给cnc_send() 函数来发送:

cnc_send() 函数会给需要发送的数据加上前缀和后缀,作为数据起始和结尾的标志:

  • 前缀: “\\x00\\x01\\x02
  • 后缀: “\\x02\\x01\\x00

这样一来,假如样本启动路径为 “/tmp/loki”,那么最终发送出去的上线包数据如下:

00000000000102552f746d702f6c6f6b69020100 |...U/tmp/loki...|00000010

如果前面成功启动了 Socks5 服务,紧接着 Ripper V2 还会把 Socks5 服务的端口(63254)上报给 C&C 服务器。上报 Socks5 服务的指令代码为0x29,同样也是交给cnc_send() 函数发送上报数据,数据包如下:

指令解析

Ripper V2 的样本目前支持以下控制指令:

指令代码 说明 备注
0x33 启动扫描任务 如果 recv data length>2,代表同时下发了弱口令字典
0xde 重发上线包
0xdf Kill Bot
0xed 停止 DDoS 攻击
0xef 发起 DDoS 攻击
Ping 无指令码(”\\x00\\x01\\x02\\PING\\x02\\x01\\x00\\x00″)

C&C 发给 Bot 的指令,也都会附带一个前缀和后缀字节串,并且与 Bot 发给 C&C 的不同,此处的前缀是 “\\x00\\x01\\x02“,后缀是 “\\x02\\x01\\x00\\x00“。Bot 样本收到 C&C 发来的数据后,会通过检测前缀和后缀来确定一个完整的指令数据包,先剔除前缀和后缀的字节串,再对指令内容做解析。

样本上线成功后,C&C 一般会先下发指令启动扫描任务,并附带一组扫描用到的弱口令,数据包如下:

注意弱口令列表的数据,每一对弱口令之间会用 “0xFF” 来做间隔字符,后面会调用一个util_tokenize() 函数来解析这些用 “0xFF” 来隔开的多组弱口令:

当 cmd_code 为 0xef 时,Ripper V2 的 Bot 会发起 DDoS 攻击,此时指令数据包的结构伪码如下:

struct cmd_pkt {uint8[3] prefix;// "\\x00\\x01\\x02"uint8 cmd_code;uint32 target_ip;uint16 target_port;uint32 duration;uint8 atk_code;uint8 atk_flag_cnt; atk_flag[atk_flag_cnt] flags;uint8[4] subffix;// "\\x02\\x01\\x00\\x00"}struct atk_flag { uint8 flag_type;uint8 flag_len;// flag 数据长度(bytes) char[flag_len] flag_data;// flag 数据,最长 64 bytes}

Ripper V2 支持的 DDoS 攻击方式共有 7 种:

attack code attack method
0 UDP Flood
1 UDP Plain Flood
2 UDP Raw Flood
3 TCP Plain Flood
4 TCP RAW Flood
5 MIX Flood
6 HTTP Flood

Ripper V2 的 Attack Flag 数据结构的设计从 Mirai 移植而来,但具体支持的 Attack Flag 与 Mirai 大不相同,Ripper V2 支持 6 种自定义的 Flag:

flag code flag 说明
1 域名
2 Attack payload size
3 TCP Flag ([a|s|f|r|u|p] 任意组合)
4 Socket Option(non_block | no_delay)
5 发起攻击的轮数
6 每一轮的攻击次数

Ripper V2 的攻击指令解析逻辑比较复杂, 它把 Mirai 中所有指令解析、发起攻击的函数全部打散,以内联的形式写到了一个函数中,整个函数体积特别大,对逆向分析会造成一定程度的阻力,函数结构如下:

如果 Bot 收到的攻击指令中,包含针对域名目标的攻击,Ripper V2 会先调用自定义的域名解析函数 resolve_address(),访问自己搭建的服务对域名进行解析:

如上图所示,Bot 访问自己的服务(util_srv,地址与 C&C 地址一致,端口为 15757),通过 UDP 协议,发送的 Payload 第一个字节为固定的 “\\x01“,第二个字节为请求解析域名的长度,后面附带域名字符串,Payload 结构伪码如下:

structdomain_resolv_payload { _uint8 code;// "\\x01" _uint8 domain_len;char[domain_len] domain_str;}

然后 Bot 从服务端读取数据,如果读取数据长度为 4,则说明域名解析成功,返回了一个 4 bytes 的 IP。

样本层面的版本演进

我们发现的 3 个版本的 Ripper 家族样本,功能细节差异比较大,但也有明显的共同特征,正是基于这些共同特征,我们把它们归为同一家族:

  1. 关键函数均以 “ripper_” 开头,也有其他大量的相同功能和名字的函数
  2. V0 和 V1 版本的文件名均为”boat.{CPU_ARCH}”
  3. 都有相同的 util_tokenize() 函数,为一些函数做基于特定分隔符的切分、解析,喜欢用 0xFF 作为分隔符
  4. 网络数据包都设计成带有特定前缀和和后缀字节串的形式

接下来我们会对这些特性做详细分析。

Ripper V0 样本

文件名 文件类型 文件大小 文件MD5
boat.arm7 ELF 32-bit LSB executable, ARM 94644 bytes b73116306de407394bee825ff4d95091

在终端连续输出以下 3 串符串:

"Komorebi\\r\\n""Domorebi\\r\\n""Xomorebi\\r\\n"

C&C 明文硬编码在样本中:

Ripper V0 指令特征:

  • 所有的指令以 “\\r\\n\\n\\r” 4 个字节为结尾标志
  • 指令中各字段以 “0xFF” 为分隔符

各指令总结如下:

方向 cmd code 功能
Bot->C2 0x00 上线
C2->Bot 0x01 停止 DDoS 攻击
C2->Bot 0x00 发起 DDoS 攻击

Ripper V0 支持的 DDoS 攻击方式及对应的 Attack Code:

上线包:第一个字节为 0x00,第二个字符为分割标志字符 0xFF,第三部分为第一个命令行启动参数,最后为数据包结尾标志:”\\r\\n\\n\\r”

指令包也都是以 “\\r\\n\\n\\r” 结尾,样本中会把结尾 4 个字符去掉再解析、执行指令:

在函数cmd_handle() 中,样本会把从 C&C 收到的数据调用util_tokenize() 函数,以 “0xFF” 为分隔符做切分、重组,最后再根据解析好的指令执行相应动作:

util_tokenize() 函数反编译结果如下:

Ripper V1 样本

文件名 文件类型 文件大小 文件MD5
boat.arm7 ELF 32-bit LSB executable, ARM 136411 bytes e9c5048652f4263d9daf4a3af5c3709d

在终端输出字符串:”EXECUTED\\r\\n

C&C 仍然硬编码在样本中,不过同一个 C&C IP 开了两个服务端口:

  • 5900,常规 C&C 服务端口,用来控制 Bot 行为
  • 5901,API Server 端口,用来给 Bot 下发工作中用到的数据,比如 Scanner 口令、Table Entry 相关数据等

Ripper V1 的上线包比 Ripper V0 包含的信息更丰富,各字段说明如下:

field offset length(bytes) default value
cmd_code 0 1 0x0
bot_version 0 4 “\\x00\\x00\\x00\\x40″
bot_id(argv[0]) 4 len(bot_id)
bot_edianess len(bot_id)+4 1
bot_cpu_arch len(bot_id)+5 1
bot_cpu_cores len(bot_id)+6 1
bot_mem_mb len(bot_id)+7 4

其中第一个字节为固定的 “0x00″,代表上线包;接下来是 4 字节的 bot_version,固定值为 “\\x00\\x00\\x00\\x40“,后面每个字段时间都用 “0xFF” 分隔:

样本从 C&C 的 API Server 中给你接收到的数据,也是以 “0xFF” 作为字段分隔标志,并用与 Ripper V0 几乎相同的util_tokenize() 函数来解析、重组数据:

Ripper V1 攻击指令包的结构与 Ripper V0 也大不相同,Ripper V0 的攻击指令数据中,各字段会以 “0xFF” 分隔,最后以 “\\r\\n\\n\\r” 结尾;Ripper V1 的指令包,采用了固定长度的结构,各个字段之间无分隔符。结构如下:

field offset length
UNKOWN 0 1
attack code 1 1
target host 2 4
target port 6 2
duration 8 4

其中第一个字节会被直接丢弃:

然后解析其余数据,提取字段、重组后面 DDoS 攻击要用到的结构体:

Ripper V1 支持的 DDoS 攻击方式以及对应的指令码如下:

attack code attack type
0 ICMP Flood
1 UDP Plain Flood
2 TCP Plain Flood
3 TCP Flood
4 HTTP Flood

总结

目前我们已经捕获到 Ripper V2 发起的数十次攻击,其攻击目标包括数据货币交易所1million.exchange,时代华纳的 DNS 服务器74.74.74.74,以及英国独立报官网www.independent.co.uk。

鉴于 Ripper 在样本层面的频繁变动持续升级,以及逐步开展 DDoS 攻击,我们会对 Ripper 家族的活动持续监控。

IoC

MD5

b73116306de407394bee825ff4d95091

364a1676d638e5069ab88cb98288bef2

4a1fb73a6f09468b8ab0fc7478fe715a

4d3312115eb5694a7e7769867fcf227a

53fa2ebff19861c6a381d802a8bef9ba

79ee10eb0c48c8bf4fa6deb342db1a99

8845e1c8daf7545bfde3ddf6729664a4

908ab5382ee42c0ab034820730d6ba09

99ab1760db8fe89b556a943afdd105ee

bc87628437819895c031ecb72a70659a

c55cbde42ff1cbf09ed07ca98ca1f017

e9c5048652f4263d9daf4a3af5c3709d

015e73f206790663b1efba854d9888ee

087b071253958042dd74d53475666d78

78f1155bc7a9c0a89a3d30992e0efb5f

1387c774b707ab1c379acc3ef882b214

c244f9422006848e3893d0b8b8fc6b8f

C2

85.217.144.191:15636

85.217.144.191:15757

85.217.144.191:20216

194.55.224.126:1738

194.55.224.182:5900

194.55.224.182:5901

来源:奇安信威胁情报中心

最新文章 第十二版《网络安全企业100强》发布 开源推荐算法为什么并不“可靠”? 虹膜写真风靡年轻人:小心泄露敏感个人信息 国内最大IT社区CSDN被挂马,CDN可能是罪魁祸首? Apache Struts文件上传漏洞 (CVE-2024-53677) 安全风险通告 工信部:关于防范新型勒索病毒Ymir的风险提示 美国报告揭示俄罗斯战略信息攻击:从攻击方法到战略效果 最危险的网络攻击:云勒索软件 个人信息保护合规审计:个人信息删除落地与审计 Forrester:Akamai创新微分段技术引领企业安全升级,实现 152%高ROI Fortinet发布《2025年网络威胁趋势预测报告》 揭秘四大威胁挑战 榜上有名!360入选2024年天津市网络安全应用场景优秀案例 只需一个暗号,即可戳穿语音克隆骗局 写在IDCC2024数字基础设施国际合作大会之前 IETF的运行方式及RFC的形成 《AI时代深度伪造和合成媒体的安全威胁与对策(2024版)》报告发布 UnitedHealth勒索软件攻击事件应吸取的六个备份教训 网络安全产品奥斯卡 2024年度赛可达优秀产品奖(SKD AWARDS) “危“”机“并存,五位网络安全大咖预警2025年安全态势 赋能智算未来,CDCE2024国际数据中心展12月5日上海璀璨开幕 俄罗斯黑客组织渗透和利用巴基斯坦黑客组织服务器案揭秘 国家安全部:警惕开源信息成为泄密源头 “清朗·网络平台算法典型问题治理”专项行动中的排名算法 游戏玩家请注意!Winos4.0木马已“潜伏” 2024 DAMS中国数据智能管理峰会即将在上海举办 WAF气数已尽? 网安巨头Palo Alto全球数千防火墙被攻陷:因开发低级错误造成零日漏洞 数字城市AI安全运营中心签约揭牌,360赋能长三角城市安全新篇章 勒索软件忙招人,2024年网络威胁五大新趋势 360发布全球首份《大模型安全漏洞报告》,曝光近40个大模型相关安全漏洞 值得关注的十二大网络安全风险评估工具及选型指南 俄黑客通过“近邻攻击”远程入侵美国企业WiFi网络 四校签约、六家授牌!360与河南高校再摘网络安全人才培育新果实 Apple多个在野高危漏洞在野利用通告 苹果官方警告:零日漏洞攻击瞄准Mac电脑用户 《密码法》颁布五周年:法治成效、实施难点与未来走向 27天!揭秘身份管理中凭证修复为何如此艰难? 微软“清理门户”,禁止杀毒软件访问Windows内核 云原生环境下的七大网络安全威胁及应对建议 ​透析恶意软件“四大家族”
在线客服
联系方式

热线电话

18556842815

上班时间

周一到周五

公司电话

027-85365976

二维码
线