DDoS木马 - Tsunami家族样本分析

admin 2022年11月7日22:11:01评论129 views字数 4757阅读15分51秒阅读模式

一、样本概述


样本运行平台为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文件头


DDoS木马 - Tsunami家族样本分析
文件头信息


3.2     僵尸网络


样本作为“僵尸网络”中的“肉鸡”,执行逻辑如下。
A、根据Time、PPID生成客户端标识ID。
B、连接IRC服务器加入聊天频道
C、接收聊天消息,检查消息,执行指令。

DDoS木马 - Tsunami家族样本分析

服务器地址、端口
     通过解析通讯流量,其通讯数据各字段含义见下图:
DDoS木马 - Tsunami家族样本分析
DDoS木马 - Tsunami家族样本分析
通讯流量
     聊天协议包含的指令,以及对应的聊天室功能见下表:


指令

功能

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泛洪等标签。
DDoS木马 - Tsunami家族样本分析
CC情报


3.4.2  哈希检索



在线恶意软件扫描网站VirusTotal提供的各大杀毒引擎扫描结果显示:有15家杀软引擎反馈为恶意程序。

DDoS木马 - Tsunami家族样本分析

hash扫描结果s3.5 逆向细节3.5.1  muma基本信息

DDoS木马 - Tsunami家族样本分析

ELF文件基本信息

DDoS木马 - Tsunami家族样本分析

脱壳后ELF文件信息3.5.2 连接前的准备工作打开并锁定文件/temp/.ssh,该文件样本未提供。锁定使子进程可以访问该文件资源。当前进程为子进程,则创建复制一个自身的子进程。

DDoS木马 - Tsunami家族样本分析

创建子进程将时间与进程id组合,创建随机字符串,赋值生成随机的用户信息。

DDoS木马 - Tsunami家族样本分析

生成随机用户信息3.5.3 服务端通讯建立循环:连接聊天服务器,发送上线消息。

DDoS木马 - Tsunami家族样本分析

样本预设了2个服务端地址和7个端口号,每次连接随机选取地址和端口,见下图。

DDoS木马 - Tsunami家族样本分析

子循环:检查每次连接的时间间隔,设置随机端口,连接服务端。

DDoS木马 - Tsunami家族样本分析

监听socket:

DDoS木马 - Tsunami家族样本分析

监听到socket返回数据,接收buffer,逐行读取指令,指令比对函数名称,调用对应函数:

DDoS木马 - Tsunami家族样本分析

3.5.4 聊天协议函数

DDoS木马 - Tsunami家族样本分析

函数引用位置函数名称与地址数组见下图:

DDoS木马 - Tsunami家族样本分析

指令与对应函数地址3.5.4.1 函数352实现操作:生成一个被打乱ip地址

DDoS木马 - Tsunami家族样本分析

校验nick

DDoS木马 - Tsunami家族样本分析

获取ip地址

DDoS木马 - Tsunami家族样本分析

IP地址转换失败,解析主机失败,返回

DDoS木马 - Tsunami家族样本分析

ip转换整型成功或者解析成功,则打乱ip并保存3.5.4.1 函数376、422实现操作:发送上线消息。

DDoS木马 - Tsunami家族样本分析

发送消息3.5.4.3 函数433实现操作:生成昵称

DDoS木马 - Tsunami家族样本分析

重新生成nick3.5.4.4 函数PRIVMSG解析传入的服务端回复数据reponse,得到需要执行指令名称,去比对功能函数表并执行。

DDoS木马 - Tsunami家族样本分析

DDoS木马 - Tsunami家族样本分析

指令与功能函数上图中,包含有四个DDOS攻击指令:Tsunami,Pan,Dos,UnKnown。以及远控相关指令。下面主要分析DDOS攻击功能。3.5.5 DDOS攻击功能3.5.5.1 ACK-PUSH泛洪攻击攻击流程:以非常高的速率发送假的的ACK-PUSH数据包,该包不属于被攻击目标防火墙上的现有会话或者路径上的设备,在状态表中生成不必要的查找,消耗额外的系统资源。

DDoS木马 - Tsunami家族样本分析

 设置攻击目标与时长

DDoS木马 - Tsunami家族样本分析

构造并循环发送TCP-ack包3.5.5.2 SYN泛洪攻击SYN 泛洪攻击利用TCP的三次握手过程,用SYN淹没目标系统上的多个TCP端口,请求在源系统和目标系统之间启动连接的消息。被攻击目标系统对接收到的每个SYN消息用SYN-ACK消息进行响应,并临时打开一个端等待来自源的最终ACK消息以响应每个SYN-ACK消息。 攻击者从未发送最终的ACK,因此连接无法完成。临时连接最终将超时并被关闭,但在此之前,目标系统将会被其状态表中积累的大量不完整连接淹没。

DDoS木马 - Tsunami家族样本分析

构建syn包

DDoS木马 - Tsunami家族样本分析

构建syn包,循环发送3.5.5.3 UDP碎片攻击UDP碎片攻击,发送较大的UDP数据包(1500字节),消耗更多的网络带宽。由于碎片包通常无法重新组装,因此它们消耗了设备上的大量资源。

DDoS木马 - Tsunami家族样本分析

构造udp包发送3.5.5.3 碎片数据攻击攻击流程:高频率发送较大的碎片数据(0x2400)至目标服务器的随机端口,该攻击方式效率比较低。

DDoS木马 - Tsunami家族样本分析

发送碎片数据四、样本特征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 muma_unpack {   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 

(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 $y3 = "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 $y20 = "1-2%S " fullword ascii
condition:( uint16(0) == 0x457f and filesize < 2000KB and ( 1 of (x*) and 4 of (s*) ) ) or( uint16(0) == 0x457f and filesize < 600KB and ( 8 of (y*) ) ) or ( all of them )}




原文始发于微信公众号(安全狗的自我修养):DDoS木马 - Tsunami家族样本分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月7日22:11:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   DDoS木马 - Tsunami家族样本分析http://cn-sec.com/archives/1393979.html

发表评论

匿名网友 填写信息