华为防火墙笔记-网络攻击的原理和防范

文章整理自《华为防火墙技术漫谈》

DoS攻击简介

 

DosDenial of Service的简称,即拒绝服务。造成Dos的攻击行为被称为Dos攻击,其目的是使计算机或网络无法正常提供服务。

我们打一个形象的比喻:街边有一个小餐馆为大家提供餐饮服务,但是这条街上有一群地痞总是对餐馆搞破坏,如霸占着餐桌不让其他客人吃饭也不结账,或者堵住餐馆的大门不让客人进门,甚至骚扰餐馆的服务员或者厨师不让他们正常干活,这样餐馆就没有办法正常营业了,这就是“拒绝服务”。

单包攻击及防御

最常见的Dos攻击就是单包攻击,一般都是以个人为单位的攻击者发动的,攻击报文比较单一。

  • 畸形报文攻击:通常指攻击者发送大量有缺陷的报文,从而造成被攻击的系统在处理这类报文时崩溃。
  • 扫描类攻击:是一种潜在的攻击行为,并不造成直接的破坏结果,通常是攻击者发动真正攻击前的网络探测行为
  • 特殊控制类报文攻击:也是一种潜在的攻击行为,并不造成直接的破坏结果,攻击者通过发送特殊控制报文探测网络结构,为后续发动真正的攻击做准备。

Ping of Death攻击及防御

IP报文头中的长度字段为16位,表示IP报文的最大长度为65535字节。一些早期版本的操作系统对报文的大小是有限制的,如果收到大小超过65535字节的报文,会出现内存分配错误,进而导致系统崩溃。Ping of Death攻击指的就是攻击者不断的通过Ping命令向受害者发送超过65535字节的报文,导致受害者的系统崩溃

防火墙是通过判定报文的大小是否大于65535字节来防御Ping of Death攻击的,如果报文大于65535字节,则判定为攻击报文,防火墙直接丢弃该报文

Land攻击及防御

Land攻击是指攻击者向受害者发送伪造的TCP报文,此TCP报文的源地址和目的地址同为受害者的IP地址。这将导致受害者向它自己的地址发送回应报文,从而造成资

源的消耗。

防火墙在防御Land攻击时,检查TCP报文的源地址和目的地址是否相同,或者TCP报文的源地址是否为环回地址,如果TCP报文的源地址和目的地址相同或者源地址为环回地址,则直接丢弃该报文。

IP地址扫描攻击

IP地址扫描攻击是指攻击者使用ICMP报文(如执行PingTracert命令)探测目标地址,或者使用TCP/UDP报文对特定地址发起连接,通过判断是否有应答报文,确定目标地址是否连接在网络上

防火墙防御IP地址扫描攻击时,对收到的TCP,UDP,ICMP报文进行检测,某个源IP地址连续发送报文时,如果该IP发送的报文的目的IP地址与其发送的前一个报文的目的IP地址不同,则记为一次异常。当异常次数超过预定义的值,则认为该源IP正在进行IP地址扫描攻击,防火墙会将该IP地址加入黑名单,后续收到来自该源IP地址的报文时,直接丢弃

 

防御单包攻击的配置建议

针对现网实际环境中比较常见的一些攻击类型,开启防御功能后,防火墙可以很好地进行防范,对性能方面没有影响。而扫描类攻击在防御过程中比较消耗防火墙的性能,建议仅在发生扫描类攻击时再开启。

流量型攻击之SYN Flood攻击及防御

DDoS(Distributed Denial of Service)攻击是指攻击者通过控制大量的僵尸主机(俗称“肉鸡”),向被攻击目标发送大量精心构造的攻击报文,造成被攻击者所在网络的链路拥塞系统资源耗尽,从而使被攻击者产生拒绝向正常用户的请求提供服务的效果

SYN flood是基于TCP协议栈发起的攻击,在了解SYN flood攻击和防御原理之前,还是要从TCP连接建立的过程开始说起。在TCP/IP协议中,TCP协议提供可靠的连接服务,无论是哪一个方向另一方发送数据前,都必须先在双方之间建立一条连接通道,这就是传说中的TCP三次握手

SYN Flood攻击正是利用了TCP三次握手的这种机制。如图所示,攻击者向目标服务器发送大量的SYN报文请求,这些SYN报文的源地址一般都是不存在或不可达的。当服务器回复SYN+ACK报文后,不会收到ACK回应报文,导致服务器上建立大量的半连接。这样,服务器的资源会被这些半连接耗尽,导致无法回应正常的请求。

防火墙防御SYN Flood攻击时,一般会采用TCP代理TCP源探测两种方式。

防御方法之TCP代理

