DDoS防御方案总结

大部分材料来自网络

Posted by DYD on October 30, 2019

前言

DDoS:Distributed Denial of Service即分布式拒绝服务。 攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。 凡是能导致合法用户不能够访问正常网络服务的行为都算是拒绝服务攻击。也就是说拒绝服务攻击的目的非常明确,就是要阻止合法用户对正常网络资源的访问,从而达成攻击者不可告人的目的。 虽然同样是拒绝服务攻击,但是DDoS和DoS还是有所不同,DDoS的攻击策略侧重于通过很多“僵尸主机”(被攻击者入侵过或可间接利用的主机)向受害主机发送大量看似合法的网络包, 从而造成网络阻塞或服务器资源耗尽而导致拒绝服务,分布式拒绝服务攻击一旦被实施,攻击网络包就会犹如洪水般涌向受害主机,从而把合法用户的网络包淹没, 导致合法用户无法正常访问服务器的网络资源,因此,拒绝服务攻击又被称之为“洪水式攻击”, 常见的DDoS攻击手段有SYN Flood、ACK Flood、UDP Flood、ICMP Flood、TCP Flood、Connections Flood、ScrIPt Flood、Proxy Flood等;

而DOS则侧重于通过对主机特定漏洞的利用攻击导致网络栈失效、系统崩溃、主机死机而无法提供正常的网络服务功能,从而造成拒绝服务,常见的DoS攻击手段有TearDrop、Land、Jolt、IGMP Nuker、Boink、Smurf、Bonk、OOB等。就这两种拒绝服务攻击而言,危害较大的主要是DDoS攻击,原因是很难防范,至于DoS攻击,通过给主机服务器打补丁或安装防火墙软件就可以很好地防范。

DDoS的表现形式主要有两种,一种为流量攻击,主要是针对网络带宽的攻击,即大量攻击包导致网络带宽被阻塞,合法网络包被虚假的攻击包淹没而无法到达主机;另一种为资源耗尽攻击,主要是针对服务器主机的攻击,即通过大量攻击包导致主机的内存被耗尽或CPU被内核及应用程序占完而造成无法提供网络服务。

对付DDoS是一个系统工程,想仅仅依靠某种系统或产品防住DDoS是不现实的,可以肯定的是,完全杜绝DDoS目前是不可能的,但通过适当的措施抵御大部分的DDoS攻击是可以做到的,基于攻击和防御都有成本开销的缘故,若通过适当的办法增强了抵御DDoS的能力, 也就意味着加大了攻击者的攻击成本,那么绝大多数攻击者将无法继续下去而放弃,也就相当于成功的抵御了DDoS攻击。

DDoS原理及分类

消耗资源分类

DDoS按消耗的资源类型可分三类:网络带宽资源、系统资源、应用资源。

  1. 网络带宽资源: 直接攻击、反射攻击、攻击链路
    • 直接攻击

      使用大量受控主机直接向攻击目标发送大量数据包,达到拒绝服务的目的。 常见的有ICMP/IGMP flood ,UDP flood

    • 反射攻击

      攻击者伪装成受害人,欺骗路由器或服务器产生大量响应,进而攻击受害者; ACK应答、DNS响应数据、NTP及SNMP等协议的响应数据可以成为攻击方式。

    • 攻击链路

      攻击的目标不是互联网端点的服务器的带宽资源,而是骨干网上的链路的带宽资源

  2. 系统资源DDoS 人为增加连接资源进行消耗和占用,阻止正常连接的建立,从而达到拒绝服务的目的。
    • 攻击TCP链接

      SYN flood短时间内产生大量的TCP半开连接,实现攻击

    • 攻击SSL链接

      安全套接层SSL协议密钥协商、加密和解密过程会消耗大量的系统资源,也成了攻击目标。 攻击者需要让服务器不停的去解密和验证,就能够消耗服务器计算资源。

  3. 应用资源DDoS 由于DNS和WEB服务的广泛性和重要性,这两种服务也就成了DDoS的主要目标。
    • 攻击DNS服务

      DNS query与DNS NXDOMAIN

    • 攻击Web服务

      大量正常HTTP请求

      不完整的HTTP请求

      慢速的HTTP长连接

      构造恶意的HTTP请求

攻击报文特征分类

根据报文特征可分为:畸形报文、传输层DDoS攻击、WEB应用DDoS攻击、DNS DDoS攻击、连接型DDoS攻击。

畸形报文

非标准的报文格式,有些机器解析这些报文时耗时很大,甚至出错,更甚至崩溃。大量的这种报文对目标机器构成很大威胁。 有以下畸形包种类:frag flood,smurf,land flood攻击,IP畸形包、TCP畸形包、UDP畸形包等。

  • frag flood:如果发送总长度超过65535字节的IP碎片,一些老的系统内核在处理的时候就会出现问题,导致崩溃或拒绝服务。如果分片之间偏移量经过精心构造,一些系统就无法处理。

  • smurf:修改目的地址,并发送ICMP echo广播报文到一个网络中,此网络中的所有机器都发送ICMP echo-reply到目的地址机器,此机器遭到攻击。

  • land flood:源、目的IP相同的IPv4报文,一个特别打造的SYN包中的源地址和目标地址都被设置成某一个服务器地址,这时将导致接受服务器向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都将保留直到超时掉。

  • IP畸形包:数据包中的总长度、版本等错误。

  • TCP畸形包:构造的TCP SYN/SYN-ACK里的option和payload有错误,导致协议栈解析错误。

  • UDP畸形包:包长度和payload有错误。

传输层DDoS攻击

通过大流量的方式对目标机器造成攻击。有以下攻击类型:SYN flood,SYN-ACK flood,ACK flood,FIN/RST flood,UDP flood,ICMP flood(这个属于网络层)等。

  • SYN flood:一个用户向服务器发送SYN报文后,如果服务器在发出SYN-ACK报文后无法收到客户端ACK报文,这种情况下服务器端一般会重发,并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN timeout,一般来说这个时间是分钟的数量级(大约为30秒到2分钟)。一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量的模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN-ACK的重试。

  • SYN-ACK flood:SYN-ACK报文出现在第二次握手中,是用来确认第一次握手的。一方收到SYN-ACK报文后,首先会判断该报文是不是属于三次握手范畴之内的报文。如果都没有进行第一次握手就直接收到了第二次握手的报文,那么就会向对方发送RST报文,告知对方其发来报文有误,不能建立连接。SYN-ACK Flood攻击正是利用了这一点,攻击者利用工具或者操纵僵尸主机,向目标服务器发送大量的SYN-ACK报文,这些报文都属于凭空出现的第二次握手报文,服务器忙于回复RST报文,导致资源耗尽,无法响应正常的请求。

  • ACK flood:在收到一个ACK报文时,如果目的端口未开放,系统会直接向源IP发送RST报文。如果端系统的相关端口是对外开放的,那么其在收到ACK报文时,首先会检查这个ACK报文是否属于TCP连接表中的一个已有连接(这个过程会对端系统主机CPU资源造成一定的消耗),如果是的话,则正常处理,如果不属于任何一个已有连接,那么系统会向源IP发送RST报文。

  • FIN/RST flood:TCP交互过程中还存在FIN和RST报文,FIN报文用来关闭TCP连接,RST报文用来断开TCP连接。这两种报文也可能会被攻击者利用来发起DDoS攻击,导致目标服务器资源耗尽,无法响应正常的请求。

  • UDP flood:利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。攻击者发送大量的伪造源IP地址的小UDP包,因为是无连接性的协议,所以只要开了一个UDP的端口提供相关服务的话,那么就可以针对相关的服务进行攻击。

  • ICMP flood:通过向目标发送大量的大包。

