ICMP(Internet control Message Protocol)
目录
|
ICMP的全称是Intemet Control Message Protocol,即因特网控制报文协议,是一个标准的TCP/IP协议,工作在IP层,所有的IP路由器和主机都支持该协议,其功能是在lP主机、路由器之间传递网络通不通、主机是否可达、路由是否可用等反映网络本身状况的控制消息。
ICMP的使用者主要是路由器,接受者是IP数据报的源发主机端。当路由器发现某份IP数据报因为某种原因无法继续转发和投递时,相关的实体形成ICMP报文,并从该IP数据报中截取源发主机IP地址,形成新的IP数据报转发给源发主机,以报告差错的发生及原因。
为标识出ICMP,IP数据报协议段的值是1。ICMP报文分为ICMP报文头部和ICMP报文体部两部分。
ICMP头部主要有类型(Type)、代码(Code)和校验和等3个字段。其中类型字段为单字节整数,表示差错的类型;代码字段为单字节整数,表示差错的原因;类型和代码段规定了报文的意义及这种报文分组其余部分的格式;校验和表示整个ICMP报文的校验结果。
——ICMP有52种类型和代码,各有其所用。例如TYPE=3的Destinationunreachable报文,包含15个子类型代码(code),用于准确区分哪些设备不能到达,有时还可以指出不能达到的原因。
——ICMP收集到的诊断信息包括:主机关闭或数据报不能到达目的地;网关已经失去缓存功能或不通;网络上的其它故障或网关能够引导主机在更短路由上发送等。因此ICMP经常被广域网管理员用作诊断工具,帮助网络管理人员和用户识别网络问题。
——ICMP最广泛的应用是ping应用程序。ping命令是一个专用于TCP/IP协议的探测工具,它发送ICMP数据包,直接在系统内核中实现,用于确定本地主机是否能与另一台主机交换(发送与接收)数据报。通过这种机制监测某台主机的存在与否或者与链路的畅通与否并可分析网络速度。
—一利用ICMP来了解IP数据报的整个路由。利用路由器对IP数据报的1TrL值减1,若1TrL=0则丢弃数据报,并返回TYEE=3的ICMP报文的特点,跟踪IP数据报发送的路由。由源发端主机形成一系列宿主机无法处理的IP数据报(如对应一个不存在的端口号),并使其生存期值依次为1、2、3?,逐个发往网络。由于主机和路由器对路由信息的缓存能力,这些1TrL值依次递增的数据报将沿着原路径向宿结点前进。如果整个路径中包括了N个路由器,则可返回N个主机不可达和一个端口不可达报文,了解路径中的路由。
——利用源发端发送一系列报文长度逐渐变化的ICMP报文,而转发网络对于大于MPU的数据报产生主机不可达报文的特点,测试出整个路径最大MTU。
——利用ICMP来估算链路的速度等等。
由于ICMP过于简单,所以它对网络的安全有比较大的负面影响。
——ICMP协议是无连接的。只要在源发端完成ICMP报文的封装并传递给路由器,这个报文就会像邮包一样被投递到宿主机端。这使得ICMP协议非常灵活快捷。但同时这也是一个非常致命的缺陷——源发端的人可以随便利用SOCK—RAW(原始套接口)编程技术直接改写报文的ICMP酋部和IP首部,伪造ICMP报文并发送出去,却不用担心源发端会在接收端留下任何痕迹,从而制造出各种各样的攻击软件。
——利用ICMP可以进行网络扫描,从而查出目标网络中存活的主机和主机所使用的操作系统等。
——利用ICMP的重定向功能,可调整路由器的路由列表或向用户的主机发送ICMP重定向报文,从而导致DOS攻击。
——由于ICMP报文是系统内核或进程直接处理而不是通过端口,所以ICMP木马正是利用这个机会将自己伪装成一个ping的进程,系统就会将ICMPECHOREPLY(ping的回包)的监听、处理权交给木马进程。使木马接受、分析并从报文中解码出命令和数据。
——超时报文(Time Exceeded;TYPE:=11)通常用于错误处理,也可用于定位网络。但利用追踪路由命令发送一个人为设置的、TTL值很低的报文,而导致路由器发回一个超时报文,其中包括路由器的IP地址。另外超时报文还可以和子类型code一起使用。如果接受端没有收到全部报文,并且重组这些报文的时间已经超时,该子类型将向发送主机发出信息。扫描程序通过只发出第一个报文来扫描网络,等待对方主机发回网络超时的信息。如果系统的端口没有被防火墙屏蔽,这种子类型可以用于定位端口地址。
ICMP非常有用,但今天各种各样的不充分的ICMP被滥用,没有遵守RFC792原先制订的标准。所以应采取一定的措施使它变得安全一点。
——可利用报文过滤技术对ICMP报文进行过滤。因为攻击者可以利用ICMP来获取用户网络上的大量信息,为居心不测者攻击内部网络提供方便。往往我们希望内部网络用户可以ping外界主机,而外界主机不可ping内部主机。因为ICMP需要双向通讯。所以我们可以在路由器的出站和人站方向上都设置访问列表进行控制。这正是根据出站和人站处理整个的“ICMP的限制”问题。一般出站的ICMP回声被限制只支持个人或单个服务器,而用人站的ICMP回声验证远程机器。
——对于安全性要求不高的网络,或不需要防止端口扫描的网络,可以不考虑有关ICMP的问题。然而,对于安全性至关重要的网络,最好让尽可能少的ICMP类型通过防火墙。在所有的ICMP报文中,目的不可达报文是通过防火墙到达内网中最重要的报文。有的网管员就只允许目的不可达一种ICMP报文通过防火墙,目的不可达报文与路径最大传输单元MTU的确定有关。在防火墙上如果禁止所有的ICMP报文通过,会对IP的性能和网络效率有所影响。
——如果用过滤方式来保护web服务器或其它公用服务器,也可允许源结束报文进入企业内部网。但是一般地只有公开地址的服务器、防火墙、联人因特网的路由器有真正的理由使用ICMP与外界对话。建议所有对外的传输都经过代理,对内的ICMP传输回到代理地址的时候要经过防火墙。这至少限制了ICMP超时数据包进入一个内部地址,却可能阻塞超时数据包。