启动TCP代理后,防火墙收到SYN报文,将会代替服务器回应SYN+ACK报文,接下来如果防火墙没有收到客户端回应的ACK报文,则判定此SYN报文为非正常报文,防火墙代替服务器保持半连接一定时间后,放弃此连接。如果防火墙收到了客户端回应的ACK报文,则判定此SYN报文为正常业务报文,此时防火墙会代替客户端与服务器建立TCP三次握手,该客户端的后续报文都将直接送到服务器。整个TCP代理的过程对于客户端和服务器都是透明的。

TCP代理过程中,防火墙会对收到的每一个SYN报文进行代理和回应,并保持半连接,所以当SYN报文流量很大时,对防火墙的性能要求非常的高。其实,TCP代理的本质就是利用防火墙的高性能,代替服务器承受半连接带来的资源消耗,由于防火墙的性能一般比服务器高很多,所以可以有效防御这种消耗资源的攻击。

通常情况下,使用TCP代理可以防御SYN Flood攻击,但是在报文来回路径不一致的网络环境中,TCP代理就会出现问题。因为客户端访问服务器的报文会经过防火墙,而服务器回应给客户端的报文不会经过防火墙。这种情况下,防火墙向服务器发送SYN报文建立TCP三次握手时,服务器回应的SYN+ACK报文不会经过防火墙,TCP代理功能不会成功。

防御方法之 TCP源探测

启动TCP源探测后,防火墙收到SYN报文,将会回应一个带有错误确认号的SYN+

ACK报文,接下来如果防火墙没有收到客户端回应的RST报文,则判定此SYN报文非正常报文,客户端为虚假源。如果防火墙收到了客户端回应的RST报文,则判定此SYN报文正常报文,客户端为真实源。防火墙将该客户端的IP地址加入白名单,在白名单老化前,这个客户端发出的报文都被认为是合法的报文。

 

流量型攻击之UDP Flood攻击及防御

UDP协议与TCP协议不同,UDP是一个无连接协议。具有TCP所望尘莫及的速度优势。正是由于UDP协议的广泛应用,为攻击者发动UDP Flood攻击提供了平台。UDPFlood攻击属于带宽类攻击,攻击者通过僵尸主机向目标服务器发送大量UDP报文,这种UDP报文的字节数很大且速率非常快,通常会造成以下危害。

  • 消耗网络带宽资源,严重时造成链路拥塞。
  • 大量变源变端口的UDP Flood攻击会导致依靠会话进行转发的网络设备性能降低甚至会话耗尽,从而导致网络瘫痪。

防火墙对UDP Flood攻击的防御并不能像SYN Flood一样进行源探测,因为它不建立连接

防御方法之限流

防火墙防御UDP Flood攻击最简单的方式就是限流,通过限流将链路中的UDP报文控制在合理的带宽范围之内。防火墙上针对UDP Flood攻击的限流有4种方式。

  • 基于流量入接口的限流:以某个入接口流量作为统计对象,对通过这个接口的流量进行统计并限流,超出的流量将被丢弃。
  • 基于目的IP地址的限流:以某个IP地址作为统计对象,对到达这个IP地址的UDP流量进行统计并限流,超出的流量将被丢弃。
  • 基于目的安全区域的限流:以某个安全区域作为统计对象,对到达这个安全区域的UDP流量进行统计并限流,超出的流量将被丢弃。
  • 基于会话的限流:对每条UDP会话上的报文速率进行统计,如果会话上的UDP报文速率达到了告警阈值,这条会话就会被锁定,后续命中这条会话的UDP报文都被丢弃。当这条会话连续3s或者3s以上没有流量时,防火墙会解锁此会话,后续命中此会话的报文可以继续通过。

防御方法之指纹学习

指纹学习的原理基于这样一个客观事实,即UDP Flood攻击报文通常都拥有相同的特征字段,比如都包含某一个字符串,或整个UDP报文的内容一致。这是因为攻击者在发起UDP Flood攻击时,为了加大攻击频率,通常都会使用攻击工具构造相同内容的UDP报文,然后高频发送到攻击目标,所以攻击报文具有很高的相似性

总结一下,防火墙防御UDP Flood攻击主要有两种方式:限流和指纹学习。两种方式各有利弊。限流方式属于暴力型,可以很快将UDP流量限制在一个合理的范围内,但是不分青红皂白,超过就丢,可能会丢弃正常报文;而指纹学习属于理智型,不会随意丢弃报文,但是发生攻击后需要有一个指纹学习的过程。目前,指纹学习功能是针对UDP Flood攻击的主要手段,华为防火墙各系列产品均支持指纹学习方式。

应用层攻击之DNS Flood攻击及防御

