大家好,欢迎来到IT知识分享网。
最近被CISSP题目中各种攻击搞得晕晕的,找到一个详细的介绍ICMP的,写的真的很好。。。
目录
1.ICMP出现的原因
在IP通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,但是由于搞错了端口号,服务器软件可能不能接受它。这时,在错误发生的现场,为了联络而飞过来的信鸽就是ICMP 报文。在IP 网络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。ICMP 协议是为了辅助IP 协议,交换各种各样的控制信息而被制造出来的。
制定万维网规格的IETF 在1981 年将RFC7922作为ICMP 的基本规格整理出来了。那个RFC792 的开头部分里写着“ICMP 是IP 的不可缺少的部分,所有的IP 软件必须实现ICMP协议。也是,ICMP 是为了分担IP 一部分功能而被制定出来的。
2.ICMP的用途
在RFC,将ICMP 大致分成两种功能:差错通知和信息查询。
[1]给送信者的错误通知;[2]送信者的信息查询。
[1]是到IP 数据包被对方的计算机处理的过程中,发生了什么错误时被使用。不仅传送发生了错误这个事实,也传送错误原因等消息。
[2]的信息询问是在送信方的计算机向对方计算机询问信息时被使用。被询问内容的种类非常丰富,他们有目标IP 地址的机器是否存在这种基本确认,调查自己网络的子网掩码,取得对方机器的时间信息等。
3.ICMP作为IP的上层协议在工作
ICMP 的内容是放在IP 数据包的数据部分里来互相交流的。也就是,从ICMP的报文格式来说,ICMP 是IP 的上层协议。但是,正如RFC 所记载的,ICMP 是分担了IP 的一部分功能。所以,被认为是与IP 同层的协议。看一下RFC 规定的数据包格式和报文内容吧。
更加详细地看一下数据包的格式吧。用来传送ICMP 报文的IP 数据包上实际上有不少字段。但是实际上与ICMP 协议相关的只有7 个子段。
1)协议;2)源IP 地址;3)目的IP 地址;4)生存时间;这四个包含在IP 首部的字段。
5)类型;6)代码;7)选项数据;这三个包含在ICMP数据部分的字段。
这里面,1)协议字段值是1。2)和3)是用来交流ICMP 报文的地址信息,没有特殊意义。对于理解ICMP 本身,重要的是5),6),7)三个字段。这里面的可以称为核心的重要字段是5)类型,6)代码这两个字段。所有ICMP 用来交流错误通知和信息询问的报文,都是由类型和代码的组合来表示的。RFC 定义了15种类型。“报文不可到达”这样的错误通知和“回送请求”这样的信息查询是由类型字段来区分的。ICMP报文由类型来表达它的大概意义,需要传递细小的信息时由代码来分类。进一步,需要向对方传送数据的时候,用7)选项数据字段来放置。
可能的消息列表:
4.ICMP实现之MTU探索
路径MTU 探索的原理本身是非常简单的。首先,Windows 向通信对方送IP 数据包时,先设置IP 首部的分片禁止标志然后再送。这是路径MTU 探索的基本。假如,Windows 将大于1000 字节的数据包送了出去,通信路径上有MTU 从1500 字节变成1000 字节的地方。因此,那个路由器将不允许超过1000 字节的数据包通过,而进入MTU 是1000 字节的网路。路由器尝试着将IP 数据包分片。但是因为数据包的分片禁止标志是有效的,所以不能分片。该路由器就将该IP 数据包丢弃,并用ICMP 通知送信方“想分片,但不能分片”。这时路由器发送的ICMP的类型字段是3,代码字段为4。这是“需要分片但不能分片,不能送至终点”的意思。而且,大多数路由器将在数据选项部里填入不分片就能通过的MTU 大小。Windows 收到该ICMP 报文后就知道了不分片就能够传送的数据大小,并暂时将MTU 大小更换掉,然后继续通信。
5.ICMP实现之改变路由
改变路由是指路由器向送信方计算机指示路径改变这个功能。计算机根据自己的路由信息(路由表)来决定传送目标。不知道发给谁好的时候,就将数据包发给设为默认网关的路由器。被指定为默认网关的路由器接收到数据包,发现将数据包发给局域网内的其它路由器会比较快的时候,将这一信息通过ICMP 通知发送方。这时使用的是,类型是5,代码是1 的ICMP 改变路由报文。在选项数据部分里写着应该发送给的路由器IP 地址。Windows 收到这个报文后,重写自己的路由表,与对方的通信将在一段时间里经由被指定的路由器来实行。
6.ICMP实现之源点抑制
数据包集中到达某一路由器后,数据包因为来不及被处理,有可能被丢弃的情况。这时候,向送信方发送的是ICMP 源点抑制报文,用来使送行方减慢发送速度。
7.ICMP实现之ping命令
8.ICMP实现之traceroute命令
9.ICMP实现之端口扫描
所谓的端口扫描就是检查服务器不需要的端口是否开着。服务器管理者用来检查有没有安全上有问题的漏洞开着。不是象ping 和traceroute 那样是操作系统自带的工具,需要利用网络工具才行。
端口扫描大致分为“UDP 的端口扫描”和“TCP 的端口扫描”两种。这里面,与ICMP 相关的是UDP一边。使用TCP 的通信,通信之前必定要先遵循三向握手的程序。因此,只要边错开端口号边尝试TCP连接就能调查端口的开闭。不特别需要ICMP。与此相对,UDP 没有这样的连接程序。因此,调查端口是否打开需要想点办法。这样,被使用的是ICMP。根据ICMP 规格,UDP 数据包到达不存在的端口时,服务器需要返回ICMP 的“终点不可达”之一的“端口不可达”报文。
具体来说,向希望调查的服务器发送端口号被适当指定了的UDP 数据包。这样,目标端口没开着的话,服务器就返回ICMP 端口不可达报文。返回的ICMP 数据包的选项数据字段里放入着,送信方送出的UDP 数据包的IP 首部与UDP 首部的头8 个字节。送信方通过这个信息来辨别该错误通知是针对哪个UDP 数据包的,并判断端口是否打开着。
UDP 端口扫描一边一个一个错开端口号,一边持续着这个通信。这样,就知道了哪个端口是“好象开着的”了。但是,UDP 端口扫描与TCP 端口扫描有很大区别的地方。那就是,即使ICMP 端口不可达报文没有返回,也不能断定端口开着。端口扫描除了被管理员用来检查服务器上是否有开着的漏洞,作为黑客非法访问的事先调查,对服务器实施的情况也是很多的。需要非常小心地来使用。
10.ICMP和安全的关系
为什么有停止ICMP 使用的设定项目呢?理由只有一个,那就是确保安全。虽然ICMP 是非常便利的协议,但黑客在尝试非法访问的时候会被恶意利用。由于ICMP 被恶意使用而遭受损害的用户正在不断增加之中,因此有了限制ICMP 使用的意见。
那么实际上,ICMP 被怎样恶意使用的呢?想考虑安全相关问题,不知道这个就开不了头。看两个典型的恶意使用例子吧。
作为恶意使用ICMP 的最有代表性的例子,也就是所谓的 “ping 洪水”的攻击。它利用ping 的原理,向目标服务器发送大量的ICMP 回送请求。这是黑客向特定的机器连续发送大量的ICMP 回送请求报文。目标机器回答到达的ICMP 回送请求已经用尽全力了,原来的通信处理就变得很不稳定了。进一步,目标机器连接的网络也可能由于大量的ICMP 数据包而陷入不可使用的状态。
除此之外,还有很多各种各样ICMP 被恶意使用的例子。例如,通知错误或询问信息本身,也有被黑客用来传递谎言的可能性。同用信鸽来扩展谎言的传播,通过传递与事实不同的信息来使人判断错误是一样的。而且,反过来也有传递错误信息而变成问题的例子。例如,在实现篇里看到的端口扫描,黑客就可以利用它来进行攻击对象的调查。进一步,推翻了“ICMP 是用来控制IP 的”这一常识的恶意使用方法也登场了。就是将ICMP 的选项数据部分作为信息搬运工的手法。黑客将这种工具隐藏在服务器里,从外部控制服务器,将用户的个人信息和重要的情报偷盗出来。如上,仅从安全的方面来说,ICMP 是有百害而无一利的。
假设通信路径上有因为MTU 大小不同而需要分片的路由器。而且,计算机和路由器之间,为了安全上的原因,设置了阻止ICMP 报文通过的防火墙。这种情况下,计算机实行路径MTU 探索将会怎么样呢?
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119389.html