Web应用DDoS攻击

针对WEB应用的DDoS攻击类型可分为:HTTP GET flood, HTTP POST flood, CC攻击等。

  • HTTP GET flood:攻击者利用攻击工具或者操纵僵尸主机,向目标服务器发起大量的HTTP GET报文,请求服务器上涉及数据库操作的URI或其它消耗系统资源的URI,造成服务器资源耗尽,无法响应正常请求。

  • HTTP POST flood:攻击者利用攻击工具或者操纵僵尸主机,向目标服务器发起大量的HTTP POST报文,消耗服务器资源,使服务器无法响应正常请求,这就是HTTP POST Flood攻击。

  • CC攻击:CC攻击利用代理服务器向网站发送大量需要较长计算时间的URL请求,如数据库查询等,导致服务器进行大量计算而很快达到自身的处理能力而形成DOS,而攻击者一旦发送请求给代理后就主动断开连接,因为代理并不因为客户端这边连接的断开就不去连接目标服务器,因此攻击机的资源消耗相对很小,而从目标服务器看来,来自代理的请求都是合法的。

DNS DDoS攻击

域名作为广大民众访问互联网的起点和入口,是全球互联网通信的基础。域名解析系统作为承载全球亿万域名正常使用的系统,是互联网的基础设施。而域名系统又是一种公开服务,很容易被黑客作为攻击的对象。域名系统的故障会导致互联网陷入瘫痪,所以保护域名系统也变得至关重要。DNS DDoS攻击类型有:DNS Request Flood、DNS Reply Flood和缓存投毒等。

  • DNS Request Flood:黑客伪造客户端源IP发送大量的DNS请求报文,造成DNS request flood攻击。DNS request flood是当前最常见的DNS攻击,这类攻击可以针对缓存服务器,也可以针对授权服务器。

  • DNS Reply Flood:DNS服务器收到DNS reply报文时,不管自己有没有发出去过解析请求,都会对这些DNS reply报文进行处理。DNS reply flood就是黑客发送大量的DNS reply报文到DNS缓存服务器,导致缓存服务器因为处理这些DNS reply报文而资源耗尽,影响正常业务。

  • DNS反射攻击:DNS反射攻击是DNS reply flood的一种变异,顾名思义,黑客伪造源地址发起request,reply都返回到目标机器上。

  • DNS缓存投毒:缓存投毒攻击就是黑客伪造了恶意的DNS reply报文,导致缓存服务器无意中将恶意的域名和IP地址映射关系存储到自己的缓存中。当客户端再通过缓存服务器请求这个域名解析时,就会被指向恶意主机。

连接型DDoS攻击

连接型攻击类型分为:TCP连接耗尽攻击,TCP慢速连接攻击,连接耗尽攻击,loic, hoic, slowloris, Pyloris, xoic等慢速攻击。

  • TCP连接耗尽攻击:攻击者与被攻击目标完成三次握手后,立刻发送FIN或RST报文,释放本端连接,同时快速发起新的连接,以此来消耗被攻击目标的系统资源。

  • TCP慢速连接攻击:攻击者与被攻击目标完成三次握手后,发送很少的报文来维持连接状态,通过这种异常的TCP连接来消耗被攻击目标的系统资源。攻击者还会使用一些其他的攻击手段,比如构造大量的并发连接、设置很小的TCP窗口、发送重传报文等,其目的都是消耗被攻击目标的系统资源。

DDoS常见防御方法

TCP连接耗尽攻击与防御

攻击者与被攻击目标完成三次握手后,立刻发送FIN或RST报文,释放本端连接,同时快速发起新的连接,以此来消耗被攻击目标的系统资源。防御方法是通过检查新建连接的速率来防御此类攻击。首先,针对受保护目标进行统计,当受保护目标的TCP新建连接速率超过阈值时,启动防御功能。然后针对源进行统计,如果某个源IP在指定的时间间隔内发起的TCP新建连接数超过了阈值,则将该源IP加入黑名单。 攻击者与被攻击目标完成三次握手后,发送很少的报文来维持连接状态,通过这种异常的TCP连接来消耗被攻击目标的系统资源。通过异常会话检查来防御此类攻击。如果受保护目标的TCP连接上特定时间内通过的报文数小于阈值,则认为该连接为异常会话。如果在特定时间内某个源IP的异常会话数超过阈值,则将该源IP加入黑名单。

TCP异常报文攻击与防御

TCP报文头中存在六个标志位字段,代表不同的含义,标志位的值置为1,表示该标志位起作用。我们在前面介绍TCP连接建立和断开过程时,提到过SYN、ACK和FIN标志位,下面是这六个标志位的详细信息:

URG:置1时表示紧急指针有效。

ACK:置1时表示确认序号有效。

PSH:置1时表示接收方收到数据段后应该尽快送到应用程序。

RST:置1时表示重新建立连接。

SYN:置1时表示发起一个连接。

FIN:置1时表示发送方完成发送任务,释放连接。

这六个标志位在TCP交互过程中各司其职,标志位置1与否必须严格遵循TCP协议规范。如果不遵循规范随意将标志位置0或置1,这类报文就称为TCP异常报文。接收方处理这些异常报文时会消耗系统资源,甚至可能会导致系统崩溃。攻击者也可以利用TCP异常报文来发起DDoS攻击,向被攻击目标发送大量的构造的TCP异常报文,导致被攻击目标系统资源耗尽、网络拥塞,无法正常提供服务。 通过检查TCP报文是否符合协议规范来防御异常报文攻击。例如,正常情况下TCP报文中六个标志位的值不可能都置为0。防DDoS系统检查发现此类异常报文后,就直接将报文丢弃。

HTTP GET flood攻击与防御

HTTP Flood攻击防御主要通过缓存的方式进行,尽量由设备的缓存直接返回结果来保护后端业务。大型的互联网企业,会有庞大的CDN节点缓存内容。 当高级攻击者穿透缓存时,清洗设备会截获HTTP请求做特殊处理。最简单的方法就是对源IP的HTTP请求频率做统计,高于一定频率的IP地址加入黑名单。这种方法过于简单,容易带来误杀,并且无法屏蔽来自代理服务器的攻击,因此逐渐废止,取而代之的是JavaScript跳转人机识别方案。 HTTP Flood是由程序模拟HTTP请求,一般来说不会解析服务端返回数据,更不会解析JS之类代码。因此当清洗设备截获到HTTP请求时,返回一段特殊JavaScript代码,正常用户的浏览器会处理并正常跳转不影响使用,而攻击程序会攻击到空处。

  • 第一层,TCP源认证