DNS Flood攻击指的是攻击者向DNS服务器发送大量的不存在的域名解析请求导致DNS服务器瘫痪,无法处理正常的域名解析请求

防御方法

DNS服务器支持TCP协议和UDP协议两种解析方式,一般情况下,我们使用的都是UDP协议,因为UDP协议提供无连接服务传输速度快,可以降低DNS服务器的负载

当然,也有特殊情况下需要通过TCP协议进行解析,DNS服务器上就可以设置让客户端使用TCP协议来发起解析请求。当客户端向DNS服务器发起解析请求时,DNS服务器回应的报文中有一个TC标志位,如果TC标志位置1,就表示DNS服务器要求客户端使用TCP协议发起解析请求。

防火墙就是利用这一机制对DNS Flood攻击进行防御,探测发送DNS请求报文的主机是否为真实存在的客户端。

启动DNS源探测后,防火墙收到DNS请求,会代替DNS服务器回应DNS请求,并将DNS回应报文中的TC标志位置1,要求客户端使用TCP协议发送DNS请求。接下来如果防火墙没有收到客户端使用TCP协议发送的DNS请求,则判定此客户端为虚假源;如果防火墙收到了客户端使用TCP协议发送的DNS请求,则判定此客户端为真实源。防火墙将该客户端的IP地址加入白名单,在白名单老化前,这个客户端发出的DNS请求报文都被认为是合法的报文。

下面我们通过抓包信息来看一下,发生DNS Flood攻击时,真实客户端正常响应防火墙DNS源探测的过程。

1,客户端向DNS服务器以UDP方式发送查询请求。

2,防火墙将TC标志位置1,让客户端以TCP方式发送请求。

3,客户端以TCP方式发送DNS请求。

DNS源探测方式可以很好地防御DNS Flood攻击,但是在现网的实际环境中,并不是所有场景都适用。因为在源探测过程中,防火墙会要求客户端通过TCP协议发送DNS请求,但并不是所有的客户端都支持用TCP协议发送DNS请求,所以这种方式在使用过程中也有限制。如果真实的客户端不支持用TCP协议发送DNS请求,使用此功能时,就会影响正常业务。

应用层攻击之HTTP Flood攻击及防御

HTTP Flood攻击指的是攻击者控制僵尸主机向目标服务器发送大量的HTTP请求文,这些请求报文中一般都包含涉及数据库操作的URIUniform Resource Identifier,统一资源标识符)或其他消耗系统资源的URI,目的是为了造成目标服务器资源耗尽,无法响应正常请求。

防御方法

防御HTTP Flood攻击时用到了HTTP中一技术点:HTTP重定向

HTTP重定向相当于Web服务器的“自我修复”的过程,一般常用于Web服务器上的URL已经过期,而客户端仍然访问了这个URL的情况,此时Web服务器将客户端的访问请求重定向到新的URI,使客户端能够得到访问结果,如图所示。

启动HTTP探测后,防火收到HTTP请求,代替HTTP服务器回应HTTP请求,将客户端的访问重定向到一个新的虚构的URL。接下来如果防火墙没有收到客户端访问该URL的请求,则判定此客户端为虚假源;如果防火墙收到客户端访问该URL的请求,则判定此客户端为真实源,防火墙将该客户端的IP地址加入白名单。然后防火墙会继续向客户端发送HTTP重定向命令,将客户端的访问重定向到原始的URL,即一开始客户端访问的那个URL。在白名单老化前,后续这个客户端发出的HTTP请求报文都被认为是合法的报文。

虽然在整个HTTP重定向过程中,客户端要进行两次重定向,但时间很多,而且由客户端上的浏览器自动完成,不会影响客户体验。

下面我们通过抓包信息来看一下,发生HTTP Flood攻击时,真实客户端正常响应防火墙HTTP源探测的过程。

1,首先,客户端请求URI为"/index.html"的页面,如下所示。

2,防火墙对请求报文进行确认,并重定向一个新的URL给客户端。

3,客户端重新请求包含新的URL的页面。

4,防火墙对包含新URI的请求进行确认,并将地址重新定向成包含URI为"/index.html"

的页面。认证通过,后续客户端可以直接和服务器进行通信。整个过程对于用户来说是透明的,重定向操作由客户端浏览器自动完成

HTTP源探测方式可以有效防御HTTP Flood攻击,但是在现网的实际环境中,要确认客户端是否支持重定向功能。例如,常见的机顶盒设备就不支持重定向功能。所以在HTTP源探测时,一定要确认网络中是否存在机顶盒等客户端,如果有,就不能使用此方式,否则会影响正常业务。

  • 23
    点赞
  • 171
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值