一、DDoS初步印象
1、什么是分布式拒绝服务攻击?
1)首先它是一种拒绝服务攻击
我们可以这么认为,凡是导致合法用户不能访问服务的行为,就是拒绝服务攻击。
注:早期的拒绝服务主要基于系统和应用程序的漏洞。但只要漏洞修复就完全失效,而且这种攻击容易被入侵检测系统发现。
2)关于攻击来源
攻击者会组织很多协作的同伴(或计算机),从不同的位置同时提出服务请求,直到服务无法被访问。这就是“分布式”。他们通常利用“僵尸网络”来控制大量计算机进行攻击。
3)分布式拒绝服务攻击的精髓
利用分布式的客户端,向服务提供者发起大量看似合法的请求,消耗或长期占用大量资源,从而达到拒绝服务的目的。
2、为什么要发起DDoS攻击?
1)敲诈勒索
2)实施报复
3)获取竞争优势(如打击商业竞争对手)
二、关于僵尸网络
2.1 什么是僵尸网络
名词解释
1)僵尸网络Botnet
它是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序),从而在控制者和被感染主机之百间所形成的一个可一对多控制的网络。而被感染的主机将通过一个控制信道接收攻击者的度指令,组成一个僵尸网络。
2)僵尸程序
它通常指可以自动地执行预定义功能,可以被预定义的命令控制的一种计算机程序。
主要特点
1)控制者和僵尸程序之间存在一对多的控制关系
2)控制者在发布指令后,就可以断开与僵尸网络的连接。控制指令会在僵尸程序之间自行传播和执行。
2.2 僵尸网络的组成
僵尸网络主要由控制端(C&C, Command and Control Server )、僵尸主机(肉鸡)、僵尸程序共同组成。
僵尸节点
PC、服务器、移动端等都可以成为僵尸主机,它们也可以成为再入侵的跳板机
1)普通PC
组建步骤:感染传播-->安装执行-->接入僵尸网络-->执行命令
感染传播:电子邮件、网页挂马、自动化漏洞扫描、即时通信、内网文件共享、移动存储、网络存储等。
安装执行:自我复制、自启动、隐藏。为了避免查杀,进行了免杀处理,并采用远程代码注入,以免产生新进程。
接入僵尸网路:解析内置的域名和端口进行通信,构建C&C通道加入僵尸网络,发送被感染系统主机信息。
执行命令:执行Botmaster预设的指令,如对特点目标发起攻击。没收到指令时静静等待(会产生保活数据包)
2)服务器
攻击者通常愿意选择广泛存在的Web服务器作为目标。控制Web服务器并植人僵尸程序的方法主要是利用Web应用和服务器组件的安全漏洞进行入侵。
3)移动端
通过应用捆绑和诱骗安装等方式进行。与普通PC相比,移动设备的安全防范较差,只有少部分用户安装了防护软件,更容易成为僵尸主机。
2.3 僵尸网络的控制模式
演化和发展趋势
- 基于IRC的僵尸网络逐渐减少
- 控制国内僵尸主机的C&C服务器被逐步移到国外
- 僵尸网络在攻防对抗中引入了更多的先进技术,使其更加难以检测
- 互联网数据中心托管服务器成为热门感染目标
- 单个僵尸网络的规模减小,绝大部分僵尸主机数都小于1000台
1)IRC型
僵尸主机和Botmaster都必须与C&C服务器通信。
考虑隐藏性与稳定性控制者多会借助于网络公有IRC服务器,这些服务器的端口往往是固定的,也就间接地决定了整个IRC型僵尸网络的通信端口是不可改变的。
僵尸主机与C&C通信:
- 解码内置信息,获取C&C域名及端口,建立三次握手连接
- 发送NICK(带有固定前缀)和USER命令,加入预定义频道(要求提供频道密码)
- 进入PING/PONG状态等待接收指令,等待接收指令,以及反馈执行结果
Botmaster与C&C通信:
- 首先要进行认证,一般采用口令认证机制,向C&C发起认证,C&C再将消息转发给频道内的所有僵尸主机
- 僵尸主机比较收到的密码和自身硬编码的密码,判断是否合法,同时判断控制端软件版本及主机域名是否可行
- 认证通过后就可以发送控制命令了。
不足:
- 一旦*服务器(C&C服务器)关闭,僵尸网络将会灭亡
- 防御方可以利用逆向得出的配置信息,伪装成为僵尸主机加入特定频道,达到监视整个僵尸网络的目的
2)HTTP型僵尸网络
国内出现较多,规模不大,但攻击异常频繁。
优势:
- 虽然大部分默认使用80,但C&C服务器多由控制者搭建,端口可以自己决定,更加灵活。
- 使用HTTP构建的信道,可以更容易地让僵尸网络的控制流量淹没在大量的Web通信中,更难以被检测出来。
不足:
- 和IRC型一样,一旦*服务器(C&C服务器)关闭,僵尸网络将会灭亡
3)P2P型僵尸网络
基于P2P协议建立命令与控制信道的僵尸网络。
优势:
- 由于P2P网络中节点对等性的特点,所有节点既可充当控制服务器的角色(需有公网静态IP,并可通过英特网访问该僵尸节点),也可充当客户端的角色。
- 攻击者可以自己定制P2P协议,对P2P型僵尸网络的检测很难找到通用的特征,也很难发现未知特征的僵尸网络活动。
- 安全人员捕获一个僵尸节点,能发现许多僵尸主机,但却很难窥其全貌,即使主机被封杀,也很难影响整个僵尸网络的生存
网络的维护过程:
- 僵尸网络中的两种节点都存有一张有限的邻接节点的链表(PeerList)。
- 在植人的僵尸程序的链表结构中硬编码人数台攻击者已攻陷主机的IP地址。
- 僵尸程序依次感染其他主机,每感染一台都会首先判断感染的主机是否可成为服务节点,同时更新该僵尸主机的链表表。
- 链表数量有限,新的服务节点IP将覆盖一个旧的IP,以保证链表列表中的主机时刻处于最活跃状态。
- 一旦僵尸主机重启或脱离僵尸网络,将周期性地主动连接其链表中的服务节点,维护整个僵尸网络的连接。
网络的控制过程:
- 攻击者接入网络,这主要依赖攻击者的攻击平台,该平台可以封装攻击命令、接收反馈信息,了解僵尸网络的基本信息。
- 攻击者通过认证连接服务节点,注入控制命令。务节点收到指令后与自身存在的指令链接表比较,若已存在则不处理,否则将指令转发给其他服务节点。其他服务节点收到指令后也做同样判断和操作。
- 服务节点将指令下达给客户节点。
- 客户节点将执行结果层层反馈给攻击者。
4)自愿型僵尸网络
自愿型僵尸网络是由一个个现实世界的人组成的僵尸网络,这些人通常被称为黑客行动主义者。
他们的主要活动是进行DDoS攻击,通过下载和使用傻瓜式的攻击软件或同时访问网站以阻塞目标网络通信。
2.4 僵尸网络的危害
1)发起DDoS攻击
与单机使用专业DDoS攻击比:
- 具有真实的IP且分布广泛
- 发起攻击,尤其是HttpGetFlood时可以从后台启动浏览器访问资源,有真实的交互机制,可以绕过大多数防御
- 具有传播功能,能短时间组建颇具规模的网络大军。
2)发送垃圾邮件
3)窃取敏感信息
4)抢占系统资源
攻击者可以利用该资源非法牟利,如付费点击、挖矿等
三、DDoS攻击的方法
3.1攻击网络带宽资源
3.1.1直接攻击
注:相比反射攻击来说低效率,且容易被查到攻击源头
1)ICMP/IGMP洪水攻击
攻击者使用受控主机向被攻击目标发送大量的ICMP/IGMP报文,进行洪水攻击以消耗目标的带宽资源。
现在使用这种方法发动的攻击已不多见,被攻击目标可以在其网络边界直接过滤并丢弃ICMP/IGMP数据包使攻击无效化。
2)UDP洪水攻击
原理与ICMP/IGMP洪水攻击基本相同。
攻击分为小包和大包两种方式进行:
- 小包指小于64字节的包,相同流量下单包越小,包的数量越多。
- 大包指1500字节以上的数据包(超过了MTU)一方面能有效占用传输带宽,另一方面迫使被攻击目标进行分片重组,消耗带宽和性能。
3.1.2反射和放大攻击
基本原理:
- 反射和放大攻击前需要先进行网络扫描,以获得可以反射的服务器。
- 攻击数据包的目的IP地址指向作为反射器的服务器、路由器等设施,源IP地址则被伪造成被攻击目标的IP地址。
- 反射器在收到数据包时,会认为该数据包是由被攻击目标所发来的请求,因此会将响应数据发送给被攻击目标。
- 发动反射攻击通常会使用无须认证或握手的协议,绝大多数的反射攻击都是使用基于UDP协议的网络服务进行的。
- 反射攻击由于增加了一个反射步骤,因此更加难以追溯攻击来源。但是这并不是反射攻击真正的威胁,真正的威胁在于利用反射原理进行的放大攻击。
1)ACK反射攻击
利用TCP握手的ACK应答进行反射攻击。优点在于能够有效隐藏攻击来源。
2)DNS放大攻击
通常DNS响应数据包会比查询数据包大,利用普通的DNS查询请求就能将攻击流量放大2 ~ 10倍。
但更有效的方法是使用DNS扩展机制EDNS,它增加了OPT RR字段,包含了客户端能够处理的最大UDP报文大小的信息。服务端在响应DNS请求时,解析并记录下客户端能够处理的最大UDP报文的大小,并根据该大小生成响应的报文。
攻击者发送的DNS查询请求数据包大小一般为60字节左右,而查询返回结果的数据包能达到3000字节以上,因此,使用该方式进行放大攻击能够达到50倍以上的放大效果。
攻击条件:
- 要达到更好的放大效果,需要选支持EDNS扩展机制的DNS服务器
- 需要拥有一份开放查询服务的第三方DNS服务器列表。这可通过相应的端扫描工具获得。
- 需要攻击链条中涉及的DNS服务器开启了递归查询功能。
注:不支持EDNS的DNS服务器,对于返回超过512字节的报文可能截断或转为使用TCP传输。
3)NTP放大攻击
在NTP协议的服务器实现上,通常会实现一系列Mode 7的调试接口,而接口中的monlist请求能够获取到与目标NTP服务器进行同步的最后600个客户端的IP地址等信息。这意味着,只需要发送一个很小的请求包,就能够触发大量连续的包含IP地址信息等数据的UDP响应数据包。
由于NTP服务使用的是UDP单包通信,因此攻击者可以将伪造源IP地址的UDP请求包发送给NTP放大器,伪造客户端与NTP服务器的交互,增加“和NTP服务器交互的客户端的数量”,以此来增加monlist请求的响应数据量并增大NTP放大器的放大倍数。只要向NTP放大器发送600个不超过64字节的请求包(约40KB数据),就能够快速地将NTP放大器的放大倍数提高到700倍以上,并在该服务器的NTP服务关闭或重新启动之前一直保持这么大的放大倍数。
4)SNMP放大攻击
在SNMPv2中,GetBulk请求,该请求会通知设备返回尽可能多的数据,这使得管理程序能够通过发送一次请求就获得大段的检索信息。
许多厂商安装的SNMP都采用了默认的团体名(如public,用于做简单的验证),利用SNMPv2协议中的默认团体名和GetBulk请求,攻击者能够开展有效的攻击。能够达到25倍以上的效果。
在攻击前同样需要先扫描,但同时增加了默认字符串猜测的步骤。
3.1.3 攻击链路
1)coremelt攻击
其攻击的目标并不是作为互联网端点的服务器的带宽资源,而是骨干网上的链路的带宽资源。
攻击者通过traceroute等手段来判断各个僵尸主机和将要攻击的链路之间的位置关系,并根据结果将僵尸主机分为两个部分。然后,攻击者控制僵尸主机,使其与链路另一侧的每一台僵尸主机进行通信并收发大量数据,这样,大量的网络数据包就会经过骨干网上的被攻击链路,造成网络拥堵和延时。从骨干网上来看,这些僵尸主机之间相互收发的数据包确实是真实存在的通信数据,没有办法将这些通信数据与真正的合法通信数据进行有效的区分,因此这种攻击方式更加难以防护和缓解。
3.2攻击系统资源
3.2.1攻击TCP连接
TCP的创建、数据传送和连接终止三个阶段都容易受到攻击。
1)TCP连接洪水攻击
在连接创建阶段对TCP资源进行攻击。
攻击者可以利用大量受控主机,通过快速建立大量恶意的TCP连接占满被攻击目标的连接表,使目标无法接受新的TCP连接请求,从而达到拒绝服务攻击的目的。
2)SYN洪水攻击
在建立TCP连接的过程中,如果在服务器返回SYN+ACK报文后,客户端由于某种原因没有对其进行确认,这时服务器端就需要重传SYN+ACK报文,并等待客户端的确认报文,直到TCP连接超时。这种等待客户端确认的连接状态通常被称为半开连接。在连接超时之前,半开连接会一直保存在服务器的连接表中。
由于连接表的大小是有限的,如果在短时间内产生大量的半开连接,而这些连接又无法很快地结束,连接表就会迅速被占满,导致新的TCP连接无法建立。
攻击者将SYN报文的源IP地址随机伪造成其他主机的IP地址或不存在的IP地址,这样攻击目标会将应答发送给被伪造的IP地址,从而占用连接资源并隐藏攻击来源。
3)PSH+ACK洪水攻击
在TCP协议中,到达目的地的报文将进入TCP栈的缓冲区,直到缓冲区满了,报文才被转送给接收系统,此举是为了使系统清空缓冲区的次数达到最小。
在正常的TCP传输过程当中,如果待发送的数据将会清空发送缓冲区,那么操作系统的TCP/IP协议栈就会自动为该TCP数据包设置PSH标志。同样,当服务端接收到了一个设置了PSH+ACK标志的报文时,意味着当前数据传输已经结束,因此需要立即将这些数据递交给服务进程并清空接收缓冲区,而无须等待判断是否还会有额外的数据到达。
因此当攻击者利用受控主机向攻击目标发送大量的PSH+ACK数据包时,被攻击目标就会消耗大量的系统资源不断地进行接收缓冲区的清空处理,导致无法正常处理数据,从而造成拒绝服务。
单独使用PSH+ACK洪水攻击对服务器产生的影响并不十分明显,更有效的方式是SYN洪水攻击与ACK洪水攻击相结合,这样能够绕过一部分防护设备,增强攻击的效果。
4)RST洪水攻击
发送伪造的带有RST标志位的TCP报文,强制中断客户端与服务端的TCP连接。
在伪造RST报文的过程中,服务端的IP地址和端口号是已知的,攻击者还需要设法获取客户端的IP地址和端口号,并且使RST报文的序列号处于服务器的接收窗口之内。
如果攻击者和被攻击客户端或服务器处于同一内网,这些信息可以通过欺骗和嗅探等方式获取到。但一般攻击者处在外网,在这种情况下,攻击者可以利用大量的受控主机猜测序列号和客户端端口来进行盲打,只要在数量巨大的RST报文中有一条与攻击目标的端口号相同,且序列号落在目标的接收窗口之中,就能够中断连接。
5)Sockstress慢速攻击
攻击首先会完成TCP三次握手以建立TCP连接,但是在三次握手的最后一次ACK应答中,攻击者将其TCP窗口大小设置为0,随后进行一次数据请求。攻击目标在传输数据时,发现接收端的TCP窗口大小为0,就会停止传输数据,并发出TCP窗口探测包,询问攻击者其TCP窗口是否有更新。由于攻击者没有更改TCP窗口的大小,被攻击目标就会一直维持TCP连接等待数据发送,并不断进行窗口更新的探测。如果攻击者利用大量的受控主机进行Sockstress攻击,被攻击目标会一直维持大量的TCP连接并进行大量窗口更新探测,其TCP连接表会逐渐耗尽,无法接受新的连接而导致拒绝服务。
特点:
- 消耗被攻击目标系统资源,但不会产生大量的流量带宽资源
- 与攻击目标建立大量socket连接
- 完成三次握手,最后的ACK包window(窗口)大小为0(客户端不接收数据)
- 攻击者资源消耗小(CPU、内存、带宽)
- 单机攻击可拒绝服务高配资源服务器
- Windows窗口实现的TCP流控
- 一种不对称的资源消耗
Sockstress攻击的另一种方式是将TCP窗口设置为一个非常小的值,例如4字节。这样攻击目标将不得不把需要发送的数据切分成大量4字节大小的分片,这会极大地消耗目标的内存和处理器资源,造成系统响应缓慢和拒绝服务。
3.2.2攻击SSL连接
SSL协议加密、解密和密钥协商的过程中会消耗大量的系统资源,如果使用RSA系列的公钥密码算法,那么服务器端所要消耗的资源都会比客户端多。
在最极端的情况下,使用RSA 4096进行加解密,服务器端需要花费相当于客户端资源的25倍才能完成计算。
攻击者可以利用SSL协议消耗资源的特性进行拒绝服务攻击。
1)THC SSL Dos慢速攻击
- 利用Renegotiation选项反复重新协商
在进行SSL数据传输之前,通信双方首先要进行SSL握手,协商加密算法交换加密密钥,进行身份认证。通常情况下,这样的SSL握手过程只需要进行一次即可, 但是在SSL协议中有一个Renegotiation选项,通过它可以进行密钥的重新协商以建立新的密钥。在进行SSL连接并握手之后,攻击者反复不断地进行密钥重新协商过程,而密钥重协商过程需要服务器投入的CPU资源通常比客户端多。攻击者只需要一台普通的台式机就能够拖慢一台高性能服务器,而如果有大量主机同时进行攻击,则会使服务器忙于协商密钥而完全停止响应。
- 新开SSL连接反复协商
若服务器不支持Renegotiation,攻击者可以通过另行打开新的SSL连接来制造类似的攻击效果。
注:THC的含义,德国黑客组织“The Hacker’s Choice”
2)SSL洪水攻击
在进行洪水攻击时,一个要点是需要攻击者能够在客户端大量地发出攻击请求,这就需要客户端所进行的计算尽可能地少。在SSL握手的过程中,服务器会消耗较多的CPU计算资源进行加解密,并进行数据的有效性检验。对于客户端发过来的数据,不论数据是否是有效的,服务器都必须先进行解密才能够做有效性检查。攻击者可以利用这个特性,构造密钥交换过程中的请求数据进行SSL洪水攻击,攻击者并不需要完成SSL握手和密钥交换,而只需要在这个过程中让服务器去解密和验证,就能够大量地消耗服务器的计算资源。
3.3攻击应用资源
消耗应用资源的分布式拒绝服务攻击就是通过向应用提交大量消耗资源的请求,从而达到拒绝服务的目的。由于DNS和Web服务的广泛性和重要性,这两种服务也就成为了消耗应用资源的分布式拒绝服务攻击的最主要的攻击目标。
3.3.1攻击DNS服务
1)DNS QUERY洪水攻击
DNSQUERY洪水攻击是指向DNS服务器发送大量查询请求以达到拒绝服务效果的种攻击方法。
在DNS解析的过程中,客户端发起一次查询请求,DNS服务器可能需要进行额外的多次查询才能完成解析的过程并给出应答,在这个过程中会消耗一定的计算和网络资源。如果攻击者利用大量受控主机不断发送不同域名的解析请求,那么DNS服务器的缓存会被不断刷新,而大量解析请求不能命中缓存又导致DNS服务器必须消耗额外的资源进行迭代查询,这会极大地增加DNS服务器的资源消耗,导致DNS响应缓慢甚至完全拒绝服务。
攻击的要点在于每一个DNS解析请求所查询的域名应是不同的,这样可以比较有效地避开DNS服务器缓存中的解析记录,达到更好的资源消耗效果。
2)DNS NXDOMSIN洪水攻击
DNS NXDOMAIN洪水攻击是DNS QUERY洪水攻击的一个变种攻击方式,区别在于后者是向DNS服务器查询一个真实存在的域名,而前者是向DNS服务器查询一个不存在的域名。在进行DNS NXDOMAIN洪水攻击时,DNS服务器会进行多次域名查询,同时,其缓存会被大量NXDOMAIN记录所填满,导致响应正常用户的DNS解析请求的速度变慢。这与DNS QUERY洪水攻击所达到的效果类似。除此以外,一部分DNS服务器在获取不到域名的解析结果时,还会再次进行递归查询,向其上一级的DNS服务器发送解析请求并等待应答,这进一步增加了DNS服务器的资源消耗。因此,DNS NXDOMAIN洪水攻击通常比DNS QUERY洪水攻击的效果更好。
3.3.2攻击Web服务
1)HTTP洪水攻击
攻击者利用大量的受控主机不断的向web服务器发送恶意大量HTTP请求,要求web服务器处理,就会完全占用服务器的资源,造成其他正常用户的web访问请求处理缓慢设置得不到处理,导致拒绝服务,这就是HTTP洪水攻击。
HTTP协议是基于TCP协议的,需要完成三次握手建立TCP连接才能开始HTTP通信,因此进行HTTP洪水攻击时无法使用伪造源IP地址的方式发动攻击,这时,攻击者通常会使用HTTP代理服务器,HTTP代理服务器在互联网上广泛存在,通过使用HTTP代理服务器,不仅可以隐藏来源以避免被追查,还能够提高攻击的效率,攻击者连接代理服务器并发送完成请求后,可以直接切断与该代理服务器的连接并开始连接下一个代理服务器,这时代理服务器与目标web服务器的HTTP连接依然保持,web服务器需要继续接收数据并处理HTTP请求。
web服务也存在缓存机制,如果攻击者的大量请求都命中了服务器缓存,那么这种攻击的主要作用仅体现咋消耗网络宽带资源上,对于计算和IO资源的消耗是非常有限的,因此,高效的HTTP洪水攻击应不断发出针对不同资源和页面的HTTP请求,并尽可能请求无法被缓存的资源。
如果web服务器支持HTTPS,那么进行HTTPS洪水攻击是更为有效的一种攻击方式,一方面,在进行HTTPS通信时,web服务器需要消耗更多的资源用来进行认证和加解密,另一方面,一部分的防护设备无法对HTTPS通信数据流进行处理,也会导致攻击流量绕过防护设备,直接对web服务器造成攻击。
2)Slowloris慢速攻击
HTTP头部以连续的“\r\n\r\n”作为结束标志,许多web服务器在处理http请求的头部信息时,会等待头部传输结束后再进行处理,因此,如果web服务器没有接受到连续的“\r\n\r\n”,就会一直接受数据并保持与客户端的连接,利用这个特性,攻击者能够长时间与web服务器保持联系,并逐渐耗尽web服务器的连接资源。
攻击者在发送HTTP GET请求时,缓慢的发送无用的header字段,并且一直不发送“\r\n\r\n”结束标志,这样就能够长时间占用与web服务器的连接并保证该连接不被超时中断,然而,web服务器能够处理的并发连接数是有限的,如果攻击者利用大量的受控主机发送这种不完整的HTTP GET请求并持续占用这些连接,就会耗尽web服务器的连接资源,导致其他用户的http 请求无法被处理,造成拒绝服务。
3)慢速POST请求攻击
慢速POST请求攻击利用缓慢发送HTTP BODY的方式达到占用并耗尽web服务器连接资源的目的。
攻击者在发送HTTP POST请求时,在请求头部中将Content-Length设置为一个很大的值,并将HTTP BODY以非常缓慢的速度一个字节一个字节的向web服务器发送,这样,web服务器就需要一直维持与客户端的连接并等待数据传输结束,由于Content-Length被设置成了很大的值,而HTTP BODY的传输速度又非常缓慢,攻击者就可以长时间占用这个连接,通过间断性的发送单字节的HTTP BODY内容,攻击者就能够确保连接不因超时而导致中断,如果攻击者利用大量的受控主机发送这种缓慢的HTTP POST请求并持续占用这些连接,就会耗尽web服务器的连接资源,导致其他用户的HTTP请求无法被处理,造成拒绝服务。
3.3.3 数据处理过程攻击
web服务器在收到HTTP请求之后,需要检查并处理其中的数据,通过恶意构造请求数据的内容,攻击者可以显著的增加数据处理过程中的资源消耗,造成拒绝服务攻击。
1)正则表达式拒绝服务攻击
ReDoS,利用恶意构造的输入字符串,攻击者只需要提交相对较短的输入字符串,就可以强制正则引擎处理数亿个匹配路径,所需时间可以达到几个小时甚至几天,造成web服务器拒绝服务。
2)哈希冲突拒绝服务攻击
web应用在处理请求中的POST数据时,通常使用键-值对的方式来进行存储,在PHP、Python、Java等语言中,键-值对的实质是一个哈希表,web应用程序通过计算“键”的哈希来获取其所对应的的“值”。正常情况下,这个哈希表的哈希冲突较少,因此进行查找和插入的速度很快,如果攻击者构造一组恶意的POST数据,使得请求中的“键”的哈希值全部相同,那么保存POST数据的哈希表就会因此退化成为链表 ,对哈希表的查找和插入等操作规则变成了对链表的遍历操作,造成大量的计算资源被占用,导致拒绝服务攻击。
3.4 混合攻击
在实际的攻击中,攻击者并不关心到底使用哪种攻击方法,只要能够达到使目标服务不可用的目的,攻击者通常会发动他所有的攻击手段,尽其所能地展开攻击。我们把这种方式称为混合攻击。
1)简单的混合攻击
就是同时对被攻击目标使用多种分布式拒绝服务攻击方法,针对不同的资源进行攻击。许多攻击工具都能够同时发动多种攻击。对于攻击者来说,使用这些工具进行混合攻击的成本与只发动一种攻击的成本并没有太大的区别。但是对于被攻击目标来说,却要同时面对不同协议、不同资源的分布式拒绝服务攻击,分析、响应和处理的成本会有很大的增加。
2)比较高级的混合攻击
针对性地将特定的几种攻击方法组合在一-起,这些方法互为补充,相辅相成,能够显著地增强攻击效果。例如,将SYN洪水攻击与ACK洪水组合,Slowloris和慢速post混合在HTTP洪水攻击中。
3)拒绝服务攻击与其他攻击手段相结合
在这种混合攻击中,拒绝服务攻击通常是作为烟雾弹来隐藏真正的攻击行为的。在遭到攻击时,攻击目标的注意力会被完全吸引到服务不可用的问题上,因此会忙于处理分布式拒绝服务攻击,以期望能够尽快地恢复服务的可用性。这时攻击者便可以乘虚而入,进行数据窃取甚至远程控制等操作而不被发现。
3.5 攻击方法总结
coremelt是对骨干网链路攻击,可以用各种方法配合使用,因此不再上述分类中。
四、DDoS治理和缓解
在可以预见的未来,还没有任何手段能够完全防御这种攻击,尤其当用户正常的访问量较大时,很难立刻将其与恶意伪造的访问区分开来。治理和缓解才是目前最佳的应对之道。
4.1 僵尸网络的治理
对僵尸网络进行治理,切断DDoS攻击的源头,从理论上说这是对抗DDoS攻击最为有效的方法。
治理的难点:
我们只有能够检测到网络异常,才能够知道系统感染了僵尸程序。但如果这些通信流量很小,并做了加密,那么这些通信则极有可能被淹没于正常的请求中而不被发觉,而我们也就几乎不能够察觉到受了感染。
治理办法:
检测到感染后提取样本,进行逆向分析。
- 根据逆向分析的结果,编写僵尸程序清除工具,分发至企业局域网的其他感染主机进行清除处理
- 将C&C服务器域名或地址以及通信包特征加入规则予以拦截。
- 接管或摧毁整个僵尸网络,但这往往只有有实力、影响大的跨国公司才能做到。
4.2 地址伪造攻击的治理
伪造地址带来的问题:
- 伪造地址使得追查攻击源变得更加困难,而攻击者承担的风险更小,也就更肆无忌惮。
- 伪造地址使得DDoS能够达到更大的攻击规模,尤其是DNS反射式DDoS攻击,可以将原始攻击流量放大数十倍,加剧威胁的程度。
- 伪造地址使得防护DDoS攻击变得更困难,受害者难以使用源地址过滤的方式阻挡攻击。
解决方案:
1)路由过滤,在ISP网络出入口的路由器上,对符合条件的数据包进行过滤:从外部接口进人内部网络的数据包,但源地址属于内部网络;由内部网络向外发送的数据包,但是源地址不属于内部网络。
2)在下游流量中的地址欺骗流量过滤,例如原地址在204.69.207.0/24网段内的数据包流出。我的理解和第一条的区别是一个是在ISP出入口,一个是延伸到所有路由设备。
3)单播反向路径转发。开启了这种功能,路由器会对进人的数据包检查源地址和收到报文的端口是否在路由表(或FIB表)中。
- 严格模式(strict):检查数据包的源地址是否在FIB中,且源地址是否是由最佳返回路由接口接收。
- 松散模式(loose):仅检查数据包的源地址是不是在FIB中,不检查源地址是不是由最佳返回路径的接口接收。
4)分布式过滤法。路由器根据数据包的源地址和目的地址判断其转发路径是否经过自己。如果不经过,则丢弃该数据包。
治理推广的难点:
虽然类似的方法已广泛提出,但伪造地址攻击并未得到有效遏制,主要是因为ISP缺乏采用这些技术的动力。各国*完善相应法规并执行监管,才是杜绝地址伪造的必由之路。
4.3 攻击反射点的治理
4.3.1 DNS反射治理:
1)通过Open Resolver Project 验证DNS服务器的安全性。
该网站维护了3200万DNS服务器列表,其中2800万台存在风险。使用者可以查询任何网段中开放的地址解析器,查询结果包括从多个地址向其发送请求的响应结果。如果一个DNS服务器可以被从任意地址访问,并无限速地回应查询请求,那么它就可以被用作DDoS攻击的反射点。
2)安装Response Rate Limiting模块,快速实现治理的目的
3)对于开发查询的DNS服务器,建议限制限制允许访问的地址范围,只对可信区域的主机提供解析服务。
4)若无业务需求,可以将递归查询改为迭代查询。
5)参考NIST SP 800-81,全面建设安全的DNS服务器。
- 实施适当额系统和网络安全控制,确保DNS托管环境,如操作系统和应用程序安装补丁程序、进程隔离和网络的兼容性。
- 对于一个企业控制范围内的DNS服务器,对DNS事务进行保护,例如域名解析数据的更新和备份,保护的方法可以参考互联网工程任务组的事务签名规范,使用基于共享秘密的散列消息认证码。
- 使用基于非对称加密的数字签名来保护DNS的请求/应答事务,具体内容可以参考IETE的域名系统安全扩展规范。
4.3.2 NTP反射治理:
建议限制客户端的monlist等信息查询请求。
4.3.3 SNMP反射治理
更换掉默认或容易猜测的团体名。
4.4 攻击的缓解
缓解DDOS攻击的主要方法是对网络流量进行清洗,即设法将恶意的网络流量从全部流量中去掉,只将正常的网络流量交付该服务器,然而,随着分布式拒绝服务攻击的流量不断增大,单一的流量清洗设备和流量清洗中心已经无法处理如此大规模的网络流量了,因此,面对DDOS攻击时,在进行流量清洗前还需要进行流量稀释。
4.4.1 攻击流量的稀释
1)CND
CDN技术的初衷是提高互联网用户对网站静态资源的访问速度,对于有大量静态资源的网站,使用CDN进行代理缓存一般能减少源站80%的访问流量。
但是由于分布式多节点的特点,它也能够对分布式拒绝服务攻击的流量产生稀释的效果。
缺点:
CDN一般通过智能DNS实现,根据客户IP地方解析出离客户最近的IP地址。
如果攻击者直接通过IP而不是通过域名进行攻击,那么不会进行智能DNS解析,攻击流量也无法分散到各个CDN节点上。
2)Anycast技术
Anycast技术是一种网络寻址和路由方法。通过使用Anycast,一组提供特定服务的主机可以使用相同的IP地址,同时,服务访问方的请求报文将会被IP网络路由到这一组目标中拓扑结构最近的一台主机上。
Anycast通常是通过在不同的节点处同时使用BGP协议向外声明同样的目的IP地址的方式实现的。通常用来提供高可用性保障和负载均衡服务。
当Anycast组中某一个成员或者几个成员受到攻击时,负责报文转发的路由器可以根据各个组成员的响应时间来决定报文应该转发到哪个成员上,如果受到攻击的成员没有响应,报文就不会被转发到那里。同时,由于Anycast的高度可靠性,即使少数节点被分布式拒绝服务攻击打垮而出现故障,其周围的客户端请求也能够被快速地引导向依然可用的服务节点,从而保证服务的高可用性。
4.4.2 攻击流量的清洗
流量清洗是指在全部的网络流量中区分出正常流量和恶意流量,将恶意流量阻断和丢弃,而只将正常的流量交付给服务器。流量清洗需要考虑漏报率和误报率的问题,通常漏报率和误报率是一对矛盾,需要通过对检测和防护规则的调整来进行平衡。
1)IP信誉检查
IP信誉机制是指为互联网上的IP地址赋予一定的信誉值,那些过去或限制经常被作为僵尸主机发送垃圾邮件或发动拒绝服务攻击的IP地址会被赋予较低的信誉值,说明这些IP地址更有可能成为网络攻击的来源。
当发生分布式拒绝服务攻击时,会优先丢弃信誉值低的IP地址所发来的数据包或建立的会话连接,以此保证信誉高的IP地址与服务器的正常通信。IP信誉检查的极端情况就是IP黑名单机制,但这种方式一般会造成较多的误报,影响正常服务的运行。
2)攻击特征匹配
攻击工具发出的数据包通常由编写者伪造并固化到工具当中的,而不是在交互过程中产生的,因此一种攻击工具所发出的数据包载荷会具有一种特征。
流量清洗设备可以将这些数据包载荷中的特征作为指纹,来识别工具发出的攻击流量。
- 静态指纹识别,是指预先将多种攻击工具的指纹特征保存在流量清洗设备内部,设备将经过的网络数据包与内部的特征库进行对比,直接丢弃符合特性的数据包。
- 动态指纹识别,则需要清洗设备对流量的网络数据包进行分析,在分析到若干个数据包的载荷部分之后,将其指纹特征记录下来,后续命中这些指纹特征的数据包会丢弃,而长期不被命中的指纹特征会逐渐老化甚至消息。
3)速度检查与限制
一些攻击方法在数据包载荷上可能并不存在明显的特征,没有办法进行攻击特征匹配,但却在请求数据包发送的频率和速度上有着明显的异常,这些攻击方法可以通过速度检查与限制来清洗流量。
频率上如反复重新协商密钥,速度上如UDP洪水攻击,可进行限速。
速度上一方面是大流量的检测,另一方面对于slowloris慢速攻击,如果长时间没有完成传输就可以将会话中断。
4)TCP代理和验证
在一个TCP SYN请求到达流量清洗设备后,设备并不将它交给后面的服务器,而是直接回复一个SYN+ACK响应,并等待客户端回复。如果SYN请求来自合法的用户,那么他会对SYN+ACK进行响应,这时流量清洗设备会代替用户与其保护的服务器建立起TCP连接,并将这个连接加入到信任列表当中,合法的用户和服务器之间就可以透过流量清洗设备,进行正常数据通信。对于用户来说整个过程是完全透明的,正常的交互没有受到任何影响。
而如果这个SYN请求来自攻击者,那么他通常不会对SYN+ACK进行应答,从而形成半开连接。这样流量清洗设备会暂时保留这个半开连接,并在经过短暂的超时时间之后丢弃这个连接。
相比于所保护的服务器,流量清洗设备对连接表操作进行了专门优化,能够处理极其庞大的连接请求数量,因此即使有非常多的SYN请求同时涌向清洗设备,清洗设备也能够处理。
除了拦截半开连接外,还可以进行TCP协议的一些交互式验证。例如,在收到第一个SYN请求时,通过直接丢弃、发送RST包或发送错误序列号的ACK包的方式来中断连接过程,并检查客户端是否重新发起连接请求,通过这种验证,也可以识别并丢弃许多不合法的连接。
5)协议完整性验证
大多数的攻击方法都会只发送攻击请求,而不接收服务器响应的数据,或者无法完全理解和处理响应数据,因此,如果能够对请求来源进行交互式验证,就可以检查请求来源协议实现的完整性
在DNS解析的过程中,如果域名解析请求获得的响应数据中Flags字段的Truncated位被置位,通常客户端就会使用TCP 53端口重新发送域名解析请求。而攻击者使用的攻击工具由于不接收或不处理解析请求的响应数据,也就不会使用TCP 53端口进行重新连接。
对web服务器,可以使用HTTP协议中的302重定向来验证请求的来源是否接收了响应数据并完整实现了HTTP协议的功能,正常的合法用户在接收到302重定向后会顺着跳转地址寻找对应的资源。
6)客户端真实性验证
一些攻击工具在开发过程中使用了现成的协议库,这样就能够完整实现协议交互,通过协议完整性验证。对于这些攻击工具,需要使用客户端真实性验证技术进行攻击流量清洗。
1> JavaScript运算操作
对基于页面的web服务,可以通过检查客户端是否支持JavaScript来验证请求是否来自真实的浏览器客户端。当收到HTTP请求时,流量清洗设备会使用JavaScript等脚本语法发送一条简单的运算操作。如果请求是由真实的浏览器发出的,那么浏览器会进行正确运算并返回结果,流量清洗设备进行结果验证后就会让浏览器跳转到web服务器上真正的资源位置,不会影响正常用户的访问。
2> 使用验证码进行人机识别
3> 云端清洗服务和本地缓解设备结合使用
DDoS其实是多种攻击的统称,不同的攻击也许要不同的缓解方法。通常,云端清洗服务主要采用稀释和分流的方法,擅长应对流量型DDoS攻击;而本地缓解设备能够处理的流量较小,更容易组合使用多种清洗技术,适合对抗系统资源消耗型和应用资源消耗型DDoS攻击。用户应该根据自己的业务特点和主要威胁,选择适合自身的解决方案。