可参照SYN、SYN-ACK、ACK、FIN/RST等防御方法。

  • 第二层,应用层源认证

如果肉鸡使用工具调用真实的TCP/IP协议栈发动攻击,则TCP/IP源认证无法识别是否是攻击,我们必须启用应用层源认证,比如利用HTTP 302重定向请求,可以认证客户“浏览器”是否可信。只有真实浏览器才具备完整的HTTP协议栈校验机制。

  1. 协议栈校验机制伪造源IP向WEB服务器发起攻击,对流量进行统计,达到告警阀值,触发防御机制。

  2. 触发防御机制拦截HTTP请求报文,反弹重定向到客户端,虚假源不会响应,真实源,浏览器会自动完成重定向功能。

  3. 浏览器会自动完成重定向功能将正常响应重定的客户端加入白名单,后续此客户端发送的HTTP请求放过。

  • 第三层,用户源认证

在客户端是真实的基础上,进一步验证是否由真实用户发出的请求,而不是肉鸡浏览器被黑客控制强制发出的请求。针对这种情况,终极的手段就是,人机交互,输入验证码和图片运算。其实验证码机制就是对登录用户的一次安全验证,判断一下是不是真实用户发起的请求。如果是DDoS工具发起的请求,是无法自动响应随机应变的验证码的。 当网络中有HTTP代理服务器时,只要有一次源认证通过,防DDoS就会将代理服务器IP地址加入白名单,后续黑客就会利用代理服务器IP绕过源认证检查,从而导致防御失败。这种情况下,就要配合代理检查功能一起使用,检测HTTP请求是否为通过代理发出的请求。如果是,防DDoS会从HTTP报文中获取请求者的实际IP地址,将通过认证的真实IP地址和代理服务器IP地址加入白名单,后续只有此实际源IP地址发送的报文才能直接通过,其他源IP发送报文时,防DDoS会对其进行源认证,达到防御效果。

HTTP POST flodd攻击与防御

防DDoS系统代替服务器向客户端响应307状态码(针对POST请求方法的重定向),同时向客户端的浏览器注入Cookie,客户端再次发起请求时会在HTTP报头上附加Cookie信息,防DDoS设系统通过验证Cookie信息的真实性来验证客户端。

  1. 当连续一段时间内去往目标WEB服务器的HTTP POST请求报文超过告警阈值后,防DDoS系统启动源认证机制。源认证机制启动后,防DDoS系统将会代替服务器与客户端建立TCP三次握手。

  2. 防DDoS系统拦截HTTP请求,代替WEB服务器回应307状态码,并在响应头部附加上由客户端IP生成的Cookie。
  3. 如果这个源是虚假源,或者不支持完整HTTP协议栈的攻击工具,不会重新发起请求。
  4. 如果这个源是真实客户端,防DDoS系统生成的Cookie会写入到浏览器中,并且客户端会重新发起请求,请求头部就会带有该Cookie信息。防DDoS系统收到请求后,验证Cookie是否正确,如果正确则将该客户端的源IP地址加入白名单。然后防DDoS系统会回应408状态码,表示请求超时,使客户端重新发起访问。
  5. 后续这个客户端发出的HTTP请求报文命中白名单直接通过。

HTTP 慢速攻击与防御

HTTP慢速攻击是利用HTTP协议的正常交互机制,先与目标服务器建立一个连接,然后长时间保持该连接不释放。如果攻击者持续与目标服务器建立这样的连接,就会使目标服务器上的可用资源耗尽,无法提供正常服务。 HTTP慢速攻击主要包括针对HTTP请求报文头部结束符的Slow Headers攻击,以及针对POST请求报文数据长度的Slow POST攻击。

  • Slow Headers

我们在HTTP协议基础部分中介绍HTTP请求报文时,提到过请求头部的后面会存在一个空行(结束符),其中包括回车符和换行符,告知服务器请求头部结束,后面不再有请求头。如果服务器没有收到这个空行则会一直保持连接。 Slow Headers攻击正是利用这一点,攻击者使用GET或POST请求方法与目标服务器建立连接,然后持续发送不包含结束符的HTTP头部报文,目标服务器会一直等待请求头部中的结束符而导致连接始终被占用。如果攻击者控制大量的僵尸主机向目标服务器发起这种攻击,将会导致服务器资源耗尽,无法正常提供服务。 防御Slow Headers攻击时,会对HTTP报文进行检查。如果发现某个源发出的连续多个HTTP GET/POST请求报文的报文头中都没有结束符“\r\n”,则认为发生Slow Headers攻击,将该源IP地址加入黑名单。

  • Slow POST

Slow POST攻击利用的是POST请求方法,攻击者向目标服务器发送POST请求报文提交数据,数据的长度设置为一个很大的数值,但是在随后的数据发送中,每次只发送很小的报文,这样就是导致目标服务器一直等待攻击者发送数据。如果攻击者控制大量的僵尸主机向目标服务器发起这种攻击,将会导致服务器资源耗尽,无法正常提供服务。 如果发现某个源发出的连续多个HTTP POST请求报文的长度设置的很大,但是实际报文的数据部分长度都很小,则认为发生Slow POST攻击,将该源IP地址加入黑名单。

NTP反射放大攻击与防御

应对UDP反射放大攻击最有效、最直接的防御手段就是特征过滤。根据攻击报文的特征,自定义过滤条件。 UDP反射放大攻击有两个特点:一是属于UDP协议,二是目的端口号固定。所以我们在防御UDP反射放大攻击的时候,就从这两个特征入手,将已知的攻击特征,直接配置到过滤器的参数中。配置了静态指纹过滤后,防DDoS会对收到的报文进行特征匹配,对匹配到攻击特征的报文,再进行丢弃、限流等下一步操作。 常见UDP flood攻击都可以根据协议特征进行过滤。 NTP、SNMPv2、CHARGEN、TFTP、NetBIOS、Steam、DNS、SSDP、QOTD、RIPv1、bittorrent,kad,mDNS、portmap、LDAP。

SYN flood攻击与防御

SYN Flood攻击大量消耗服务器的CPU、内存资源,并占满SYN等待队列。相应的,我们修改内核参数即可有效缓解。主要参数如下:

net.IPv4.TCP_SYNcookies = 1net.IPv4.TCP_max_SYN_bACKlog = 8192
net.IPv4.TCP_SYNACK_retries = 2

分别为启用SYN Cookie、设置SYN最大队列长度以及设置SYN+ACK最大重试次数。

SYN Cookie的作用是缓解服务器资源压力。启用之前,服务器在接到SYN数据包后,立即分配存储空间,并随机化一个数字作为SYN号发送SYN+ACK数据包。然后保存连接的状态信息等待客户端确认。启用SYN Cookie之后,服务器不再分配存储空间,而且通过基于时间种子的随机数算法设置一个SYN号,替代完全随机的SYN号。发送完SYN+ACK确认报文之后,清空资源不保存任何状态信息。直到服务器接到客户端的最终ACK包,通过Cookie检验算法鉴定是否与发出去的SYN+ACK报文序列号匹配,匹配则通过完成握手,失败则丢弃。

