网络攻击可分为拒绝服务型攻击、畸形报文攻击和扫描窥探攻击三大类。在上一篇文章中已经详细介绍了拒绝服务型攻击(DOS/DDOS)攻击的原理、方法及防御手段,本文将接着介绍畸形报文攻击。
畸形报文攻击是通过向目标系统发送有缺陷的IP 报文,使得目标系统在处理这样的 IP包时会出现崩溃,给目标系统带来损失。主要的畸形报文攻击有 Ping of Death、Teardrop等。
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):TOS是Type Of Services的缩写。具体含义如下图所示:
第2、3、4、5位分别代表最小费用、最高可靠性、最大吞吐量和最小延时,4种服务中只能同时选择一种,置“0”代表选中,如全部为“0”,则代表一般服务。高三位用来标识报文的优先级,“111”代表最高优先级。
4).16位报文总长度:用来标识IP报文的长度,216-1=65535,所以单片IP报文的最大长度不能超过65535个字节;
5).8位生存时间(TTL):TTL即Time To Live,报文的最大生存时间为28-1=255,单位是跳,报文每经过一次路由器,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一样,都是对报文进行检查,丢弃非法报文。