单包攻击原理与防御

单包攻击简介

在DDoS攻击中最常见的攻击便单包 。

单包攻击防御是防火墙具备的最基本的的方法功能。

单包攻击主要分为三类:

  1. 扫描窥探攻击
  2. 畸形报文攻击
  3. 特殊报文攻击

单包攻击

简要笔记:

  • SUMRF攻击: 伪造ICMP EHCO-REQUEST,把源地址设置为被攻击服务器地址,目的地址设置受害者的广播地址

  • LAND攻击:利用系统的BUG,自己跟自己建立大量的TCP的空连接,消耗资源。

  • fraggle攻击:类似SMURF, 利用UDP 7和19两个端口,回应大量无用报文

  • IP分片攻击:利用 DF(分片) MF(更多的分片) OFFSET(偏移量) 长度不一致性,造成设备无法处理。

  • IP欺骗攻击:利用的是设备只根据路由表转发目的地址,不去检测源地址,源地址可以伪装。

  • ping-of-death :发送大于65535的ICMP包,让设备不能正常处理。

  • TCP FLAG攻击 :利用经典FLAG位 SYN ACK FIN RST URG PUSH的不一致性

  • teardrop攻击: 利用分片的重叠,造成重组合的问题

  • winnuke :利用TCP 139造成BIOS片段重叠,以及IGMP不能分片

扫描窥探攻击

扫描型攻击是一种潜在的攻击行为,并不具有直接的破坏行为,通常是攻击者发动真正攻击前的网络探测行为。

IP地址扫描攻击:

IP地址扫描攻击,即攻击者运用ICMP报文(如Ping和Tracert命令)探测目标地址,或者使用TCP/UDP报文对一定地址发起连接(如TCP ping),通过判断是否有应答报文,以确定哪些目标系统确实存活着并且连接在目标网络上。

防御方式:

Anti-DDoS设备或NGFW对进入的TCP、UDP、ICMP报文进行检测,当某源IP地址发送报文的目的IP地址与此源IP地址发送的前一个报文的目的IP地址不同时,则记为一次异常,当异常次数超过预定义的阈值时,则认为该源IP地址的报文为IP地址扫描攻击,并将该源IP地址加入黑名单。

配置命令:

1
2
3
4
firewall blacklist enable
firewall defend ip-sweep enable
firewall defend ip-sweep max-rate 1000
firewall defend ip-sweep blacklist-timeout 20

端口扫描攻击:

端口扫描攻击,攻击者通常使用Port Scan攻击软件,向网络中存活主机的一系列TCP/UDP端口发起连接,根据应答报文判断主机是否使用这些端口提供服务。

防御方式:

Anti-DDoS或NGFW设备对进入的TCP、UDP、ICMP报文进行检测,根据源IP地址获取统计表项的索引,如果目的端口与前一报文不同,将表项中的报文个数加1.如果报文的个数超过设置的阈值,记录日志,并根据配置决定是否将源IP地址加入黑名单。

配置命令:

1
2
3
4
firewall blacklist enable
firewall defend port-scan enable
firewall defend port-scan max-rate 1000
firewall defend port-scan blacklist-timeout 20

畸形报文攻击

畸形报文攻击通常指攻击者发送大量有缺陷的报文,从而造成主机或服务器在处理这类报文时系统崩溃。

Smurf攻击:

攻击者向网络中的广播地址发送源IP伪造为受害者的ICMP请求报文,使得网络中的所有主机向受害者回应ICMP应答报文,这样造成受害者系统繁忙,链路拥塞。

防御方式:

Anti-DDoS\NGFW设备检查ICMP请求报文的目的地址是否为网络的A、B、C类广播地址,如果是则丢弃。并记录攻击日志。

配置命令:

1
firewall defend smurf enable

Land攻击:

Land攻击即环回攻击。Land攻击是指攻击者向受害者发送TCP报文,此TCP报文的源地址和目的地址同为受害者的IP地址。这将导致受害者向它自己的地址发送SYN-ACK回应报文,结果这个地址又发回ACK消息并创建一个空连接。从而造成资源的消耗。

防御方式:

检查TCP报文的源地址和目的地址是否相同,或者TCP报文的源地址是否为环回地址,如果是则丢弃。

配置命令:

1
firewall defend land enable

Fraggle攻击:

Fraggle攻击类似于Smurf攻击,使用UDP应答消息而非ICMP。UDP端口7(ECHO)和端口19(Chargen)在收到UDP报文后,会产生大量无用的应答报文,占满网络带宽。