当然,前文的高级攻击中有SYN混合ACK的攻击方法,则是对此种防御方法的反击,其中优劣由双方的硬件配置决定TCP_max_SYN_backlog则是使用服务器的内存资源,换取更大的等待队列长度,让攻击数据包不至于占满所有连接而导致正常用户无法完成握手。net.IPv4.TCP_SYNACK_retries是降低服务器SYN+ACK报文重试次数,尽快释放等待资源。这三种措施与攻击的三种危害一一对应,完完全全地对症下药。但这些措施也是双刃剑,可能消耗服务器更多的内存资源,甚至影响正常用户建立TCP连接,需要评估服务器硬件资源和攻击大小谨慎设置。

除了定制TCP/IP协议栈之外,还有一种常见做法是TCP首包丢弃方案,利用TCP协议的重传机制识别正常用户和攻击报文。当防御设备接到一个IP地址的SYN报文后,简单比对该IP是否存在于白名单中,存在则转发到后端。如不存在于白名单中,检查是否是该IP在一定时间段内的首次SYN报文,不是则检查是否重传报文,是重传则转发并加入白名单,不是则丢弃并加入黑名单。是首次SYN报文则丢弃并等待一段时间以试图接受该IP的SYN重传报文,等待超时则判定为攻击报文加入黑名单。

首包丢弃方案对用户体验会略有影响,因为丢弃首包重传会增大业务的响应时间,有鉴于此发展出了一种更优的TCP Proxy方案。所有的SYN数据报文由清洗设备接受,按照SYN Cookie方案处理。和设备成功建立了TCP三次握手的IP地址被判定为合法用户加入白名单,由设备伪装真实客户端IP地址再与真实服务器完成三次握手,随后转发数据。而指定时间内没有和设备完成三次握手的IP地址,被判定为恶意IP地址屏蔽一定时间。除了SYN Cookie结合TCP Proxy外,清洗设备还具备多种畸形TCP标志位数据包探测的能力,通过对SYN报文返回非预期应答测试客户端反应的方式来鉴别正常访问和恶意行为。

清洗设备的硬件具有特殊的网络处理器芯片和特别优化的操作系统、TCP/IP协议栈,可以处理非常巨大的流量和SYN队列。

黑客伪造源IP地址向服务器发送大量的SYN报文,请求建立三次握手。由于发送源IP是伪造的,所以服务器回应了SYN-ACK报文后,源IP并不会再继续回应ACK报文进行确认。这样服务器就会维持一个庞大的等待列表,不停地重试发送SYN-ACK报文,同时占用着大量的资源无法释放。这就导致,被攻击的服务器被恶意半连接占满,不再接受新的SYN请求,而合法用户无法完成三次握手建立TCP连接。

  • 基本源认证 拦截SYN报文,反弹错误序列号的SYN-ACK到客户端,虚假源不会响应SYN-ACK报文。 真实源,收到错误的序列号的SYN-ACK报文后,会回应RST报文。 基本源认证在以下两种情况下就不适用了:
    1. 防DDoS设备和客户端之前有防火墙。有的防火墙的设置可能会丢弃错误序列号的SYN-ACK报文。
    2. 极少数客户端对于错误序列号的SYN-ACK报文是不回应的。
  • 高级源认证 拦截SYN报文,反弹正确序列号的SYN-ACK到客户端,虚假源不会响应SYN-ACK报文。 真实源,收到正确的序列号的SYN-ACK报文后,会回应ACK报文。 防DDoS设备会将真实源加入白名单。然后再立即发送一个RST报文,通知客户端断开此连接,并重新发起连接。等客户端再发送SYN请求时,匹配白名单,直接送到服务器。 首包丢弃

TCP之所以可靠,除了三次握手,还有一个重要的机制是处理数据超时和重传。TCP协议要求在发送端每发送一个报文段,就启动一个定时器并等待确认信息;接收端成功接收新数据后返回确认信息。若在定时器超时前数据未能被确认,TCP就认为报文段中的数据已丢失或损坏,需要对报文段中的数据重新组织和重传。

首包丢弃就是利用了TCP重传机制,对收到的第一个SYN报文直接丢弃,然后判定客户端是否重传。如果重传了,再对第二个包进行源认证反弹。这样可以大大减少反弹包的数量,同时提高设备的处理性能,以达到最佳防御效果。

防DDoS设备判定这个报文是不是重传报文,有两个依据:三元组和时间间隔。三元组包含源IP地址、源端口和协议。 防DDoS设备收到一个SYN报文,首先会查询有没有匹配到三元时,如果没有,就认为该报文是首包,将其丢弃,并记录三元组信息。 当SYN报文匹配到三元组时,再继续计算该报文与匹配该三元组的上一个报文到达的时间间隔。如果时间间隔不匹配,则认为是首包,将其丢弃;如果时间间隔匹配,则认为是后续包,将其放行。 首包丢弃功能要和源认证一起配合使用,对于虚假源攻击,尤其是针对不断变换源IP和源端口的虚假源攻击,可以达到最佳防御效果。

SYN-ACK flood攻击与防御

通信双方通过三次握手建立一个TCP连接的过程中,SYN-ACK报文出现在第二次握手中,是用来确认第一次握手的。一方收到SYN-ACK报文后,首先会判断该报文是不是属于三次握手范畴之内的报文。如果都没有进行第一次握手就直接收到了第二次握手的报文,那么就会向对方发送RST报文,告知对方其发来报文有误,不能建立连接。 SYN-ACK Flood攻击正是利用了这一点,攻击者利用工具或者操纵僵尸主机,向目标服务器发送大量的SYN-ACK报文,这些报文都属于凭空出现的第二次握手报文,服务器忙于回复RST报文,导致资源耗尽,无法响应正常的请求。 使用源认证方式防御SYN-ACK Flood攻击,其原理是防DDoS系统向发送SYN-ACK报文的源地址发送SYN报文,相当于发起了第一次握手,探测该地址是否真实存在。真实的源会向防DDoS系统响应正确的SYN-ACK报文,也就是第二次握手的报文;而虚假的源则不会响应正确的SYN-ACK报文。

  1. 当连续一段时间内去往目标服务器的SYN-ACK报文超过告警阈值后,防DDoS系统启动源认证机制。源认证机制启动后,防DDoS系统向发送SYN-ACK报文的源地址发送SYN报文。
  2. 如果这个源是虚假源,不会向防DDoS系统响应正确的SYN-ACK报文。
  3. 如果这个源是真实源,会向防DDoS系统响应正确的SYN-ACK报文。防DDoS系统收到该SYN-ACK报文后,将该源IP地址加入白名单,同时会向源地址发送RST报文,断开自己和这个源地址的连接。
  4. 后续这个源发出的SYN-ACK报文命中白名单直接通过,而对于那些未匹配白名单的SYN-ACK报文则继续进行源认证。

