简 介
--------
本文是对一种源代码基于"Tribe Flood Network"的分布式拒绝服务攻击工具"stacheldraht"。
"Stacheldraht"(德语意为"barbed wire")结合了分布式拒绝服务攻击工具"Trinoo"与"TFN"早期版本的功能,并增加了加密攻击者、stacheldraht操纵器和可自动升级的代理程序间网络通讯的功能。
关于Trinoo和TFN攻击工具的详细资料请参阅:
绿色兵团安全文摘
分布式拒绝服务(DDoS)攻击工具分析 -- Trinoo
分布式拒绝服务(DDoS)攻击工具分析 -- Tribe Flood Network
在1999年6月末到7月初,至少几个组织安装并测试了Trinoo攻击网络,一共启动了超过2000台主机实施拒绝服务攻击。发动攻击的主机来自世界各地,而被攻击的主机也遍布全球。
到了1999年8月末和9月初,由德国著名黑客Mixter编写的TFN攻击工具也引起了关注。而在9月末和10月初,与TFN很相似的工具"stacheldraht"也在欧洲和美国被发现了。
CERT曾提供了一份这方面的资料:
http://www.cert.org/incident_notes/IN-99-04.html
与Trinoo类似,stacheldraht主要也是由主控端(操纵端)和守护端或"bcast"代理端程序组成。CERT分布式系统入侵工具研究小组在1999年11月研究时使用了这个“主控端/代理端”术语。
在利用Trinoo的主控端/代理端结构的同时,stacheldraht也使用了与TFN攻击工具一样的拒绝服务攻击方法,如:ICMP flood、SYN flood、UDP flood和"Smurf"等。但与TFN和TFN2K不同的是,在这里被分析的stacheldraht代码没有包含绑定到某个TCP端口的root shell。
TFN攻击工具的一个弱点是攻击者到TFN主控端的网络通讯是明文传输,易受常见的TCP攻击(会话劫持、RST攻击等)。stacheldraht为解决这个问题增加了加密传输功能。
Stacheldraht代理端程序的二进制代码包最初是在一些Solaris 2.x主机中发现的,这些主机是被攻击者利用RPC服务安全漏洞"statd"、"cmsd"和"ttdbserverd"入侵的。
1999年12月在Bugtraq上公布了对Trinoo和Tribe Flood Network工具的分析后,某个研究机构的技术人员提供了其捕获到的stacheldraht源代码。本文就是利用这些源代码(版本1.1)进行了深入分析。
工具包的Makefile文件包括了Linux和Solaris平台编译规则,缺省为Linux平台。在本文分析中,所有程序都是在Red Hat Linux 6.0系统上编译和运行。
攻击的第一阶段是使用各种工具入侵大量的远程主机,并在获得root权限后在系统中安装分布式拒绝服务攻击主控和代理程序。第二阶段是拒绝服务攻击的实施阶段,即通过主控端机器激活代理端机器上的程序进行拒绝服务攻击。
对这些源代码的任何修改,如提示、口令、命令、TCP/UDP端口号或所支持的攻击方法、签名和具体功能,都可能使分析的结果与本文不同。
攻击网络:客户端(攻击者)-->主控端-->代理端-->攻击目标
------------------------------------------------------------
Stacheldraht攻击网络由一个或多个主控程序("mserv.c")和大量的代理程序("leaf/td.c")组成,同时还有用于提供加密功能的网络连接和通讯程序("te.net.c/client.c")。一个典型的trinoo网络结构如下:
+----------+ +----------+
| 攻击者 | | 攻击者 |
+----------+ +----------+
| |
. . . --+------+---------------+------+----------------+-- . . .
| | |
| | |
+----------+ +----------+ +----------+
| 主控端 | | 主控端 | | 主控端 |
+----------+ +----------+ +----------+
| | |
| | |
. . . ---+------+-----+------------+---+--------+------------+-+-- . . .
| | | | |
| | | | |
+--------+ +--------+ +--------+ +--------+ +--------+
| 代理端 | | 代理端 | | 代理端 | | 代理端 | | 代理端 |
+--------+ +--------+ +--------+ +--------+ +--------+
攻击者通过加密客户端程序控制一个或多个主控端主机,而每个主控端程序则控制多个代理端(最多1000台)。这些代理端主机根据接收来自主控端的数据包中的目标主机地址实施分布式攻击。
通 讯 端 口
-----------
攻击者(客户端)到主控端: 16660/tcp
主控端到/从代理端: 65000/tcp,ICMP_ECHOREPLY
与Trinoo使用UDP协议在主控端和代理端进行通讯不同,也与TFN使ICMP协议在主控端和代理端进行通讯不同,stacheldraht使用TCP和ICMP协议进行通讯。
Stacheldraht攻击网络的远程控制通过一个用对称加密技术加密客户端和主控端通讯的客户端程序完成。这个客户端只接受一个参数:需要连接的主控端主机地址,然后连接到主控端的TCP端口(缺省为16660/tcp)。
以下是攻击者的客户端程序运行例子:
---------------------------------------------------------------------------
# ./client 192.168.0.1
[*] stacheldraht [*]
(c) in 1999 by ...
trying to connect...
connection established.
--------------------------------------
enter the passphrase : sicken
--------------------------------------
entering interactive session.
******************************
welcome to stacheldraht
******************************
type .help if you are lame
stacheldraht(status: a!1 d!0)>
---------------------------------------------------------------------------
提示的"a!1 d!0"表示当前有活动和停止的代理端主机数量。
使".help"命令会得到如下帮助信息:
---------------------------------------------------------------------------
stacheldraht(status: a!1 d!0)>.help
available commands in this version are:
--------------------------------------------------
.mtimer .mudp .micmp .msyn .msort .mping
.madd .mlist .msadd .msrem .distro .help
.setusize .setisize .mdie .sprange .mstop .killall
.showdead .showalive
--------------------------------------------------
stacheldraht(status: a!1 d!0)>
---------------------------------------------------------------------------
命 令
--------
.distro user server
通知代理端程序使用"rcp"命令将其自身在主机"server"以"user"帐号安装并运行。
.help
显示帮助信息。
.killall
杀死所有活动的代理端程序。
.madd ip1[:ip2[:ipN]]
添加IP地址到攻击目标列表中。
.mdie
向所有代理端程序发送"die"请求。
.mdos
启动拒绝服务攻击。
.micmp ip1[:ip2[:ipN]]
启动针对指定主机的ICMP flood攻击。
.mlist
列出当前正被进行拒绝服务攻击的主机IP地址。
.mping
测试所有的代理端是否仍在活动。
.msadd
添加新的主控端主机到列表中。
.msort
排序输出已停止/正活动的代理端。
.mstop ip1[:ip2[:ipN]]
.mstop all
停止指定IP地址或所有的攻击。
.msrem
从列表中删除一个主控端主机。
.msyn ip1[:ip2[:ipN]]
启动对指定主机的SYN flood攻击。
.mtimer seconds
设置攻击持续时间。
.mudp ip1[:ip2[:ipN]]
启动对指定主机的UDP flood攻击。
.setisize
设置ICMP攻击包大小(最大:1024,缺省:1024)。
.setusize
设置UDP攻击包大小(最大:1024,缺省:1024)。
.showalive
显示所有“正活动”的代理端主机。
.showdead
显示所有“已停止”的代理端主机。
.sprange lowport-highport
设置SYN flood攻击的端口范围(缺省为0-140)。
口 令 保 护
-----------
当使用客户端程序连接到主控端后,会提示输入口令。这个口令经过crypt()函数加密,而且在通过网络发送到主控端前还要经过Blowfish加密(加密短语为"authentication",这个加密短语在代理端程序和主控端程序的所有通讯中用于进行Blowfish加密)。
与TFN相似,所有命令都在"config.h"文件中定义:
---------------------------------------------------------------------------
#ifndef _CONFIG_H
/* user defined values for the teletubby flood network */
#define HIDEME "(kswapd)"
#define HIDEKIDS "httpd"
#define CHILDS 10
/* These are like passwords, you might want to change them */
#define ID_SHELL 1 /* to bind a rootshell */
#define ID_ADDR 699 /* ip add request for the flood server */
#define ID_SETPRANGE 2007 /* set port range for synflood */
#define ID_SETUSIZE 2006 /* set udp size */
#define ID_SETISIZE 2005 /* set icmp size */
#define ID_TIMESET 2004 /* set the flood time */
#define ID_DIEREQ 2003 /* shutdown request of the masterserver */
#define ID_DISTROIT 2002 /* distro request of the master server */
#define ID_REMMSERVER 2001 /* remove added masterserver */
#define ID_ADDMSERVER 2000 /* add new masterserver request */
#define SPOOF_REPLY 1000 /* spoof test reply of the master server
#define ID_TEST 668 /* test of the master server */
#define ID_ICMP 1055 /* to icmp flood */
#define ID_SENDUDP 2 /* to udp flood */
#define ID_SENDSYN 3 /* to syn flood */
#define ID_SYNPORT 4 /* to set port */
#define ID_STOPIT 5 /* to stop flooding */
#define ID_SWITCH 6 /* to switch spoofing mode */
#define ID_ACK 7 /* for replies to the client */
#define _CONFIG_H
#endif
---------------------------------------------------------------------------
正如我们看到的,这些值都能够被改变,以避免TFN守护程序被其他攻击者利用。
工 具 特 征
-----------
和Trinoo和TFN类似,安装TFN客户端程序/守护程序与在Unix系统中安装其它程序一样,同时还具备所有能隐藏程序和文件的标准安装选项。
Stacheldraht特有(Trinoo和TFN都没有)的功能是能够根据需要使用"rcp"命令升级代理端程序。所有的代理端程序能够根据请求删除当前版本,然后从其它主机复制新版本。
在这个工具包的程序中可以找到许多特征字符串。
在加密客户端程序("client")中包含如下字符串:
------------------------------------------------------------------------------
. . .
connection closed.
usage: ./sclient
[*] stacheldraht [*]
(c) in 1999 by ...
trying to connect...
unable to resolv %s
unable to connect.
connection established.
--------------------------------------
enter the passphrase :
authentication
failed
authentication failed.
entering interactive session.
./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
huhu
. . .
------------------------------------------