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

几年前的某天晚上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的信息报文已经作废。