防DDoS系统防御SYN-ACK Flood攻击与防御SYN Flood攻击采用的方式类似,也是采用源认证的方式。区别是防御SYN-ACK Flood攻击时,通过发送中TCP第一次握手中的SYN报文来探测源是否真实存在,防止虚假源攻击。可见,对于这两种基于TCP的面向连接的DDoS攻击,最有效的防御方式就是源认证。

ACK flood攻击与防御

在TCP三次握手的过程中,ACK报文出现在第三次握手中,用来确认第二次握手中的SYN-ACK报文。ACK Flood攻击指的是攻击者利用工具或者操纵僵尸主机,向目标服务器发送大量的ACK报文,服务器忙于回复这些凭空出现的第三次握手报文,导致资源耗尽,无法响应正常的请求。 可使用会话检查的方式防御ACK Flood攻击,这与防御SYN Flood和SYN-ACK Flood时采用的方式有所不同。提到会话,大家应该不会陌生,它是状态检测防火墙的一个机制,是防火墙最基本的功能,也是实现安全防护的基础技术。 防DDoS系统借鉴了防火墙的会话机制,通过检查会话来确定ACK报文的真实性。我们可以把防DDoS系统看成是关闭了链路状态检查功能的防火墙,SYN、SYN-ACK、ACK等报文都会创建会话。对于一次正常的TCP连接建立过程来说,必须先有SYN报文,接着是SYN-ACK报文,然后才是ACK报文,所谓有“因”才有“果”。只有ACK报文命中了会话这个“因”,才能说明该报文是正常交互过程中的报文,是真实的。 防DDoS系统对ACK报文进行会话检查时,支持基本和严格两种模式,我们先来看基本模式。

  • 基本模式 使用基本模式时,防DDoS系统对ACK报文进行会话检查,如果ACK报文没有命中会话,防DDoS系统会允许第一个ACK报文通过,并建立会话,以此来对后续ACK报文进行会话检查;如果ACK报文命中了会话,则继续检查报文的序号,序号正确的报文允许通过,序号不正确的报文则被丢弃。 基本模式允许第一个ACK报文通过,检查条件比较宽松。如果攻击者发送变源或变端口的ACK报文,基本模式会允许报文通过并建立会话,这样就会导致攻击报文被放过,影响防御效果。为此,防DDoS系统提供了严格模式,检查条件更加严格,防御效果也会更好一些。
  • 严格模式 严格模式指的是防DDoS系统对ACK报文进行会话检查时,如果ACK报文没有命中会话,直接丢弃报文;如果ACK报文命中会话,并且序号正确,允许报文通过。

FIN/RST flood攻击与防御

TCP交互过程中还存在FIN和RST报文,FIN报文用来关闭TCP连接,RST报文用来断开TCP连接。这两种报文也可能会被攻击者利用来发起DDoS攻击,导致目标服务器资源耗尽,无法响应正常的请求。 可以使用会话检查的方式防御FIN/RST Flood攻击,如果FIN/RST报文没有命中会话,直接丢弃报文;如果FIN/RST报文命中会话,则根据会话创建原因和会话检查结果来判断该报文是否通过:

  • 如果会话是由SYN或SYN-ACK报文创建的,则允许该FIN/RST报文通过。

  • 如果会话是由其他报文创建的,则进一步检查报文序号是否正确,序号正确的报文允许通过,序号不正确的报文则被丢弃。

DNS flood攻击与防御

DNS攻击防御也有类似HTTP的防御手段,第一方案是缓存。其次是重发,可以是直接丢弃DNS报文导致UDP层面的请求重发,可以是返回特殊响应强制要求客户端使用TCP协议重发DNS查询请求。 特殊的,对于授权域DNS的保护,设备会在业务正常时期提取收到的DNS域名列表和ISP DNS IP列表备用,在攻击时,非此列表的请求一律丢弃,大幅降低性能压力。对于域名,实行同样的域名白名单机制,非白名单中的域名解析请求,做丢弃处理。 DNS查询通常都是基于UDP协议的,这就导致了在查询过程中缺少验证机制,容易被黑客利用。下面,我们就分析一下这两类服务可能面临的DNS攻击风险。

第一类:黑客伪造客户端源IP发送大量的DNS请求报文,造成DNS request flood攻击。DNS request flood是当前最常见的DNS攻击,这类攻击可以针对缓存服务器,也可以针对授权服务器。

第二类:黑客伪造成授权服务器发送大量的DNS回应报文,造成DNS reply flood攻击。

第三类:篡改某些网站的域名和IP地址对应关系,导致用户访问被导向至钓鱼网站。

第四类:向DNS服务器发送大量错误格式的DNS异常报文,或者发送大量超长DNS报文,导致DNS服务器处理这些报文时出现异常,拒绝正常服务。

  • DNS request flood攻击

对于缓存服务器和授权服务器,虽然都是DNS request flood攻击,但由于请求的客户端类型不同,所以防御的手段也不同。对于缓存服务器,正常向它发送DNS请求的是上网的终端用户,所以防御过程中,需要判定的是这个DNS请求是否由真实、正常的浏览器客户端发出;而对于授权服务器,向它发送DNS请求的可能就是缓存服务器了。所以对于不同的对象,认证方式当然也就不同了。

  • TC源认证
  1. 当客户端发送的DNS请求报文超过告警阈值后,防DDoS系统启动源认证机制。
  2. 防DDoS系统拦截DNS请求,并进行回应,要求客户端以TCP方式重新发起DNS查询。
  3. 如果这个源是虚假源,则不会正常响应这个DNS回应报文,更不会重新通过TCP方式重新进行DNS查询。
  4. 如果是真实客户端,则会重新发送SYN报文,请求建立三次握手。
  5. 防DDoS系统对客户端源进行TCP层面的认证。源认证通过,客户端源IP加入白名单。
  6. 客户端重新请求建立三次握手,防DDoS系统将客户端第二次发送的三次握手请求直接放行,送给服务器。
  7. 客户端与服务器之间建立三次握手成功,并通过TCP方式完成本次DNS查询。
  • 被动防御

利用DNS协议的重传机制,不对DNS查询报文进行反弹,而是直接不处置,直接丢弃,然后看客户端是否重传。

  1. 防DDoS系统在第一次收到DNS请求后,就会记录DNS请求的域名、源IP等基本信息,并HASH成一个值,记录到系统一张表里。
  2. 后续一定时间戳内,如果再收到这个HASH值相同的DNS请求,就认定为重传包,放行。时间戳会随着收到的每一个相同HASH值的DNS请求包而不断的刷新。
  • CNAME模式

授权服务器通常直接服务的“客户”是缓存服务器,是个服务器,而不是客户端的浏览器。所以在源认证的时候,和缓存服务器的防御机制不同。授权服务器利用的是DNS的CNAME(别名)机制。 DNS协议中,允许将多个域名映射到同一个IP地址,此时可以将一个域名做A记录指向服务器IP,然后将其他域名作为别名,指向之前做A记录的域名上。这样类型的存在是为了解决IP地址变更时,不必一个一个域名做更改指向。只需要更改A记录的那个域名到新IP上,其他别名将自动更改到新IP地址上。

  1. 流量阀值判断
  2. DNS查询报文进行重定向
  3. 真实存在的源,会响应源认证报文
  4. 认证通过的源,加此源加入白名单
  5. 虚假源,不会响应源认证报文

