一、样本概述
样本运行平台为linux系统,作为僵尸网络节点进行DDoS攻击。
连接IRC服务器,通过互联网中继聊天接收指令,能够完成聊天服务器相关的聊天室配置、身份配置、状态反馈等聊天功能,通过解析消息获取攻击类型与攻击目标,完成DDoS攻击。
二、样本类型
样本属于Tsunami家族,DDoS攻击程序,活跃时间为2013年至今。该家族使用的攻击手段包括TCP、UDP、DNS泛洪攻击。
目前发现样本相关的源码已经公开在网络,适合分析者研究学习https://github.com/Soldie/COLE-O-botnets/blob/aec534acbf9789451f009129efaa1ec760973e2e/VirusPack/f34c5c27b.c
三、详细分析
3.1 ELF文件头
文件头信息
3.2 僵尸网络
样本作为“僵尸网络”中的“肉鸡”,执行逻辑如下。
A、根据Time、PPID生成客户端标识ID。
B、连接IRC服务器加入聊天频道
C、接收聊天消息,检查消息,执行指令。
IP | PORT |
---|---|
pwn.pwndns.pw | 80 |
168.235.95.104 | 443 |
6667 | |
6668 | |
7000 | |
8080 | |
22 |
服务器地址、端口
通过解析通讯流量,其通讯数据各字段含义见下图:
通讯流量
聊天协议包含的指令,以及对应的聊天室功能见下表:
指令 | 功能 |
---|---|
352 | 设置一个假ip |
376 | 加入特定频道,查找匹配的mac地址 |
433 | 用“/usr/dict/words”目录下的文件内容做别名 |
422 | 同367,加入特定频道 |
PRIVMSG | 接收irc命令,访问/usr/bin/xxh的目录下有没有SSH相关进程,如果有的话就关掉;从这里面进入ddos僵尸网络攻击 |
PING | 发送PONG指令,用户的登陆与结束 |
JOIN | 加入频道 |
KICK | 加入服务器对应的频道 |
NICK | 取别名 |
聊天协议
3.3 DDoS攻击
样本提供了四种攻击方式,攻击对应与指令见下表。
指令 | 功能 |
---|---|
Tsunami | ACK FLOOD攻击 |
Pan | SYN FLOOD攻击 |
Dos | UDP FLOOD攻击 |
Unknown | 垃圾数据包 |
除发送垃圾数据包外,其余攻击方式均伪造假的数据封包,欺骗目标系统调用资源处理数据包。详细分析见下文逆向细节。
指令 | 描述 |
---|---|
SPOOFS | 设定IP范围 |
DISABLE | 判断密码是否输入正确 |
ENABLE | 恢复客户端的能力 |
GET | url拼接,获取cpu架构,该程序只在i686和x86系统上运行,设置可接收的文件格式,接收上线地址发来的数据,从80端口联网接受浏览器的请求下载指定木马文件 |
VERSION | 返回后门版本 |
BYEBYEALL | 关闭对客户端的ddos攻击 |
IRC | 将指定的irc指令发送到服务器 |
CHGSERV | 更改服务器 |
Help | 显示可用指令列表 |
NICK | 取别名 |
GETSPOOFS | 获取欺骗参数 |
ENABLE | 判断密码是否输入正确 |
DDoS攻击的相关设定指令
3.4. 溯源分析
3.4.1 CC检索
公开情报显示:该样本连接的IRC服务器地址关联到恶意软件、远控、挖矿木马、Tsunami泛洪等标签。
CC情报
3.4.2 哈希检索
在线恶意软件扫描网站VirusTotal提供的各大杀毒引擎扫描结果显示:有15家杀软引擎反馈为恶意程序。
hash扫描结果s
3.5 逆向细节
3.5.1 muma基本信息
ELF文件基本信息
脱壳后ELF文件信息
3.5.2 连接前的准备工作
打开并锁定文件/temp/.ssh,该文件样本未提供。锁定使子进程可以访问该文件资源。
当前进程为子进程,则创建复制一个自身的子进程。
创建子进程
将时间与进程id组合,创建随机字符串,赋值生成随机的用户信息。
生成随机用户信息
3.5.3 服务端通讯
建立循环:连接聊天服务器,发送上线消息。
样本预设了2个服务端地址和7个端口号,每次连接随机选取地址和端口,见下图。
子循环:检查每次连接的时间间隔,设置随机端口,连接服务端。
监听socket:
监听到socket返回数据,接收buffer,逐行读取指令,指令比对函数名称,调用对应函数:
3.5.4 聊天协议函数
函数引用位置
函数名称与地址数组见下图:
指令与对应函数地址
3.5.4.1 函数352
实现操作:生成一个被打乱ip地址
校验nick
获取ip地址
IP地址转换失败,解析主机失败,返回
ip转换整型成功或者解析成功,则打乱ip并保存
3.5.4.1 函数376、422
实现操作:发送上线消息。
发送消息
3.5.4.3 函数433
实现操作:生成昵称
重新生成nick
3.5.4.4 函数PRIVMSG
解析传入的服务端回复数据reponse,得到需要执行指令名称,去比对功能函数表并执行。
指令与功能函数
上图中,包含有四个DDOS攻击指令:Tsunami,Pan,Dos,UnKnown。以及远控相关指令。下面主要分析DDOS攻击功能。
3.5.5 DDOS攻击功能
3.5.5.1 ACK-PUSH泛洪攻击
攻击流程:以非常高的速率发送假的的ACK-PUSH数据包,该包不属于被攻击目标防火墙上的现有会话或者路径上的设备,在状态表中生成不必要的查找,消耗额外的系统资源。 设置攻击目标与时长
构造并循环发送TCP-ack包
3.5.5.2 SYN泛洪攻击
SYN 泛洪攻击利用TCP的三次握手过程,用SYN淹没目标系统上的多个TCP端口,请求在源系统和目标系统之间启动连接的消息。
被攻击目标系统对接收到的每个SYN消息用SYN-ACK消息进行响应,并临时打开一个端等待来自源的最终ACK消息以响应每个SYN-ACK消息。 攻击者从未发送最终的ACK,因此连接无法完成。临时连接最终将超时并被关闭,但在此之前,目标系统将会被其状态表中积累的大量不完整连接淹没。
构建syn包
构建syn包,循环发送
3.5.5.3 UDP碎片攻击
UDP碎片攻击,发送较大的UDP数据包(1500字节),消耗更多的网络带宽。由于碎片包通常无法重新组装,因此它们消耗了设备上的大量资源。
构造udp包发送
3.5.5.3 碎片数据攻击
攻击流程:高频率发送较大的碎片数据(0x2400)至目标服务器的随机端口,该攻击方式效率比较低。
发送碎片数据
四、样本特征
4.1 IOC
File MD5 | cf6cb25624874424af47011a7dd131b4 |
---|---|
File SHA1 | 1d0d2de612c473fc4c75ed5d61952f8e4ad7384c |
File SHA256 | 6f14afb14e198fc36ff839b09077edb2fb5a55dc9c29c9edcd59075d48255332 |
Host | pwn.pwndns.pw |
ip | 168.235.95.104 |
4.2 Yara或其他
| rule mumaunpack {
meta:
description = “Tsunami:RAT&DDOS_BOT”
muma_unpack_hash1 = “4410b1cd507926071378c0c470fa98aff12ed4b59ec00766fef8847c72397c26”
muma_hash1 = “6f14afb14e198fc36ff839b09077edb2fb5a55dc9c29c9edcd59075d48255332”
strings:
$x1 = “NOTICE %s :PAN = An advanced syn flooder that will kill most network drivers” fullword ascii
$x2 = “NOTICE %s :SH = Executes a command” fullword ascii
$x3 = “NOTICE %s :GET = Downloads a file off the web and saves it onto the hd” fullword ascii
$x4 = “NOTICE %s :UDP = A udp flooder” fullword ascii
$x5 = “NOTICE %s :UNKNOWN = Another non-spoof udp flooder” fullword ascii
$s6 = “NOTICE %s :TSUNAMI = Special packeter that wont be blocked by most firewalls” fullword ascii
$s7 = “NOTICE %s :PAN “ fullword ascii
$s8 = “NOTICE %s :UDP “ fullword ascii
$s9 = “User-Agent: Mozilla/4.75 [en] (X11; U; Linux 2.2.16-3 i686)” fullword ascii
$s10 = “src/process/execve.c” fullword ascii
$s11 = “NOTICE %s :UNKNOWN “ fullword ascii
$s12 = “NOTICE %s :TSUNAMI “ fullword ascii
$s13 = “NOTICE %s :IRC = Sends this command to the server” fullword ascii
$s14 = “src/process/posix_spawn_file_actions_adddup2.c” fullword ascii
$s15 = “src/process/posix_spawn_file_actions_destroy.c” fullword ascii
$s16 = “src/process/posix_spawn_file_actions_init.c” fullword ascii
$s17 = “NOTICE %s :Spoofs: %d.%d.%d.%d - %d.%d.%d.%d” fullword ascii
$s18 = “NOTICE %s :Password too long! > 254” fullword ascii
$s19 = “NOTICE %s :Password correct.” fullword ascii
$s20 = “src/process/posix_spawn.c” fullword ascii
$y1 = “gent.Mozilla/4.75” fullword ascii
$y2 = “PROT_EXEC|PROT_WRITE failed.” fullword ascii
Id: UPX 3.95 Copyright (C) 1996-2018 the UPX Team. All Rights Reserved. $” fullword ascii
$y4 = “NOTICE %s :Unable to comply.” fullword ascii
$y5 = “Q USERID” fullword ascii
$y6 = “ooo.User” fullword ascii
$y7 = “KILL “ fullword ascii
$y8 = “no- wi&-FbZ” fullword ascii
$y9 = “” fullword ascii
$y10 = “,7V{ -“ fullword ascii
$y11 = “? -[Bo&” fullword ascii
$y12 = “O9/JHTTP/1.0” fullword ascii
$y13 = “liheek” fullword ascii
$y14 = “assifyl” fullword ascii
$y15 = “DEH_FRAME“ fullword ascii
$y16 = “%HTF%3” fullword ascii
$y17 = “toupbr” fullword ascii
$y18 = “%DKz%H” fullword ascii
$y19 = “uvbful” fullword ascii
%20%3D%3D%200x457f%20and%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20filesize%20%3C%202000KB%20and%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20(%201%20of%20(#card=math&code=y20%20%3D%20%221-2%25S%20%22%20fullword%20ascii%0A%C2%A0%C2%A0%20condition%3A%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%28%20uint16%280%29%20%3D%3D%200x457f%20and%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20filesize%20%3C%202000KB%20and%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%28%201%20of%20%28)x) and 4 of (%20)%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20)%20or%20(%20uint16(0)%20%3D%3D%200x457f%20and%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20filesize%20%3C%20600KB%20and%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20(%208%20of%20(#card=math&code=s%2A%29%20%29%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%29%20or%20%28%20uint16%280%29%20%3D%3D%200x457f%20and%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20filesize%20%3C%20600KB%20and%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%20%28%208%20of%20%28)y*) )
) or ( all of them )
} |
---|