ICMP协议

 

1 ICMP对安全的重要性

ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death” 攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。

 

应对措施:

对于“Ping of Death”攻击,可以采取两种方法进行防范:第一种方法是在路由器上对ICMP数据包进行带宽限制,将ICMP占用的带宽控制在一定的范围内,这样即使有ICMP攻击,它所占用的带宽也是非常有限的,对整个网络的影响非常少;第二种方法就是在主机上设置ICMP数据包的处理规则,最好是设定拒绝所有的ICMP数据包。设置ICMP数据包处理规则的方法也有两种,一种是在操作系统上设置包过滤,另一种是在主机上安装防火墙。

 

 

2.ICMP信息在哪种情况下能发出?

 

IP网络不可靠并且不能保证信息传递,因此当发生问题时通知发送人是很重要的。ICMP协议是一种提供有关阻止数据包传递的网络故障问题反馈信息的机制。它让TCP等上层协议能够意识到数据包没有送达目的地,ICMP协议提供一种查出灾难性问题的方法。这些灾难性的问题包括“TTL exceeded”(超过生存时间)和“需要分更多的数据段”等。ICMP协议不报告IP校验失败等常见的问题。这是因为我们假定TCP或者其它可靠的协议能够处理这类数据包损坏的问题。而且,如果我们使用UDP等不可靠的协议,我们就不应理会较小数量的数据损失。 总之,引进ICMP协议,目的就是为了当网络出现问题的时候返回有用的描述错误的信息,而不是使IP协议变得绝对可靠。

 

反之,网络问题需要立即报告。例如,如果IP TTL值(IP生存时间)将达到零,这就可能是网络的某个部分发生了路由环路问题,这样将没有任何数据包能发送到目的地。端点系统需要了解这些类型的故障。ICMP是一种发送各种消息报告网络状态的协议,而非仅仅是简单的ping(联通性测试程序)。回应请求(echo request)仅是ICMP协议提供的众多消息之一。Ping信息可以被过滤掉。但是,大多数ICMP消息类型是IP、TCP和其它协议正常运行所需要的。永远不要相信ICMP协议是邪恶的并且简单的封锁这个协议。

 

为了避免信息无限制地返回,不会产生和发送针对ICMP消息的ICMP消息,而且ICMP信息只在处理数据报偏移量为0时发送。ICMP消息在以下几种情况下会被发送出来:

1.当数据报不能到达目的地时

2.当网关失去缓存和转发数据报功能时

3.当网关发现并能够引导主机在更短的路由上发送数据报时

 

 

3.ICMP协议

 

ICMP协议本身非常复杂。每一种类型的ICMP消息也称“主要类型(major type)”拥有自己的“子类型编码(minor codes)”。ICMP协议工作在第3层,因此,它能够在互联网上路由。一个ICMP数据包实际上就是一个IP数据部分包含ICMP协议数据的IP数据包。每一个ICMP消息都将包含引发这条ICMP消息的数据包的完全IP包头,这样,端点系统就会知道实际上哪一个数据包没有发送到目的地。另外引发此ICMP消息的数据包的前8个字节也将包括在内,这通常是TCP或者UDP包头。

简略的说,ICMP协议消息包含永远不会变化的三个字段,随后是ICMP数据,然后是引发此消息的源IP数据包包头。不会变化的三个字段中,前8个字节包含ICMP类型(主要类型)、第二个字段包含了类型代码、第三个字段是ICMP消息校验值。

我们需要认识到,ICMP协议在某些情况下不会发送错误信息。ICMP不会对ICMP信息做出响应。如果ICMP回应其它ICMP消息,这些消息的数量会爆炸性增长而演变为一场ICMP消息风暴。为了防止出现广播风暴,ICMP消息也不会回应一个广播或者多播地址。

最有用的ICMP数据包类型“目标不可达”(类型三)的消息。错误消息一般由路由器生成,并且发送给数据包的来源。大多数错误信息还将发送给与发送的数据包有关的应用程序。在这种情况下,TCP协议将广泛使用ICMP协议。我们在后面将很快看到这种情况。

 

在IPv4协议中最常用的ICMP消息类型有以下几种:

回显应答(类型0)和回显请求(类型8):这是Ping程序发送的信息。

•目标不可达(类型3)

•源抑制(类型4):这是一种用于通知发送者路由器或者主机出现阻塞现象的ICMP消息,发送者需要降低发送速度。

•重定向(类型5):这个消息用来向可以访问两台路由器的主机说“请使用另一台路由器”。

•路由器信息应答(类型9)和路由器信息请求(类型10)

•超时(类型11):这个消息有两种用途。第一,当超过IP生存期时向发送系统发出错误信息。第二,如果分段的IP数据报没有在某种时限内重新组合,这个消息将通知发送系统。

当然,上述各种类型的消息中都包含子类型代码。类型三消息“目标不可达”本身有15个子类型代码。我们就不提供每一项的细节了。但是,ICMP协议中有一项非常重要的应用要依靠类型三的消息。

 

 3.1 PMTU

路径最大传输单元(PMTU)是各种协议用来寻找整条路径中支持的最大的MTU(最大传输单元)的机制,小于此限制的数据可以不用分段。发送者在其本地接口设置最大的数据包规格,然后,在IP包头中使用DF(不要分段)的标记发出数据包。如果有问题发送者就会收到第三种类型的ICMP错误信息,其子类型代码是“要求分段,但是已经设置了DF标记”。当发生这种情况是,发送者知道它必须要减小发送数据的规格。如果没有返回错误信息,这就表明MTU的设置没有问题。

在查找PMTU时的主要问题是人们常封锁ICMP协议,阻止这个报错信息传递到发送数据的主机。这种情况很多时候发生在你设法连接的远程站点。假如你向一台Web服务器发送一个请求,但是,一个空白页却不断出现。在虚拟专用网连接上的人们经常会看到这种情况,这是因为由于有的虚拟专用网封装的额外的文件头,它们的MTU比通常的容量要小一些。当远程Web服务器向虚拟专用网用户发送其要求的内容时,如果数据包太大,用户前面最后的路由跳数需要为这个数据分段。如果发送方设置DF标记之后,它能做的一切就是通知发送者必须发送较小的数据包。但是,发送者封锁了ICMP协议,因此这个网站将永远不会看到这种ICMP信息。不过一个好消息是大多数TCP协议的执行都是智能化的。如果它们一直得不到发送数据的许可,它们会自己以较小的分段尺寸发送数据。但是,如果你使用某些流行的、操作方便的操作系统,这种机制并没实现。

简言之,封锁ICMP协议对于成功地运行网络是有害的。这不仅会破坏ping,事实上,如果ICMP协议不工作,许多协议都将不能完全发挥作用。

 

 

4. 小结

查找路径最大传输单元能够让规格正确的数据包在各种数据包容量的链路上传送。 ICMP对于恰当的路由和数据包传递是非常重要的,你只能封锁你不需要的那一些消息。

 

源文档 <http://www.ithlj.com/news/2006-3/13396.html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值