接到客户求助,最近进行了一次网络"出诊"。这是一个由傀儡主机的DDos攻击引发的网络故障,案例比较典型,排错过程也颇曲折。笔者就还原其过程,与大家分享。
1.网络环境
这个客户是一家化工企业,网络规模不大。十多台交换机组成的局域网,节点大约150个左右。没有划分VLAN,-部分主机运行IPX协议,另一部分运行TCP/IP协议。其中只有少数主机可以访问Internet,接入模式为ADSL路由器直接连接网络中的一台交换机。ADSL路由器中启用了其自带防火墙功能,所有可以上网的主机安装了防病毒软件。
2.故障描述
最近的某一天,整个网络突然瘫痪。可以看到所有交换机端口指示灯急速闪烁,测试得知网络中任意两台主机之间不能相互ping通,所有网络应用均不能正常进行。在拔掉部分网线(交换机之间的级连线)后,症状有所减缓,最后恢复正常。将拔掉的网线逐一插回原位,故障现象未重新出现。此后这种现象不定时、无规律地出现。
3.故障分析
基于故障发生时交换机端口指示灯急速闪烁、网络中任意两台主机之间相互不能ping通这一现象,初步断定此时网络中充斥了大量的广播包,耗尽了网络资源。那么这些突然出现的巨量广播包是哪里来的呢?为查找广播源,在故障出现时,使用Sninffer软件捕捉数据包。结果发现,网络中并没有出现原来估计的广播包,却有大量的不正常单目IP数据包。
4.排除故障
通过分析发现,这些数据包是主机172.*.*.1l发送给主机219.*.*.88的,发送速度不小于每秒l万5千个。询问管理员得知,172.*.*.1l是内网的一台可以访问Internet的主机。这明显是不正常的,将该可疑主机断开后,问题解决。
5.深入分析
网络故障虽然排错,但笔者感觉一切并没有这么简单。因为按常理,发送给主机219.*.*.88的数据包不是广播包,不应该被发送到运行Sniffer主机所在的交换机端口。很明显,这些数据包在网络中以广播的形式被发送了。如此数量的广播包充斥网络,正是造成网络瘫痪的罪魁祸首。
(1)。局域网主机成了傀儡
为搞清故障原因,在可疑主机上安装Sniffer,分析网络行为。通过抓包分析发现,一旦连接Internet,该主机主动连接到外网中一FTP服务器,并下载文本文件ddos.txt。那么,ddos.txt文件内容中有什么呢?原来是一个IP地址和8O端口。然后,对数据包进一步分析发现所有数据包的目标主机正好是ddos.txt中指定的IP地址。这些无意义的数据包之所以使用8O端口,是为了突破防火墙的限制。原来,这台主机"有幸"成了一次分布式拒绝服务攻击(DDoS)的傀儡机。每次连接E互连网,自动到一个FTP服务器下载文件ddos.txt,如果该文件为空,则继续以一定时间间隔下载文件,直到获得的文件中有目标主机的IP地址和端口后,即开始向目标主机展开DoS攻击。这正是网络故障现象不定时、无规律地出现的原因。
(2)。ADSL路由器被"淹没"
另一个问题是,这些攻击包应该是从傀儡机发送到ADSL路由器,然后到Internet中目标主机的,并不是通常所说的广播包,为什么交换机以广播的形式发送这些广播包呢?分析可能原因只有一个:此时交换机的地址转发表(CAM)中没有ADSL路由器内网接口的物理地址,引起交换机将单目包广播到所有交换机端口。
开始时,交换机地址转发表中包含ADSL路由器的物理地址。那么,傀儡机开始攻击后,网络中形成一个稳定的攻击数据流:傀儡机→若干交换机→ADSL路由器→被攻击的目标主机。此时对内网的影响仅仅是某些交换机的端口和ADSL路由器,ADSL路由器因为忙于处理大量的攻击包而被"淹没",会导致内网中主机访问互连网出现问题。
(3)。交互导致的广播风暴
什么原因导致交换机的地址转发表丢弃了ADSL路由器内网接口的物理地址昵?有两种情况:一是缺省情况下,5分钟内,如果交换机没有接到某个设备发送的数据帧,则认为该设备已经宕机,为节省资源,将从CAM表中删除该地址。二是当STP协议探测到网络拓扑有改变时,将清空所有未刷新的CAM表项。假定此时有人因为不能上网而重新启动主机,或插拨网线,则会引起交换机端口状态发生变化。此时,交换机认为网络拓扑发生了变化,它的下-个动作是通知所有交换机,15秒内清除未被刷新的地址转发表表项。
这里的"未被刷新"是指,交换机没有收到以该物理地址为源地址的数据帧,也就是说,该设备没有发送数据帧经过交换机到其他设备,那么该设备的物理地址在交换机的地址转发表中将被清除。以后,所有以该设备物理地址为目的地址的数据帧,虽然不是广播帧,也将被发送到交换机的所有端口,这就是平时所说的广播风暴。
(4)。故障形成过程
通过上面的分析,最后回到我们的例子理一理这次故障形成的过程。在傀儡机的攻击行为开始后,小小的ADSL路由器每秒要接收、处理不少于l5o00个数据包,它纵然是有三头六臂,也没机会向交换机发送数据包了。也就是说,它现在是只有接受没有发送,没办法刷新交换机cAM表中的相关表项。那么,快的话15秒后,慢的话5分钟,交换机就会清除ADSL路由器的物理地址记录。别忘了,此时攻击数据流并没有停止,而这些攻击数据帧恰恰是以ADSL路由器物理地址为目的地址的,这样,灾难发生了,所有数据帧被广播到网络中每台交换机中的每-个端口。
6.解决方案
这此网络故障从表面上看是由一台傀儡主机引起的,具有一定的偶然性。但从根本上来说是必然,不合理的网络结构是造成这次故障的关键因素。笔者给出的解决方案是:
(1)。将充当傀儡机的电脑从网络中断开后,重新安装系统,彻底杜绝隐患。
(2)。加强本地网络安全防范措施的同时,对原网络结构进行调整:据不同应用分成几个VLAN,将可以上网的机划分到某个特定VLAN中,限定此类故障的影响范围。
(3)。将连接主机的端口配置为STP速端口,不参与STP协议,可以减少网络中交换机不必要的拓扑改变操作。
就这次网络排错笔者的启示是:网络排错类同于医生治病,庸医往往是"头痛医头,脚痛医教"不会从根上进行医治,而高明的医生却往往是治本。网络排错何尝不是呢?