畸形报文攻击种类及防御

来源:互联网 发布:五子棋小游戏源码下载 编辑:程序博客网 时间:2024/04/29 11:47

    网络攻击可分为拒绝服务型攻击、畸形报文攻击和扫描窥探攻击三大类。在上一篇文章中已经详细介绍了拒绝服务型攻击(DOS/DDOS)攻击的原理、方法及防御手段,本文将接着介绍畸形报文攻击。

    畸形报文攻击是通过向目标系统发送有缺陷的IP 报文,使得目标系统在处理这样的 IP包时会出现崩溃,给目标系统带来损失。主要的畸形报文攻击有 Ping of DeathTeardrop等。 

    1). Ping of Death攻击

         Ping of Death俗称“死拼”,其攻击原理是攻击者A向受害者B发送一些尺寸超大的ICMP(Ping命令使用的是ICMP报文)报文对其进行攻击(对于有些路由器或系统,在接收到一个这样的报文后,由于处理不当,会造成系统崩溃、死机或重启)

    为了让大家更好的理解Ping of Death攻击原理,下面补充介绍下IP报文和ICMP报文的封装格式。如下图所示:    

        1).4位版本:标识IP协议的版本。如果是IPV4,则为ox4,二进制为0100。如果是IPV6,则为ox6,二进制为0110

        2).4位首部长度:标识IP首部的长度,单位是DWord(4字节)4位二进制数组成的最大数为1111,十进制为15,所以IP首部的最大长度为:15*4=60字节。

普通IP报文的首部长度为20字节,所以该四位首部长度标识位一般为:0101

        3).8位服务类型(TOS)TOSType Of Services的缩写。具体含义如下图所示:

  

   

    第2345位分别代表最小费用、最高可靠性、最大吞吐量和最小延时,4种服务中只能同时选择一种,置“0”代表选中,如全部为“0”,则代表一般服务。高三位用来标识报文的优先级,“111”代表最高优先级。

        4).16位报文总长度:用来标识IP报文的长度,216-1=65535,所以单片IP报文的最大长度不能超过65535个字节;

        5).8位生存时间(TTL)TTLTime To Live,报文的最大生存时间为281255,单位是跳,报文每经过一次路由器,TTL自动减1,当TTL减到0时,报文自动被丢弃;

        6).16位标识:标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1

        7).3位标识:用来标识报文分片的相关信息,具体如下所示;

   

        8).13位分片偏移:用来标识分片报文的分片偏移量,偏移的数量必须是8的整数倍;

        9).8位协议号:用来标识IP种封装的报文种类。

                  1代表是ICMP报文

                  2代表是IGMP报文

                  6代表是TCP报文

                  17代表是UDP报文

       10).16位首部校验和:对IP首部的校验字段,只对首部校验,不管数据部分。 

    好,言归正传,继续介绍Ping of Death攻击,上面已经介绍了,IP报文的最大长度是216-1=65535个字节,那么去除IP首部的20个字节和ICMP首部的8个字节,实际数据部分长度最大为:65535-20-8=65507个字节。所谓的尺寸超大的ICMP报文就是指数据部分长度超过65507个字节的ICMP报文。

    针对Ping of Death攻击,网络安全设备仅仅通过超大包过滤方法不能达到很好的防御效果,因为在线网种传输的大部分报文都经过了分片,所以单片报文不会超过65507个字节,只是在接收端完成组合后才会超过65507个字节。所以针对Ping of Death攻击,最有效防御方式是禁止ICMP报文通过网络安全设备。

       2). Teardrop 攻击

        Tear是“眼泪”的意思,drop是“掉落”的意思,顾名思义,Teardrop是一种令人落泪的攻击方法,可见其威力之强大。

    它的攻击原理是:攻击者A给受害者B发送一些分片IP报文,并且故意将“13位分片偏移”字段设置成错误的值(既可与上一分片数据重叠,也可错开)B在组合这种含有重叠偏移的伪造分片报文时,会导致系统崩溃。如下图所示:

       

    防御方法:网络安全设备将接收到的分片报文先放入缓存中,并根据源IP地址和目的IP地址对报文进行分组,源IP地址和目的IP地址均相同的报文归入同一组,然后对每组IP报文的相关分片信息进行检查,丢弃分片信息存在错误的报文。为了防止缓存益处,当缓存快要存满是,直接丢弃后续分片报文。

       3).畸形TCP报文攻击

       TC报文包含6个标志位:URG 、ACK 、PSH 、RST 、SYN 、FIN ,不同的系统对这些标志位组合的应答是不同的。   

       a).6个标志全部为1 ,也就是圣诞树攻击;  

       b).6个标志全部为0 ,如果端口是关闭的,会使接收方应答一个RST | ACK消息,而对于一个开放端口的Linux和UNIX机器则不会应答,而Windows机器将回答RST | ACK消息。这可用于操作系统探测。   

       c).不管端口是打开还是关闭,ACK与除RST外的其它任何一个状态位组合在一起  都会引起一个还没有发送请求的接收方的一个RST应答,这可用于探测主机的存在。 

      d).不管端口是打开还是关闭SYN | FIN | URG 会让接收方发送一个RST | ACK 应答,这可用于探测主机的存在。

      e).如果端口是关闭的,SYN、SYN | FIN、SYN | PUSH、SYN | FIN | PUSH、SYN|URG  SYN | URG | PUSH、SYN | FIN | URG | PUSH会使接收方应答一个RST | ACK消息;如果端口是打开的,会使接收方应答一个 SYN | ACK消息,这可用于主机探测和端口探测。

       f).如果端口是关闭的FIN、URG、PUSH、URG|FIN、URG|PUSH、FIN|PUSH   URG|FIN|PUSH 会使接收方应答一个RST | ACK消息,而对于一个开放端口  Linux和UNIX机器不会应答,而Windows机器将回答RST | ACK消息,这可用于操作系统探测。 

     4). Ip-fragment攻击

       IP报文中,与报文分片有关的几个字段是:DF(Don’t Fragmentate)位、MF 位,Fragment Offset、Length。DF和MF就是前面提到3位标识位中的第二和第三位,Fragment Offset就是“13位分片偏移”字段,Length就是“16位报文总长度”字段。如果上述字段的值出现矛盾,而设备处理不当,会对设备造成一定的影响,甚至瘫痪。Ip-fragment就是故意制造这种存在字段上相互矛盾的报文进行攻击的。

   例如:

      a). DF位被置位(标明报文未分片),而MF位同时被置位或 Fragment Offset 不为0(表示是分片报文);中国通信人博客H I {3lL+D:c'S h"c

      b). DF 位为0(标明是分片报文),而Fragment Offset + Length > 65535(未分片) ;

   这些都有可能引起系统的崩溃,防御方法同Teardrop一样,都是对报文进行检查,丢弃非法报文。