您现在的位置:e-works > 智造书屋 > 书籍列表 > 网络安全编程技术与实例 > 高级ICMP扫描技术

第三章 网络安全扫描编程

第三节 高级ICMP扫描技术

    Internet控制报文协议(Internet Control Messages Protocol,ICMP)允许主机或路由器报告差错情况和提供有关异常情况的报告。一般来说,ICMP报文提供针对网络层的错误诊断、拥塞控制、路径控制和查询服务四项功能。例如,当一个分组无法到达目的站点或TTL超时后,路由器就会丢弃此分组,并向源站点返回一个目的站点不可到达的ICMP报文。

    ICMP扫描是基本的扫描技术,大家经常使用的程序Ping就是使用ICMP协议来实现的,其实Ping就是一个完整的ICMP扫描案例。IP协议是一种不可靠的协议,无法进行差错控制。但IP协议可以借助其他协议来实现这一功能,如ICMP。

    ICMP协议扫描充分利用了ICMP协议的各种功能,在ICMP协议中定义了多种类型的ICMP报文。

    一般的ICMP报文的首部如图3-4所示。

  ICMP报文首部

图3-4  ICMP报文首部

    类型字段表示ICMP报文的种类,它是ICMP报文中的第一个字段。代码字段进一步限定了ICMP报文种类。校验和字段存储了ICMP所使用的校验和值。

    ICMP报文大体可以分为两种类型,即ICMP差错报文和ICMP询问报文。每个ICMP报头均包含类型、代码和校验和这三项内容,长度为8位、8位和16位,其余选项则随ICMP的功能不同而不同。根据不同的功能需要,在ICMP中提供了多种ICMP报文数据格式。

    ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,是协调的统一时间(Ccordinated Universal Time,UTC),它是世界各地通用标准时间,也叫世界时。这种ICMP报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间只能提供秒级的分辨率。

    ICMP时间戳请求和应答报文格式如图3-5所示。

    ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。系统广播它的ICMP请求报文,ICMP地址掩码请求和应答报文的格式如图3-6所示。

  ICMP时间戳报文格式

图3-5  ICMP时间戳报文格式    图3-6  ICMP地址掩码报文格式

    ICMP端口不可达差错报文是ICMP目的不可到达报文中的一种,可以从ICMP差错报文中所附加的数据中查看错误信息。在使用UDP协议的时候,UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文,其格式如图3-7所示。

    Ping用到的ICMP报文格式是回显请求报文,ICMP回显请求和回显应答报文如图3-8所示。

  ICMP不可达报文

图3-7  ICMP不可达报文    图3-8  ICMP回显请求和应答报文

    ICMP 报文作为 IP 层数据报的数据部分,加上数据报的首部,组成 IP 数据报发送出去。

    最常用的ICMP扫描方法就是利用PING的原理,发送ICMP回显请求报文,然后监听是否有ICMP回显应答报文返回,如果没有就证明目标主机不存在或者已经停机,如果能够返回ICMP回显应答报文,就证明主机正在运行。其过程如图3-9所示。

  ICMP回显探测

图3-9  ICMP回显探测

    也可以利用异常IP包来进行探测,例如向目标主机发送错误的IP包,目标主机会反馈ICMP Parameter Problem Error信息。常见的伪造错误字段为Header Length和IP Options。不同厂家的路由器和操作系统对这些错误的处理方式不同,返回的结果也不同。这种方法同样可以探测目标主机和网络设备。

    可以构造超长包探测内部路由器,若构造的数据包长度超过目标系统所在路由器的路径最大传输单元PMTU且设置禁止分片标志,该路由器会反馈一个差错报文,其内容表示需要分片但是设置了不分片标志位DF(Don’t Fragment)。

    如果目标主机是在防火墙内部,那么可以利用反向探测技术探测被过滤设备或防火墙保护的网络和主机。构造可能的内部IP地址列表,并向这些地址发送数据包。当对方路由器接收到这些数据包时,会进行IP识别并路由,对不在其服务范围的IP包发送ICMP Host Unreachable或ICMP Time Exceeded 错误报文,没有接收到相应错误报文的IP地址可被认为在该网络中。

    ICMP扫描是基本的安全扫描技术,是很多其他扫描功能的基础,可以利用它来判断对方主机或网络设备是否存活,是否正在正常运行。只有确定其正常运行,才能够继续进行后面的各种扫描功能。但是有时候,使用ICMP扫描不一定准确,很多系统都安装了各种安全软件来应对ICMP扫描,使ICMP扫描的结果不准确。这个时候,就要借助其他安全扫描技术。

    当然要防范对方进行ICMP扫描,可以使用检测工具来记录以便发现有哪些入侵者正在扫描系统,很多防火墙或者入侵检测系统都有此项功能。另外,用户也可以使用防火墙或者路由器来进行设置,防止ICMP扫描。