定义
攻击防范是一种重要的网络安全特性。它通过分析上送CPU处理的报文的内容和行为,判断报文是否具有攻击特性,并配置对具有攻击特性的报文执行一定的防范措施。
攻击防范主要分为畸形报文攻击防范、分片报文攻击防范和泛洪攻击防范。
目的
目前,网络的攻击日益增多,而通信协议本身的缺陷以及网络部署问题,导致网络攻击造成的影响越来越大。特别是对网络设备的攻击,将会导致设备或者网络瘫痪等严重后果。
攻击防范针对上送CPU的不同类型攻击报文,采用丢弃或者限速的手段,以保障设备不受攻击的影响,使业务正常运行。
畸形报文攻击防范
畸形报文攻击是通过向目标设备发送有缺陷的IP报文,使得目标设备在处理这样的IP报文时出错和崩溃,给目标设备带来损失。畸形报文攻击防范是指设备实时检测出畸形报文并予以丢弃,实现对本设备的保护。
畸形报文攻击主要分为以下几类:
没有IP载荷的泛洪
如果IP报文只有20字节的IP报文头,没有数据部分,就认为是没有IP载荷的报文。攻击者经常构造只有IP头部,没有携带任何高层数据的IP报文,目标设备在处理这些没有IP载荷的报文时会出错和崩溃,给设备带来损失。
启用畸形报文攻击防范后,设备在接收到没有载荷的IP报文时,直接将其丢弃。
IGMP空报文
IGMP报文是20字节的IP头加上8字节的IGMP报文体,总长度小于28字节的IGMP报文称为IGMP空报文。设备在处理IGMP空报文时会出错和崩溃,给目标设备带来损失。
启用畸形报文攻击防范后,设备在接收到IGMP空报文时,直接将其丢弃。
LAND攻击
LAND攻击是攻击者利用TCP连接三次握手机制中的缺陷,向目标主机发送一个源地址和目的地址均为目标主机、源端口和目的端口相同的SYN报文,目标主机接收到该报文后,将创建一个源地址和目的地址均为自己的TCP空连接,直至连接超时。在这种攻击方式下,目标主机将会创建大量无用的TCP空连接,耗费大量资源,直至设备瘫痪。
启用畸形报文攻击防范后,设备采用检测TCP SYN报文的源地址和目的地址的方法来避免LAND攻击。如果TCP SYN报文中的源地址和目的地址一致,则认为是畸形报文攻击,丢弃该报文。
Smurf攻击
Smurf攻击是指攻击者向目标网络发送源地址为目标主机地址、目的地址为目标网络广播地址的ICMP请求报文,目标网络中的所有主机接收到该报文后,都会向目标主机发送ICMP响应报文,导致目标主机收到过多报文而消耗大量资源,甚至导致设备瘫痪或网络阻塞。
启用畸形报文攻击防范后,设备通过检测ICMP请求报文的目标地址是否是广播地址或子网广播地址来避免Smurf攻击。如果检测到此类报文,直接将其丢弃。
TCP标志位非法攻击
TCP报文包含6个标志位:URG、ACK、PSH、RST、SYN、FIN,不同的系统对这些标志位组合的应答是不同的:
-
6个标志位全部为1,就是圣诞树攻击。设备在受到圣诞树攻击时,会造成系统崩溃。
-
SYN和FIN同时为1,如果端口是关闭的,会使接收方应答一个RST | ACK消息;如果端口是打开的,会使接收方应答一个SYN | ACK消息,这可用于主机探测(主机在线或者下线)和端口探测(端口打开或者关闭)。
-
6个标志位全部为0,如果端口是关闭的,会使接收方应答一个RST | ACK消息,这可以用于探测主机;如果端口是开放的,Linux和UNIX系统不会应答,而Windows系统将回答RST | ACK消息,这可以探测操作系统类型(Windows系统,Linux和UNIX系统等)。
启用畸形报文攻击防范后,设备采用检查TCP的各个标志位避免TCP标志位非法攻击,如果符合下面条件之一,则将该TCP报文丢弃:
-
6个标志位全部为1;
-
SYN和FIN位同时为1;
-
6个标志位全部为0。
分片报文攻击防范
分片报文攻击是通过向目标设备发送分片出错的报文,使得目标设备在处理分片错误的报文时崩溃、重启或消耗大量的CPU资源,给目标设备带来损失。分片报文攻击防范是指设备实时检测出分片报文并予以丢弃或者限速处理,实现对本设备的保护。
分片报文攻击主要分为以下几类:
分片数量巨大攻击
IP报文中的偏移量是以8字节为单位的。正常情况下,IP报文的头部有20个字节,IP报文的最大载荷为65515。对这些数据进行分片,分片个数最大可以达到8189片,对于超过8189的分片报文,设备在重组这些分片报文时会消耗大量的CPU资源。
启用分片报文攻击防范后,针对分片数量巨大攻击,如果同一报文的分片数目超过8189个,则设备认为是恶意报文,丢弃该报文的所有分片。
巨大Offset攻击
攻击者向目标设备发送一个Offset值超大的分片报文,从而导致目标设备分配巨大的内存空间来存放所有分片报文,消耗大量资源。
Offset字段的最大取值为65528,但是在正常情况下,Offset值不会超过8190(如果offset=8189*8,IP头部长度为20,最后一片报文最多只有3个字节IP载荷,所以正常Offset的最大值是8189),所以如果Offset值超过8190,则这种报文即为恶意攻击报文,设备直接丢弃。
启用分片报文攻击防范后,设备在收到分片报文时判断Offset*8是否大于65528,如果大于就当作恶意分片报文直接丢弃。
重复分片攻击
重复分片攻击就是把同样的分片报文多次向目标主机发送,存在两种情况:
-
多次发送的分片完全相同,这样会造成目标主机的CPU和内存使用不正常;
-
多次发送的分片报文不相同,但Offset相同,目标主机就会处于无法处理的状态:哪一个分片应该保留,哪一个分片应该丢弃,还是都丢弃。这样就会造成目标主机的CPU和内存使用不正常。
启用分片报文攻击防范后,对于重复分片类报文的攻击,设备实现对分片报文进行CAR(Committed Access Rate)限速,保留首片,丢弃其余所有相同的重复分片,保证不对CPU造成攻击。
Tear Drop攻击
Tear Drop攻击是最著名的IP分片攻击,原理是IP分片错误,第二片包含在第一片之中。即数据包中第二片IP包的偏移量小于第一片结束的位移,而且算上第二片IP包的Data,也未超过第一片的尾部。
如图1所示:
-
第一个分片IP载荷为36字节,总长度为56字节,protocol为UDP,UDP检验和为0(没有检验);
-
第二片IP载荷为4字节,总长度为24字节,protocol为UDP,Offset=24(错误,正确应该为36)。
Tear Drop攻击会导致系统崩溃或重启。启用分片报文攻击防范后,对于Tear Drop攻击,设备会直接丢弃所有分片报文。
Syndrop攻击
Syndrop攻击原理和Tear Drop原理一致,区别在于Syndrop攻击使用了TCP协议,Flag为SYN,而且带有载荷。
如图2所示:
-
第一片IP载荷为28字节,IP头部20字节;
-
第二片IP载荷为4字节,IP头部20字节,Offset=24(错误,正确应该是28)。
Syndrop攻击会导致系统崩溃或重启。启用分片报文攻击防范后,对于Syndrop攻击,设备会直接丢弃所有分片报文。
NewTear攻击
NewTear攻击是分片错误的攻击。如图3所示,protocol使用UDP。
-
第一片IP载荷28字节(包含UDP头部,UDP检验和为0);
-
第二片IP载荷4字节,offset=24(错误,正确应该是28)。
NewTear攻击会导致系统崩溃或重启。启用分片报文攻击防范后,对于NewTear攻击,设备会直接丢弃所有分片报文。
Bonk攻击
Bonk攻击是分片错误的攻击。如图4所示,protocol使用UDP。
-
第一片IP载荷为36字节(包含UDP头部,UDP检验和为0);
-
第二片IP载荷为4字节,offset=32(错误,正确应该是36)。
Bonk攻击会导致系统崩溃或重启。启用分片报文攻击防范后,对于Bonk攻击,设备会直接丢弃所有分片报文。
Nesta攻击
Nesta攻击是分片错误的攻击。如图5所示:
-
第一片IP载荷为18,protocol为UDP,检验和为0;
-
第二片offset为48,IP载荷为116字节;
-
第三片offset为0,more frag为1,也就是还有分片,40字节的IP option,都是EOL,IP载荷为224字节。
Nesta攻击会导致系统崩溃或重启。启用分片报文攻击防范后,对于Nesta攻击,设备会直接丢弃所有分片报文。
Rose攻击
IP protocol可以是UDP或TCP,可以选择。
如图6所示:
如果IP protocol是TCP:
-
第一片IP载荷为48字节(包含TCP头部),IP头部20字节;
-
第二片IP报文的载荷为32字节,但是offset=65408,more frag=0,即最后一片。
如果IP protocol是UDP:
-
第一片载荷长度40字节(包含UDP头部,UDP校验和为0),IP头部20字节;
-
第二片IP报文的载荷为32字节,但是offset=65408,more frag=0,即最后一片。
Rose攻击会导致系统崩溃或重启。启用分片报文攻击防范后,对于Rose攻击,设备会直接丢弃所有分片报文。
Fawx攻击
Fawx攻击是一种分片错误的IGMP报文。如图7,Fawx攻击的特征是:发送IGMP报文分片,一共两片,第一片9个字节,第二个分片offset=8,载荷长度为16字节,没有结束分片。
Fawx攻击会导致系统崩溃或重启。启用分片报文攻击防范后,对于Fawx攻击,设备会直接丢弃所有分片报文。
Ping of Death攻击
Ping of Death攻击原理是攻击者发送一些尺寸较大(数据部分长度超过65507字节)的ICMP报文对设备进行攻击。设备在收到这样一个尺寸较大的ICMP报文后,如果处理不当,会造成协议栈崩溃。
启用分片报文攻击防范后,设备在收到这种攻击报文后,直接丢弃该报文。
Jolt攻击
Jolt攻击是攻击者发送总长度大于65535字节的报文对设备进行攻击。Jolt攻击报文一共173个分片,每个分片报文的IP载荷为380字节,因此总长度为:173*380+20=65760,远远超过65535。设备在收到这样的报文时,如果处理不当,会造成设备崩溃、死机或重启。
启用分片报文攻击防范后,设备在收到Jolt攻击报文后,直接丢弃该报文。