当运行Chargen服务的UDP端口(通常为19)收到一个数据包后,会产生一个字符串作为回应。当运行Echo服务的UDP端口(通常为7)收到一个数据包后,会简单地返回该包的数据内容作为回应。这两种服务可以被攻击者利用进行循环攻击。这样造成受害者系统繁忙,链路拥塞。

攻击者可以向攻击目标所在的网络发送UDP报文,报文的源地址为被攻击主机的地址,目的地址为被攻击主机所在子网的广播地址或子网网络地址,目的端口号为7或19。子网中启用了此功能的每个系统都会向被攻击主机发送回应报文,从而产生大量的流量,占满带宽,导致受害网络的阻塞或受害主机的崩溃。

即使子网上没有启动这些功能的系统也将产生一个ICMP不可达消息,因而仍然消耗带宽。若攻击者将UDP报文的源端口改为19,目的端口为7,这样会不停地产生大量回应报文,其危害性更大。

防御方式:

设备对进入的UDP报文进行检测,若目的端口号为7或19,则直接拒绝,并将攻击记录到日志。

配置命令:

1
firewall defend fraggle enable

IP Fragment 攻击(IP分片报文检测):

IP报文头中的不分段(DF)位和更多分段(MF)位用于分片控制,攻击者通过发送分片控制非法的报文,从而导致主机接收报文时产生故障,报文处理异常,甚至导致主机崩溃。

防御方式:

设备检测到报文控制位是下列情况之一时,则直接丢弃并记录攻击日志:

  • DF位为1(表示不能对数据包分段),而MF位也为1(表示还有更多的分段)。
  • DF位为1,而分段偏移(Offset) > 0。
  • DF位为0,而分片Offset + Length > 65535。

配置命令:

1
firewall defend ip-fragment enable

IP Sppfing攻击(IP欺骗):

IP欺骗攻击是一种常用的攻击方法,同时也是其他攻击方法的基础。这是由IP协议自身的特点决定的,IP协议依据IP头中的目的地址来发送IP报文,如果IP报文是本网络内的地址,则被直接发送到目的地址;如果该IP地址不是本网络地址,则被发送到网关,而不对IP包中提供的源地址做任何检查,默认为IP包中的源地址就是发送IP包主机的地址。攻击者通过向目标主机发送源IP地址伪造的报文,欺骗目标主机,从而获取更高的访问和控制权限。该攻击导致危害目标主机的资源,信息泄漏。

处理方式:

设备对报文的源IP地址进行路由表反查,检查路由表中到源IP地址的出接口和报文的入接口是否一致。如果不一致,则丢弃该报文,并记录攻击日志。

配置命令:

1
firewall defend ip-spoofing enable

Ping of Death攻击:

路由器对包的大小是有限制的,IP报文的长度字段为16位,即IP报文的最大长度为65535。如果遇到大小超过65535的报文,会出现内存分配错误,从而使接收方的计算机系统崩溃。攻击者只需不断的通过Ping命令向攻击目标发送超过65535的报文,就可以使目标计算机的TCP/IP堆栈崩溃,致使接收方系统崩溃。

防御方式:

设备会检测报文的大小是否大于65535字节,对大于65535字节的报文直接丢弃,并记录攻击日志。

配置命令:

1
firewall defend ping-of-death enable

TCP Flag攻击(TCP报文标志位攻击):

TCP报文标志位包括URG、ACK、PSH、RST、SYN、FIN。攻击者通过发送非法TCP flag组合的报文,受害主机收到后进行判断识别,消耗其性能,甚至会造成有些操作系统报文处理异常,主机崩溃。不同的系统对这些标志位组和的应答是不同的,可用于操作系统探测。

防御方式:

检查TCP报文的各个标志位,若出现以下情况,则视为攻击,予以丢弃并记录攻击日志:

  • 6个标志位全为1。
  • 6个标志位全为0。
  • SYN和FIN位同时为1。
  • SYN和RST位同时为1。
  • FIN位为1,而ACK位为0。

Teardrop攻击(泪滴攻击):

对于一些大的IP数据包,为了迎合链路层的MTU(Maximum Transmission Unit)的要求,需要传送过程中对其进行拆分,分成几个IP包。在每个IP报头中有一个偏移字段和一个拆分标志(MF),其中偏移字段指出了这个片段在整个IP包中的位置。如果攻击者截取IP数据包后,把偏移字段设置成不正确的值,接收端在收到这些分拆的数据包后,就不能按数据包中的偏移字段值正确组合出被拆分的数据包,这样,接收端会不停的尝试,以至操作系统因资源耗尽而崩溃。

防御方式:

对接收到的分片数据包进行分析,计算数据包的偏移量是否有误,如果有误则丢弃,并记录攻击日志。

配置命令:

1
firewall defend teardrop enable

WinNuke攻击:

WinNuke攻击又称“带外传输攻击”,它的特征是攻击目标端口,被攻击的目标端口通常是139,而且URG位设为1,即紧急模式。WinNuke攻击是利用Windows操作系统的漏洞,向端口发送一些携带TCP带外(OOB)数据报文,但这些攻击报文与正常携带OOB数据报文不同,其指针字段与数据的实际位置不符,即存在重合,这样Windows操作系统在处理这些数据时,就会崩溃。还有一种是IGMP(Internet Group Management Protocol)分片报文。一般情况下IGMP报文是不会分片的,很多系统对IGMP分片报文的处理也都存在问题。

防御方式:

设备将丢弃目的端口为139、URG位为1且URG指针不为空的报文,并记录攻击日志。

另外,如果收到IGMP分片报文也会认为受到了WinNuke攻击,而丢弃报文并记录攻击日志。

ARP欺骗:

攻击者为了改变网关设备上的ARP表项,会向网关设备发送虚假ARP请求报文。如果设备将该报文中的IP地址与MAC地址对应关系学习至ARP表项,则会误将其他主机的报文转发给攻击源。

防御方式:

启用ARP欺骗攻击防范后,只在自己主动向其他主机发起ARP请求并得到回应的情况下才更改ARP表项,而不会学习主机主动发来的ARP请求报文。

特殊报文攻击

特殊控制报文攻击也是一种潜在的攻击行为,不具直接的破坏行为,攻击者通过发送特殊控制报文探测网络结构,为后续发送真正的攻击做准备。

超大ICMP报文攻击:

超大ICMP报文攻击是指利用长度超大的ICMP报文对目标系统进行攻击。对于有些系统,在接收到超大ICMP报文后,由于处理不当,会造成系统崩溃或重启。

防御方式:

当启用“超大ICMP报文控制”时,还需要设置报文长度,当设备收到的ICMP报文长度超过该值时将丢弃该报文,并记录攻击日志。

配置命令:

1
2
firewall defend large-icmp enable
firewall defend lager-icmp max-length 10000

ICMP报文不可达攻击:

不同的主机对ICMP不可达报文的处理方式不同,有的主机在收到网络或主机不可达的ICMP报文后,对于后续发往此目的地址的报文直接认为不可达,从而切断了目的地与主机的连接。

攻击者利用这一点,伪造不可达ICMP报文,切断受害者与目的地的连接,造成攻击。

防御方式:

启用ICMP重定向报文攻击防范后,设备将直接丢弃ICMP重定向报文,并记录攻击日志。

配置命令:

1
firewall defend icmp-unreachable enable

Tracert报文攻击:

Tracert报文攻击是攻击者利用TTL为0时返回的ICMP超时报文,和到达目的地址时返回的ICMP端口不可达报文来发现报文到达目的地所经过的路径,它可以窥探网络的结构。

防御方式:

启用Tracert报文攻击防范后,设备将检测到的超时的ICMP报文或UDP报文,或者目的端口不可达报文,直接丢弃,并记录攻击日志。

配置命令:

1
firewall defend tracert enable

ICMP重定向报文攻击:

一般情况下,网络设备会向同一个子网的主机发送ICMP重定向报文,请求主机改变路由,且设备仅向主机而不向其他设备发送ICMP重定向报文。但一些恶意的攻击可能跨越网段向另外一个网络的主机发送虚假的重定向报文,以改变主机的路由表,干扰主机正常的IP报文转发。

防御原理:

启用ICMP重定向报文攻击防范后,设备将直接丢弃ICMP重定向报文,并记录攻击日志。

配置命令:

1
firewall defend icmp-redirect enable

源站路由选项的IP报文攻击:

在IP路由技术中,一个IP报文的传递路径是由网络中的路由器根据报文的目的地址来决定的,但也提供了一种由报文的发送方决定报文传递路径的方法,这就是源站选路选项。源站选路选项允许源站明确指定一条到目的地的路由,覆盖掉中间路由器的路由选项。源站选路选项通常用于网络路径的故障诊断和某种特殊业务的临时传送。由于IP源站选路选项忽略了报文传输路径中的各个设备的中间转发过程,而不管转发接口的工作状态,可能被恶意攻击者利用,刺探网络结构。

防御方式:

启用源站选路选项IP报文控制后,设备会检测收到的报文是否设置IP源站选路选项。如果是则丢弃该报文,并记录攻击日志。

配置命令:

1
firewall defend source-route enable

路由记录选项IP报文控制:

在IP路由技术中,提供了路由记录选项,用来记录IP报文从源地址到目的地址过程中所经过的路径,也就是一个处理此报文的路由器的列表。IP路由记录选项通常用于网络路径的故障诊断,但也会被恶意攻击者利用,窥探网络结构。

防御方式:

启用路由记录选项IP报文控制后,设备将检测收到的报文是否设置IP路由记录选项。如果是则丢弃该报文,并记录攻击日志。

配置命令:

1
firewall defend route-record enable

时间戳选项IP报文控制:

在IP路由技术中,提供了时间戳选项,记录IP报文从源到目的过程中所经过的路径和时间,也就是一个处理过此报文的路由器的列表。IP时间戳选项通常用于网络路径的故障诊断,但也会被恶意攻击者利用,窥探网络结构。

防御方式:

启用时间戳选项的IP报文控制后,设备将检测收到的报文是否设置IP时间戳记录选项。如是则丢弃该报文,并记录攻击日志。

配置命令:

1
firewall defend time-stamp enable

URPF技术简介

URPF简介:

URPF(Unicast Reverse Path Forwarding)是单播逆向路径转发的简称,其主要功能是防止基于源地址欺骗的网络攻击行为。

一般情况下,FW接收到报文,获取报文的目的地址,针对目的地址查找转发表,如果找到了就转发报文,否则丢弃该报文。而URPF通过获取报文的源地址和入接口,在转发表中查找源地址对应的接口是否与入接口匹配,如果不匹配,则认为源地址是伪装的,直接丢弃该报文。通过这种方式,URPF能够有效地防范网络中通过修改报文源IP地址而进行恶意攻击行为的发生。

URFP实现原理:

URPF有两种模式:严格模式和松散模式。

  • 严格模式: 建议在路由对称的环境下使用URPF严格模式,即:不仅要求在转发表中存在相应表项,还要求接口一定匹配才能通过URPF检查。

    如果两个网络边界路由器(此处为FW)之间只有一条路径的话,这时,路由能够保证是对称的,使用严格模式能够最大限度的保证网络的安全性。

  • 松散模式:在不能保证路由对称的环境下使用URPF的松散模式,即:不检查接口是否匹配,只要存在针对源地址的路由,报文就可以通过。

    不能保证路由对称的情况有两种:

    1. 多宿主单ISP客户
    2. 多宿主多ISP客户

另外,URPF应用具有以下特点:

  • 如果用户希望某些特殊报文在任何情况下都可以通过URPF的检查,即不受URPF丢弃的控制,可以在ACL中指定这些特殊的源地址。
  • 许多用户的FW可能只有一条缺省路由指向ISP,此时,需要配置允许匹配缺省路由选项。

URPF处理流程如下:

urpf流程

图:URPF处理流程

URPF检查有严格(strict)型和松散(loose)型两种。此外,还可以支持ACL与缺省路由的检查。

URPF的处理流程如下:

  1. 如果报文的源地址在FW的FIB表中存在。

    • 对于strict型检查,反向查找报文出接口,若只有一个出接口和报文的入接口一一匹配,则报文通过检查;否则报文将被丢弃。当有多个出接口和报文的入接口相匹配时,必须使用loose型检查。(反向查找是指查找以该报文源IP地址为目的IP地址的报文的出接口)
    • 对于loose型检查,当报文的源地址在FW的FIB表中存在(不管反向查找的出接口和报文的入接口是否一致),报文就通过检查;否则报文将被丢弃。
  2. 如果报文的源地址在FW的FIB表中不存在,则检查是否配置了缺省路由及URPF的allow-default-route参数。

    • 对于配置了缺省路由,但没有配置参数allow-default-route的情况。

      不管是strict型检查还是loose型检查,只要报文的源地址在FW的FIB表中不存在,该报文都将被拒绝。

    • 对于配置了缺省路由,同时又配置了参数allow-default-route的情况。

      • 如果是strict型检查,当缺省路由的出接口与报文入接口一致时,报文将通过URPF的检查,正常转发;否则报文被拒绝。
      • 如果是loose型检查,报文都将通过URPF的检查,进行正常的转发。
  3. 当且仅当报文被拒绝后,才去匹配ACL。如果ACL允许通过,则报文继续进行正常的转发;如果被ACL拒绝,则报文被丢弃。

接口配置命令:

1
ip urpf { loose | strict } [ allow-default-route ] [ acl acl-number ]

参考文档:华为HedEx文档


坚持原创技术分享,您的支持将鼓励我继续创作!