tfn2k使用方法和对策(3)
佚名
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留言。感谢你耐心看完佳佳写的不怎么样的文章。