如果是真实源攻击

  1. 服务的TopN统计,获知访问最大的域名。
  2. 被攻击域名进行域名限速。

无论是TC源认证、被动防御还是CNAME模式,其实都是利用DNS协议对客户端是否真实存在所做的源探测。其中,TC源认证利用的是DNS协议的TCP查询方式;被动模式利用的是DNS协议的重传机制;而CNAME则是利用DNS的别名机制。

  • DNS Reply flood攻击

DNS服务器收到DNS reply报文时,不管自己有没有发出去过解析请求,都会对这些DNS reply报文进行处理。DNS reply flood就是黑客发送大量的DNS reply报文到DNS缓存服务器,导致缓存服务器因为处理这些DNS reply报文而资源耗尽,影响正常业务。 DNS reply flood大多都是虚假源攻击,黑客控制僵尸主机发出的DNS reply报文的源IP地址通常都是伪造的,是不存在的。所以在防御的时候,就可以从回应源IP地址的真假性入手,判定这个源IP是否是真实源。 针对这种攻击行为,防DDoS系统一般可使用源认证方式进行防御。源认证的方法就是构造一个DNS request报文,看客户端是否能正常回应。

  1. 防DDoS系统部署在防护目标前,并对到达防护目标的DNS reply报文进行统计。当到达防护目标的DNS reply报文超过告警阈值时,防DDoS系统启动防御。
  2. 防DDoS系统收到某个源IP地址发来的DNS reply报文后,会重新构造一个新的DNS request报文,然后记录构造查询报文的Query ID和源端口号。
  3. 如果是虚假源,则不会对这个DNS request报文进行回应,认证不通过。
  4. 如果是真实DNS授权服务器,则会重新回应DNS reply报文。
  5. 防DDoS系统收到DNS reply报文后,会与之前记录的Query ID和源端口号进行匹配。如果完全一致,则判定此DNS reply报文就是反弹DNS request报文的回应,源认证成功,加入白名单。
  6. 后续这个源再发送的DNS reply报文,直接通过,直到白名单老化
  • DNS反射攻击

DNS反射攻击是DNS reply flood的一种变异,是一种更高级的DNS reply flood 黑客将自己的源IP地址伪造成被攻击目标的IP地址,然后向一系列网络中开放的DNS服务器发送大量的查询请求。通过伪造DNS请求报文的源IP地址,控制DNS回应报文的流向,这些DNS回应报文就会都被引导到被攻击目标,导致被攻击目标的网络拥塞,拒绝服务。 DNS反射攻击和前面介绍的传统DNS reply flood有两点本质的不同:

  1. 传统DNS reply flood一般攻击目标是DNS缓存服务器;而DNS反射攻击一般攻击目标是客户端。
  2. 传统DNS reply flood大多是虚假源攻击,而DNS反射攻击中,DNS请求是真实的,所以DNS回应报文也都是真实的,是由网络中真实的DNS服务器发出的,属于真实源攻击。这种情况下,再使用前面刚讲过的源认证方式,对于DNS反射攻击就不适用了。 防DDoS系统借鉴防火墙的会话表机制,利用DNS交互交互过程中,DNS request报文首包建会话的机制,防御DNS反射放大攻击。 防DDoS系统对DNS反射攻击采用的防御手段就是会话检查。会话表五元组信息包含:源IP地址、目的IP地址、源端口、目的端口和协议。当DNS request报文经过防DDoS系统时,防DDoS系统会创建一张会话表,记录DNS请求报文的这五元组信息。当防DDoS系统再收到DNS reply报文时,就会查会话表: 如果匹配会话表,就判定是真实的DNS reply报文,允许通过。 如果没有匹配会话表,则判定这个DNS reply报文为攻击报文,禁止通过。

除了源认证和会话检查以外,对于DNS flood攻击还可以通过限速的方式进行防御。DNS限速有两种,针对DNS request和DNS reply报文都生效。

  • 域名限速

    如果某个域名的DNS请求或回应报文速率过高,可以针对这个域名进行限速。通常某个域名在攻击前访问量并不算高,突然有一天访问量是平时的好多倍,那这个域名可能就是受攻击了。这就好比超市卖东西,平时一天超市可能卖200包食盐,突然有一天,来了好多人买盐,超市仓库都卖空了,那这就不正常了。域名限速就是指资源有限的情况下,每天就定量提供这么多的资源, 先到先得。域名限速可以有针对性的对某个特定域名进行限制,而不影响其他域名的正常请求。

  • 源IP地址限速

    源IP地址限速和域名限速相比,属于另一个维度的限制。如果某个源IP地址域名解析的速率过大,就可以有针对性的对这个源IP地址进行限制,这样也不会对其他源有影响。

总结

