8月下旬开学,我刚到学校就被告知:学校网络时断时续,大部分网站因超时无法访问。当时我第一个念头就是:冲击波蠕虫!路由器一定没问题,因为这台路由器是新换不到3个月的一台国产品牌路由器,一定是由于冲击波蠕虫爆发引起的网络拥挤堵塞。
于是我开始对网段内的机器扫描,忙着给每台单机打补丁。忙了两天,该补的补了,该升的也升了,可情况仍不见好转,而且时通时不通的情况更加严重,ping外部网关,100个包掉90个包是常事。碰巧的是学校周边市政施工,将单位光纤临时挪动,几个同事认为可能是光纤受到损伤,于是采用替换法将老Cisco 2621(设置相同)换上。希奇的事情发生了,网络竞然通了,ping100个通100个,但连接质量较差,连接速度均在lOOms左右,由此可断定光纤无损。接下来,我将国产路由器IOS升级,打电话咨询,换全新的国产路由器……忙活了近一个星期,问题仍无法解决。
9月初,我将Cisco路由器接上,好奇之余打开Debug监控,在键入debug ip icmp后,意想不到的情况出现了,类似 "2002-1-100:01:05 ICMP:sent unreachable to211.93.39.44(dstwas210.42.94.79),len36"的记录开始疯狂地翻屏。
记录的含义如下:
ICMP:Internet控制信息协议。
sent.发送ICMP报文。
to 211.93.39.44:ICMP报文的目的地址是211.93.39.44。
dstwas210.42.94.79:引起ICMP报文的原始报文的目的地址是210.42.94.79;
'len 36'.ICMP报文的长度是36字节,其中不包括旧报头长度。
我既惊奇又庆幸,惊奇的是,我调试时是抛开内网的,产生如此大的ICMP报文,只能说明路由器接收到外网大量无用报文;庆幸的是,简单的Debuq命令竞然帮我找到了问题所在。于是我换上国产路由器,将1CMP端口封闭,呵呵,随便找一个网站均能顺利打开了。可是却不能再用传统的pinq来测试速度了,不过能顺利打开各个网站就说明问题已经解决了一大半。现将几种蠕虫对网络通信质量危害的主要方式及解决方法总结如下。
冲击波杀手
首先,冲击波杀手W32.Nachi蠕虫使用类型为echo(ICMP TYPE=8)的1CMP报文ping根据自身算法得出的旧地址段,发送大量载荷为"aa"、填充长度为92字节的ICMP报文,检测这些地址段中存活的主机,结果大量1CMP报文导致网络拥挤、堵塞。这就是以下大量1CMP报文数据产生的原因!
下面便是使用了访问列表后,使用debugIPpacket
detaiI命令后,一秒内产生的l35条记录中的1条记录:
对记录的解释如下:
IP.表示这条信息是关于IP报文的。
src=218.72.13.36(FastEtherent0/0):IP报文的源地址和收到报文的接口名称 (假如不是本地生成的报文)。
dst=210.42.92.86.IP报文的目的地址和发送报文的接口名称 (假如路由成功的活)。
len=92:IP报文的长度。
Denied by incoming acl FastEthernet0/0:被FastEthernet0/0的接收接口的接收访问表拒绝。
ICMP:type-8,code-0:ICMP报文的类型和代码值。
随机一秒钟就有l35次的1CMP报文,可想而知高峰期一分钟有多少?一小时有多少?
蠕虫一旦发现存活的主机,便试图使用135端口的RPC漏洞和80端目的Wehdav漏洞进行溢出攻击。溢出成功后会监听666-765范围中随机的一个端口,等待目标主机回连。但是从我们监测的情况看,通常都是707端口。
解决方法
假如您不需要应用这些端口来进行服务,为了防范这种蠕虫,您应该在路由器上关闭下面的协议端口:UDP Port 69,TCP Port135,ICMP echo request(type8)。
span
strip 在路由器上配置如下访问列表:
◆Cisco路由:access-list110deny icmp any any echo (用于控制Nachi蠕虫的扫描)。
◆国产某路由:access-list110denyicmpanyany8 (用于控制Nachi蠕虫的lcrnptype's的扫描)。
冲击波
冲击波(W32.Blaster)蠕虫和Nachi蠕虫攻击的机理差不多,在此就不再赘述。
其主要使用端口为:TCP4444(蠕虫开设的后门端口,用于远程命令控制)、UDP Port 69(用于文件下载)、TCP Port135(蠕虫用以下端口发现有漏洞的系统).TCP Port 137. TCP Port 139.
解决方法
假如您不需要使用以上端口,可以在路由器上关闭以上端口。可在路由器上配置如下访问列表:
用于控制Blaster蠕虫的传播
引申
其实Slamnnfer蠕虫(感染SQL Server)也可以通过以下访问列表来控制其传播:
access-list 110 deny udp any any eq 1434
access-list 110 permit ip any any
另外,为了防止广播流量进入和防范Smurf类型的攻击,在Cisco路由器上还应加上noipdirected-broadcast,国产路由器某品牌则是默认关闭。
最后,别忘了在出口接口上加上interface FastEthernet0/0(FastEthernet0/0为我校出口接口,应根据据各单位的情况而定)。
ip access-group 110 in
ip access-group 110 out
假如内部的机器较多,修补漏洞的时间较长,也可将内部接口上加上,避免无谓的流量造成网络堵塞。
总结
当你明知道问题所在而就是无法解决的时候,是最轻易烦躁的,这时候就需要告诫自己解决问题不能定式于问题的某一点,应该从多方面入手进行解决。
最后还有个问题想了很久,为什么相同设置的Cisco路由器在没有加相应的访问列表时仍然可以正常工作?我猜测可能是和路由器的IOS有关。可能Cisco的IOS的设计对ICMP的冲击作了相应的考虑,而国产某品牌在这方面考虑不足或者有缺陷。这只是我个人的推断,请大家指正。