tfn2k使用方法和对策(3)

/ns/cn/tool/data/20020805050406.htm


 



 

tfn2k使用方法和对策(3)


作者:佳佳


本来想再分两次写完本文,后来发现佳佳要翻译的两篇文章

http://packetstorm.securify.com/distributed/TFN2k_Analysis-1.3.txt

http://packetstorm.securify.com/distributed/tfn.analysis.txt

backend已经翻译过(本文最后给出了链接),佳佳就不做太多重复劳动了。


先介绍一下DDoS攻击的原理:
    DDoS把DoS又向前发展了一步,DDoS的行为更为自动化,它可以方便地协调从多台计算机上启动的
进程,让一股DoS洪流冲击网络,并使网络因过载而崩溃。确切地讲,DDoS攻击是指在不同的高带宽主机上
安装大量的DoS服务程序,它们等待来自中央客户端的命令,中央客户端随后通知全体受控服务程序,并批
示它们对一个特定目标发送尽可能多的网络访问请求。  
    对DoS而言,其攻击方式很多,主要使用的攻击有4种,分别是TCP-SYN flood,UDP flood,ICMP
 flood,smurf。 

TCP--- 当用户进行一次标准的TCP连接时,会有一个3次握手过程。首先是请求服务方发送一个SYN消息,
服务方收到SYN后,会向请求方回送一个SYN-ACK表示确认,当请求方收到SYN-ACK后,再次向服务方发送一
个ACK消息,这样,一次TCP连接建立成功。但是TCP-SYN flood在实现过程中只进行前2个步骤:当服务方
收到请求方的SYN-ACK确认消息后,请求方由于采用源地址欺骗等手段使得服务方收不到ACK回应,于是,
服务方会在一定时间处于等待接收请求方ACK消息的状态。对于某台服务器来说,可用的TCP连接是有限的
,如果恶意攻击方快速连续地发送此类连接请求,该服务器可用的TCP连接队列将很快被阻塞,系统可用资
源急剧减少,网络可用带宽迅速缩小,长此下去,网络将无法向用户提供正常的服务。 

UDP---- 由于UDP(用户数据包协议)在网络中的应用比较广泛,基于UDP攻击种类也较多。如今在
Internet上提供WWW和Mail等服务设备通常是使用Unix的服务器,它们默认一些被恶意利用的UDP服务,如
echo和chargen服务,它会显示接收到的每一个数据包,而原本作为测试功能的chargen服务会在收到每一
个数据包时随机反馈一些字符,如果恶意攻击者将这2个UDP服务互指,则网络可用带宽将很快耗尽。 

ICMP----由于在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统对TCP/IP栈的实现在ICMP包
上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓
冲区,当产生畸形的,声称自己的尺寸超过ICMP上限的包也就是加载的尺寸超过64K上限时,就会出现内存
分配错误,导致TCP/IP堆栈崩溃,致使接受方当机。如果对方的操作系统已经可以防御堆栈崩溃,也占去
许多带宽。

Smurf----一个简单的smurf攻击通过使用将回复地址设置成受害网络的广播地址的ICMP应答请求(ping)
数据包来淹没受害主机的方式进行,最终导致该网络的所有主机都对此ICMP应答请求作出答复,导致网络
阻塞,比ping of death洪水的流量高出一或两个数量级。更加复杂的Smurf将源地址改为第三方的受害
者,最终导致第三方雪崩。

tfn2k的程序及分析:
在你执行
$tar zxvf tfn2k.tgz
以后
在src目录下就是源文件,
其中主要的两个文件就是tfn.c和td.c
你可以看一下Makefile文件
SERVER_OBJ = pass.o aes.o base64.o cast.o flood.o ip.o process.o tribe.o td.o
CLIENT_OBJ = pass.o aes.o base64.o cast.o ip.o tribe.o tfn.o
可以看出tfn和td各是由哪些.o链接而成的。

tfn.c:

tfn和td的网络通讯是经过CAST-256算法(RFC 2612)加密,还可能混杂了许多虚假数据包。参看
security_through_obscurity()和encode64()等函数。

尽管tfn没有密码保护,每一个发送给td的命令都有一个16位二进制形式的数在ICMP_ECHOREPLY包的id域。
这个序列号通常是0x0000,这样看起来更象ping初始包的响应。参看passchk()函数。

tfn_sendto()函数是根据hosts.txt向td发命令。

usage()函数是使用帮助。

td.c:

td的守护程序是完全沉默的,它不会对接收到的命令有任何回应。客户端重复发送每一个命令20次
(RETRY=20),并且认为守护程序应该至少能接收到其中一个。如果没有接收到需要重新发送,你也可以修
改RETRY(tfn.c文件中)的值。

守护进程为每一个攻击产生子进程(td.c文件中)。

在看td.c文件时有些迷惑,它作为服务器端并没有绑定固定的端口,后来才明白从tfn到td的通讯是通过
ICMP_ECHOREPLY数据包完成,这样在tfn和td就没有任何基于TCP或UDP的通讯了。


td试图通过修改argv[0]内容以掩饰自己。伪造的进程名在编译时指定,因此每次安装时都有可能不同。这
个功能使TFN2K伪装成代理端主机的普通正常进程。只是简单地检查进程列表未必能找到td(及其子进程)
,在你运行
#./td
以后,在运行
#ps -af
可能根本就找不到td.(不要以为它没有运行啊!)。

td.c的tribe_cmd()是根据id(0--10)执行命令,它要调用process.c中的函数。

process.c中的commerce_syn(),commerce_udp(),commerce_icmp(),commerce_mix(),commerce_smurf()等
函数就是发动攻击的具体程序,根据id(0--11)分别对应着tcp,udp,icmp,mix,smurf等攻击。


防御措施:

见下列链接文章,我就不重复了。

其它DDoS工具

 1. Trinoo: 它是基于UDP flood的攻击软件,它向被攻击目标主机的随机端口发出全零的4字节UDP
包,在处理这些超出其处理能力垃圾数据包的过程中,被攻击主机的网络性能不断下降,直到不能提供正
常服务,乃至崩溃,它对IP地址不做假,此攻击方法用得不如TFN多。 

下载地址:http://darknet.evilnerds.org/dos/ddos/trinoo.tar.gz
 2. Stacheldraht:对命令来源做假,而且可以防范一些路由器用RFC2267过滤。若检查出有过滤现象
,它将只做假IP地址最后8位,从而让用户无法了解到底是哪几个网段的哪台机器被攻击。此外,它还具有
自动更新功能,可随软件的更新而自动更新。 

下载地址:http://darknet.evilnerds.org/dos/ddos/stachel-yps.tar.gz

  关于TFN2K的探讨就此结束,其实许多前辈都撰文写过此类的文章。我只是参考他们的文章(中
文或英文),并细节化了一些。如果有指教或有问题请来信jjgirl@sina.com或在我的BBS留言。感谢你耐心
看完佳佳写的不怎么样的文章。