DDoS攻击涉及到协议栈的四层和七层,四层攻击,消耗WEBserver的网络连接资源,需要将IP在网络层封禁。可以使用netstat过滤出IP用IPtables禁掉。 应用层的攻击调整到了网络层的攻击,大量的目标端口是80的UDP和ICMP包以极快的速度充满了网络,一个包大小大概在1k左右,占据的资源纯粹是带宽资源了,即使在系统上做限制也解决不了这个问题,不过对于网络层的问题我们可以在网络层上做限制,我们只需要在网络上把到达我们IP的非TCP的所有包如UDP和ICMP等协议都禁止掉即可。 一、DDoS攻击类型 有以下一些类型,但不限于:畸形报文、传输层DDoS攻击、WEB应用DDoS攻击、DNS DDoS攻击、连接型DDoS攻击。

  1. 畸形报文 每个报文都有相对应的标准格式,如果不符合这种格式就属于畸形报文,我们可以采取相应策略或丢弃。

  2. 传输层DDoS攻击: 通过大流量的方式对目标机器造成攻击。有以下攻击类型:SYN flood,SYN-ACK flood,ACK flood,FIN/RST flood,UDP flood,ICMP flood(这个属于网络层)等。
    • SYN flood:基本源认证(发送错误确认序号的SYN-ACK回复包要求客户端发RST包)、高级源认证(发正确确认序号的SYN-ACK回复包要求客户端发ACK包)、首包丢弃。
    • SYN-ACK Flood:源认证(发SYN包要求客户端发SYN-ACK包,模仿重传SYN行为)
    • ACK flood:会话检查:分为基本模式,严格模式。

    基本模式: 如果ACK报文没有命中会话,防御系统会允许第一个ACK报文通过,并建立会话,以此来对后续ACK报文进行会话检查; 如果ACK报文命中了会话,则继续检查报文的序号,序号正确的报文允许通过,序号不正确的报文则被丢弃。

    严格模式: 如果ACK报文没有命中会话,直接丢弃报文; 如果ACK报文命中会话,并且序号正确,允许报文通过。

    • FIN/RSTflood:会话检查。 如果FIN/RST报文没有命中会话,直接丢弃报文; 如果FIN/RST报文命中会话,则根据会话创建原因和会话检查结果来判断该报文是否通过: 如果会话是由SYN或SYN-ACK报文创建的,则允许该FIN/RST报文通过。 如果会话是由其他报文创建的(例如ACK报文),则进一步检查报文序号是否正确,序号正确的报文允许通过,序号不正确的报文则被丢弃。

    • UDP flood:一般传统的UDP攻击都是由攻击工具打出来的,通常会具有一定的特征,尤其在数据段会有一些相同或者有规律变化的字段。而真实网络设备发出的UDP报文,在数据段不具备相同的特征,但是目的端口却是固定的,所以也可以作为一种特征。确定攻击报文的特征后,就可以根据特征进行过滤了。

  3. WEB应用DDoS攻击 现在WEB应用如此的多,攻击类型分为:HTTP GET flood, HTTP POST flood, CC攻击等。
    • HTTP GET flood:302重定向认证、验证码认证、URI动态指纹学习(同一个源发出的包含同一指纹的请求超过设置的阈值时,就将该源加入黑名单)、URI行为监测(判断访问重点URI比例是否超过阈值来确定攻击源)
    • HTTP POST flood:307重定向认证(加上Cookie)、验证码认证、URI动态指纹学习、URI行为监测
    • HTTP 慢连接攻击 Slow Headers:某个源发出的连续多个HTTP GET/POST请求报文的报文头中都没有结束符“\r\n”,则认为发生Slow Headers攻击,将该源IP地址加入黑名单。 Slow POST:某个源发出的连续多个HTTP POST请求报文的长度设置的很大,但是实际报文的数据部分长度都很小,则认为发生Slow POST攻击,将该源IP地址加入黑名单。
  4. DNS DDoS攻击 DNS DDoS攻击类型有:DNS Request Flood、DNS Reply Flood和缓存投毒等。
    • DNS Request Flood:TC源认证(让客户端使用TCP的请求,即可使用TCP的源认证)、首包丢弃、授权服务器可采用CNAME源认证
    • DNS Reply Flood:因为只有缓存服务器会接收权威服务器的reply包,可以采用源认证权威服务器方式
    • DNS反射攻击:会话机制:当DNS request报文经过防DDoS系统时,防DDoS系统会创建一张会话表,记录DNS请求报文的这五元组信息,当防DDoS系统再收到DNS reply报文时,就会查会话表,五元组不对将被丢弃
    • 还有一个策略是:源IP限速和域名限速
    • 缓存投毒:会话机制
  5. 连接型DDoS攻击 连接型攻击类型分为:TCP连接耗尽攻击,TCP慢速连接攻击,连接耗尽攻击,loic, hoic, slowloris, Pyloris, xoic等慢速攻击。
    • TCP连接耗尽攻击:某个源IP在指定的时间间隔内发起的TCP新建连接数超过了阈值,则将该源IP加入黑名单。
    • TCP慢速连接攻击:TCP连接上特定时间内通过的报文数小于阈值,则认为该连接为异常会话。如果在特定时间内某个源IP的异常会话数超过阈值,则将该源IP加入黑名单。
    • 基于会话机制,通过新建连接速率检查、并发连接数检查、异常会话检查等措施,将攻击源加入黑名单,阻断攻击流量达到防御效果。

总体来说,防御分为这几大类:包检查、源认证、会话机制、机器自主学习。

tencent与huawei方案

tencent

腾讯公司的防DDoS系统称为大眼检测系统,在运营商和公司的核心交换机之间的链路上加了个分光器,将全部流量镜像一份,发送到分光交换机,再由分光交换机负载均衡到分析集群中进行处理。这里需要注意的是,由于分光交换机负载均衡后,同一目的IP的流量会被打散到不同的分析模块,最终为了获取到该目的IP的完整流量,需要再将分析结果汇总,从而识别出DDoS攻击。

采用DPDK来实现高性能收包,随后对收到的数据包进行逐包深度解析,对IP、端口、TCP标志位等信息进行攻击特征分析,对异常数据进行流量基线二次矫正,最终识别出攻击行为。对确认为攻击的行为,进行抓包取证、分析,最后将数据包通过负载均衡转发给应用层处理模块进行应用层攻击检测。

四层攻击检测完成后,会将数据包转发给应用层处理模块进行应用层攻击检测,应用层处理模块在收到四层模块转发的数据包后,同样会对该数据包进行深度包解析,对TCP应用层数据进行流重组操作,对重组后的数据进行HTTP解码,解析出UA、HOST、REFERER等HTTP协议字段,此时也会对进行URL编码及配置Rewrite规则的HTTP请求进行相应的解码操作,随后进行CGI维度的统计分析,对识别出的异常请求,进行CGI基线二次矫正,最终识别出应用层攻击行为,对确认为攻击的行为,进行抓包取证、分析。

huawei

华为硬件抗DDoS方案包括三大组件:检测中心、清洗中心和管理中心。

  • 检测中心主要负责对流量进行检测,发现流量异常后上报管理中心,由管理中心下发引流策略至清洗中心,指挥清洗中心进行引流清洗。

  • 清洗中心主要负责根据管理中心下发的策略进行引流、并对流量进行清洗和过滤,并把清洗后的正常流量回注,同时将这些动作记录在日志中上报管理中心。

  • 管理中心负责检测中心和清洗中心的统一管理和调度,以及日志记录和报表呈现。

结合上图,方案的工作流程说明如下:

  1. 方案的工作流程说明如下检测中心对分光或者镜像流量进行检测。
  2. 方案的工作流程说明如下检测中心对分光或者镜像流量进行检测检测中心发现流量异常后,会上报受攻击的IP地址到管理中心。
  3. 地址到管理中心管理中心会自动向清洗中心下发引流策略。
  4. 地址到管理中心管理中心会自动向清洗中心下发引流策略清洗中心会根据引流策略将去往被攻击IP地址的流量引流到自身。
  5. 地址的流量引流到自身清洗中心通过先进的多层过滤防御技术对流量进行清洗,丢弃攻击流量。
  6. 丢弃攻击流量清洗中心将清洗后的正常流量回注到网络中。
  7. 丢弃攻击流量清洗中心将清洗后的正常流量回注到网络中清洗中心上报攻击日志到管理中心,管理中心负责呈现流量清洗效果。
  • 动态流量基线技术

可对用户网络流量进行周期性的统计学习,去学习周期内每种流量模型的最大值作为基本值,然后再结合容忍度计算出最终的攻击检测阈值。当用户网络流量模型发生变化时,流量模型学习结果会自动调整,相应的检测阈值也会自动调整。

  • 逐流与逐包检测技术

