互联网的巨大威胁 ICMP洪水攻击浅析

ZDNet软件频道 时间:2009-11-04 作者: | 中国IT实验室 我要评论()
本文关键词:网络安全 攻击防范 icmp Windows
几年前的某天晚上9时,两个“大虾”进入一个聊天室,提议里面的50多个网民“去响应号召,做爱国的事”,以下是原话摘录:

  几年前的某天晚上9时,两个“大虾”进入一个聊天室,提议里面的50多个网民“去响应号召,做爱国的事”,以下是原话摘录:

  大虾甲:今晚10点,大家一起去ping白宫!

  大虾乙:嗯嗯!ping死白宫!

  网民:怎么做?

  大虾甲:你怎么这么笨?开MS-DOS窗口,输入 ping xxx.xxx.xxx.xxx -l 65500 -t就可以了!

  网民:这样有什么用?

  大虾甲:只要这样做,白宫网站就进不去了。

  网民:哦~~原来如此~~~这样做是什么原理?高手可以解释一下吗?

  大虾甲:这个嘛……还是让他来说吧!

  大虾乙:这个……这个……咳,总之别问这么多,照着做就是了,上头说过好像是什么DOS攻击吧,这样做,白宫网站的服务器就会垮掉。

  大虾甲:总之到时候你们一起这样做就可以了!10点准时开始,我们先去准备了!

  网民:不懂……

  不懂归不懂,当晚10点,爱国的网民们一起用上面“高手”给出的命令开始了雄伟的“爱国反击战”——一场无聊的闹剧!

  他们这样做是什么原理?那样的“攻击”有效吗?要解释这些,就要从icmp协议说起。

  一、什么是icmp协议?

  icmp全称Internet Control Message Protocol(网际控制信息协议)。提起icmp,一些人可能会感到陌生,实际上,icmp与我们息息相关。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了icmp协议,当某个网关发现传输错误时,立即向信源主机发送icmp报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。

  二、icmp报文格式

  icmp报文包含在IP数据报中,属于IP的一个用户,IP头部就在icmp报文的前面,所以一个icmp报文包括IP头部、icmp头部和icmp报文(见图表,icmp报文的结构和几种常见的icmp报文格式),IP头部的Protocol值为1就说明这是一个icmp报文,icmp头部中的类型(Type)域用于说明icmp报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种icmp报文的类型,所有数据都在icmp头部后面。RFC定义了13种icmp报文格式,具体如下:

  类型代码 类型描述

  0 响应应答(ECHO-REPLY)

  3 不可到达

  4 源抑制

  5 重定向

  8 响应请求(ECHO-REQUEST)

  11 超时

  12 参数失灵

  13 时间戳请求

  14 时间戳应答

  15 信息请求(*已作废)

  16 信息应答(*已作废)

  17 地址掩码请求

  18 地址掩码应答

  其中代码为15、16的信息报文已经作废。

  下面是几种常见的icmp报文:

  1.响应请求

  我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的icmp报文,如果途中没有异常(例如被路由器丢弃、目标不回应icmp或传输失败),则目标返回Type=0的icmp报文,说明这台主机存在,更详细的tracert通过计算icmp报文通过的节点来确定主机与目标之间的网络距离。

  2.目标不可到达、源抑制和超时报文

  这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的icmp报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于icmp没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发icmp超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。

  3.时间戳

  时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。

  三、回到正题:这样的攻击有效吗?

  在前面讲过了,ping使用的是ECHO应答,不知道大家注意过没有,ping的返回很慢,用NetXRAY抓包仅为1--5包/秒,这是为什么呢?事实上,icmp本身并不慢(由于icmp是SOCK_RAW产生的原始报文,速度比SOCK_STREAM的SYN和SOCK_DGRAM的UDP要快几乎10倍!),这样的速度是ping程序故意延迟的(为什么?M$可不想每个人都能用ping来干坏事),同样,我测试过一些号称“ping洪水”的程序,发现它们的效率和ping.exe没什么两样,经过Dependency Walker查看程序调用的函数发现,他们用的是icmp.dll提供的icmpSendEcho这个API,这个函数是计算ECHO时间的,速度当然慢!而那两个“高手”号召的ping攻击实际上就是为了实现icmp洪水攻击,但是他们用的方法……想想洪水的速度和山涧小溪的速度相差多少吧!就用ping.exe和icmpSendEcho这种小溪慢慢流淌的速度能做什么?还不是让人家看笑话!这种攻击根本就是浪费自己的时间!(如今还经常有人问ping -l 65500 -t的攻击威力如何……哎,悲哀啊悲哀……)

网络安全

攻击防范

icmp

Windows

用户评论
用户名
评论内容
发表时间
ZDNet网友
2011-03-18 14:57:01
ZDNet网友
2010-05-21 00:49:14
ZDNet网友
2010-05-21 00:48:00
ZDNet网友
微软应该对自己的用户负责,如果用户完全使用xp升级微软win7,为什么要付出这样麻烦的代价?都是微软出品软件,且都是利用该软件获取信息以及处理文字、多媒体功能,微软应该尽可能方便用户!虽然有时候这样的请求也许跟不上时代技术发展的脚步,但是微软不要以此为借口,认为一切都理所应当,就不可以方便用户。还是要尽力,所谓拿人手短吃人嘴软,商业不正是讲求有商道吗!至少做人需诚实守信,尽可能帮助用户顺利、安全转换操作系统、各种必须软件功能尽可能兼容以及信息尽可能的少丢失!虽然这很大程度仅仅取决于微软等计算机专家、工程师的自我自律约束,我们普通用户恐怕很难知道微软究竟仅了多大力量为用户考虑,但是我相信真相会有被发现的一天,无论多久远。 微软从某种意义上来说,就是一个类似“掌握魔方”操作特别出神入化的公司。几乎奠定了电脑主要的“规则”,但是,我却相信不久将来我们会发现,电脑依然是非常有限的一个小系统而已!随着我们新的关键材料认知突破,电脑系统会真正被另一个革命性新电脑系统所取代,不要以为我这样的说法是无稽之谈不可实现,我却认为很有可能,只看这样的情况发生究竟是快还是慢,是早还是迟!变成历史的小玩具之后的电脑系统,微软会留下良好的历史声名吗?我们拭目以待! 网友::我爱佛祖
2010-02-03 13:52:55
- 发表评论 -
匿名
注册用户

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134