检测中心有逐流检测和逐包检测两种形态。简单来说,逐流检测是抽样检测,而逐包检测是全流量的检测,不同的检测形态可以应对不同的场景。 逐流检测是指检测中心收集、分析网络中路由交换设备发出的Netflow日志,并根据Netflow日志来检测DDoS攻击。Netflow日志是流量的抽样统计结果,主要包含报文五元组、长度、TCP Flag、流量统计信息(包速率、带宽)等。由于Netflow日志不包含应用层信息,因此无法对应用层攻击进行检测。逐流检测适合超大流量攻击检测的场景,例如城域网或运营商网络。 逐包检测是指检测中心会对所有报文进行逐一的统计和分析,实现的是100%全流量的检测。因此逐包检测除了能分析报文的五元组、长度、TCP Flag,流量统计信息外,还能分析报文全部3-7层的信息,包括TCP会话行为,应用层协议信息(HTTP、HTTPS、DNS、SIP)和访问行为等。

  • 多层过滤防御技术
    1. jpg报文合法性检查:基于RFC检查报文合法性,检测或过滤利用协议栈漏洞的畸形报文攻击。这一层类似于空气净化器中的初滤网,主要是检测盒过滤大部分畸形报文攻击和特殊控制报文攻击。
    2. 主要是检测盒过滤大部分畸形报文攻击和特殊控制报文攻击特征过滤:基于报文特征来检测和过滤攻击,用于防御有特征的攻击,包括UDP Flood、UDP类反射放大攻击(包括DNS反射放大,NTP反射放大等)。
    3. 反射放大等传输协议层源认证:用于防范虚假源发起的传输层攻击,包括SYN Flood、SYN-ACK Flood、DNS Request/Reply Flood攻击等。
    4. 攻击等应用层源认证:用于防范虚假源发起的应用层攻击,包括HTTP GET/POST Flood、HTTPS Flood、SIP Flood攻击等。
    5. 攻击等会话分析:基于会话检查防范会话类攻击,如ACK Flood、FIN/RST Flood、DNS缓存投毒攻击。
    6. 缓存投毒攻击行为分析技术:僵尸网络发起的攻击流量和用户访问业务流量行为不同,用户访问流量具有突发性,访问资源分散;而僵尸网络攻击流量最大特征是访问频率恒定,访问资源固定,访问行为模式固定。因此,我们可以基于行为分析来防御各种慢速攻击
    7. 我们可以基于行为分析来防御各种慢速攻击流量整形:采用各类协议精细化限速使得流量都处于安全的带宽范围内。流量整形的目的是保证大于阈值的流量都会被检测出来且整形到合理的数值,即使这些流量在前面的检测中没有发现任何问题

小公司自用方案

掏保护费与自研

  • IDC的买高防IP 把域名解析到高防IP上同时在高防IP上设置转发规则,所有公网流量都会走高防IP,通过端口协议转发的方式将用户的访问通过高防IP转发到源站IP,同时将恶意攻击流量在高防IP上进行清洗过滤后将正常流量返回给源站IP,从而确保源站IP稳定访问的防护服务。

国内做这个的很多,从知名云平台,到专门做这个的。

  1. IDC机房清洗流量。8G以上的话,机房就得把流量牵引到黑洞,也就是封IP防护方式,使用IPS与IDS设备、防火墙,一般小流量4G以下能防御,但攻击量超过4G后,流量基本都无法到达公司网络。

  2. 流量基本都无法到达公司网络高防IP阿里云盾或者腾讯大禹,防御配置简单,并且是分布式防御,跟CDN加速类似,攻击都是转发到就近的高防节点,缺点就是价格太贵。

  3. 缺点就是价格太贵使用专门作高防IP的流量清洗机房,将需要流量清洗的域名解析至高防IP,清洗完成后再回流至IDC。相对来说,价格便宜、性价比更高。

  • 服务搭在ali、tencent云的买抗D服务,价格肉疼。

  • 自研 自研需根据公司业务部署环境,可在攻击流量清洗上做文章,在DDoS流量超过IDC机房或云上服务预留带宽后,需要扩展带宽及提高抗DDoS服务器性能。

因DDoS种类多、涉及到四层、七层TCP/IP协议栈,是个系统工程,自研估计周期会比较长、见效慢、成本高等缺点,优点是有技术积累,随着公司业务扩张,可以形成自己的一套应对方案。

前期可以重点关注在检测各种DDoS攻击,需要对全网流量进行实时分析。对于规模较小的网络架构,可以选择将DDoS系统串联进IDC的方式部署检测系统,这样无论是部署还是维护都十分便利。

参照其它公司的设计方案,DDoS系统可分三层:转发层、清洗层、管理层

转发层负责流量控制与转发,清洗层负责流量清洗,管理层负责系统配置管理与监控。 转发层功能:QoS、流量整形、路由选择 清洗层功能:包分析处理引擎、攻击检测模块、规则引擎 管理层:流量监控、系统监控、策略配置

流量清洗过程

  1. 流量清洗过程检测系统通过流量分析检测到攻击发生。
  2. 流量清洗过程检测系统通过流量分析检测到攻击发生自动启动保护。
  3. 流量清洗过程检测系统通过流量分析检测到攻击发生自动启动保护攻击流量通过防御设备清洗,防御设备通过特定的防御算法将攻击流量丢弃。
  4. 防御设备通过特定的防御算法将攻击流量丢弃防御设备将正常流量回送至服务器。
  5. 防御设备通过特定的防御算法将攻击流量丢弃防御设备将正常流量回送至服务器其他服务器流量正常,未被攻击影响。

清洗层可采用的方法

  1. 清洗层可采用的方法使用IPtables配置基本的防护规则、系统打上相关防DoS的补丁,加强对DoS攻击的防御。
  2. 攻击的防御使用netflow、sflow、netmap、DPDK等流量抓包框架对流量抽样、抓包,采用串行或者旁路方式进行监控,以便发现DDoS事件。确认攻击类型及攻击规模后,转流量清洗模块进行流量清洗。
  3. 转流量清洗模块进行流量清洗流量清洗模块对抓取到的流量根据攻击类型进行区分,根据不同的攻击类型制定相应的逻辑处理流程。
  4. 根据不同的攻击类型制定相应的逻辑处理流程清洗完的流量返回路由进行转发。

防DDoS思路

  • 识别真假源 在网络层,对不符合TCP/IP协议规范的、或者不符合业务通信协议规范的报文做丢弃处理,比如说带负载的纯SYN包。 其次是通过反向探测技术,利用协议栈行为来进行合法源识别,一般来说,只有合法源才能通过的认证,而非法源则无法通过。

  • 简单有效 确认业务不存在非TCP协议的通信,直接在外网核心交换机上配置ACL。非TCP类的攻击,在经过核心交换机时就会被丢弃,极大的降低了非TCP类攻击的安全风险;

  • 业务包标签 攻击已经没有明显的特征,无法分辨是否属于正常数据包,通用的防护逻辑基本已经失效。与业务部门合作,把每个正常的业务包都打上水印标签,方便安全监控识别。

  • 有损服务 当攻击与非攻击已经没有明确的界限,所有的数据包均正常,符合业务标准,在这种情况下,只能采取有损服务的思想,如对流量自动限速。