DDoS Distributed Denial of Service (分布式拒绝服务)
能够简单理解为:让一个公开网站没法访问。
要达到这个目的的方法也很简单:不断地提出服务请求,让合法用户的请求没法及时处理。html
随着网络发展,不少大型企业具有较强的服务提供能力,因此应付单个请求的攻击已经不是问题。道高一尺,魔高一丈,因而乎攻击者就组织不少同伙,同时提出服务请求,直到服务没法访问,这就叫“分布式”。可是在现实中,通常的攻击者没法组织各地伙伴协同“做战”,因此会使用“僵尸网络”来控制N多计算机进行攻击。web
Botnet,就是数量庞大的僵尸程序(Bot)经过必定方式组合,出于恶意目的,采用一对多的方式进行控制的大型网络,也能够说是一种复合性攻击方式。由于僵尸主机的数量很大并且分布普遍,因此危害程度和防护难度都很大。
僵尸网络具有高可控性,控制者能够在发布指令以后,就断开与僵尸网络的链接,而控制指令会自动在僵尸程序间传播执行。正则表达式
僵尸网络由大量功能结点共同组成,多是普通PC、服务器或者移动设备。
步骤:感染传播 -> 安装执行 -> 接入僵尸网络 -> 命令执行算法
控制模式 | 网络规模 | 组网难度 | 抗打击性 | 流行度 |
---|---|---|---|---|
IRC型僵尸网络 | 通常 | 较简单 | 偏弱 | 国内较少见 |
HTTP型僵尸网络 | 中等 | 通常 | 通常 | 国内较广泛 |
P2P型僵尸网络 | 规模庞大 | 较困难 | 强 | 多见于国外 |
当网络数据包的数量达到或者超过上限的时候,会出现网络拥堵、响应缓慢的状况。DDoS就是利用这个原理,发送大量网络数据包,占满被攻击目标的所有带宽,从而形成正常请求失效,达到拒绝服务的目的。数据库
Internet Control Message Protocol(网络控制消息协议)是TCP/IP协议族的核心协议之一。它用于在TCP/IP网络中发送控制消息,提供可能发生在通讯环境中的各类问题反馈。经过这些消息,管理者能够对所发生的问题作出诊断,而后采起适当的措施解决。
Internet Group Management Protocol(因特网组管理协议)是用于管理因特网协议多播组成员的一种通讯协议。IP主机和相邻的路由器利用IGMP来创建多播组的组成员。
攻击者使用受控主机向被攻击目标发送大量的ICMP/IGMP报文,进行洪水攻击以消耗目标的宽带资源,这种类型的攻击出现的很早,使用hping等工具就能简单的发起攻击。但如今使用这种方法发动的攻击已见很少,被攻击目标能够在其网络边界直接过滤并丢弃ICMP/IGMP数据包使攻击无效化。浏览器
可是这种直接方式一般依靠受控主机自己的网络性能,因此效果不是很好,还容易被查到攻击源头。因而反射攻击就出现。缓存
User Datagram Protocol(用户数据包协议)是一种面向无链接的传输层协议,主要用于不要求分组顺序到达的传输,提供面向事务的简单的不可靠信息传送服务。
利用UDP数据报文,攻击者也能够发送洪水攻击,UDP洪水攻击和ICMP/IGMP洪水攻击的原理基本相同,一般,攻击者会使用小包和大包两种方式进行攻击。安全
小包是指64字节大小的数据包,这是以太网上传输数据帧的最小值,在相同流量下,单包体积越小,数据包的数量就越多。因为交换机、路由器等网络设备须要对没一个数据包进行检查和校验,所以使用UDP小包攻击可以最有效的增大网络设备处理数据包的压力,形成处理速度的缓慢和传输延迟等拒绝服务攻击的效果。服务器
大包是指1500字节以上的数据包,其大小超过了以太网的最大传输单元(MTU),使用UDP大包攻击,可以有效的占用网络接口的传输宽带,并迫使被攻击目标在接受到UDP数据时进行分片重组,形成网络拥堵,服务器响应速度变慢。网络
UDP洪水攻击也是很早就出现的一种拒绝服务攻击方式,这种攻击发动简单,有至关多的工具都可以发动UDP洪水攻击,如hping、LOIC等,但UDP洪水攻击彻底依靠受控主机自己的网络性能,所以一般对目标宽带资源的消耗并不太大。
反射攻击又被称为DRDoS(Distributed Reflection Denial of Service 分布式反射拒绝服务)攻击,是指利用路由器、服务器等设施对请求产生应答,从而反射攻击流量并隐藏攻击来源的一种分布式拒绝服务攻击技术。
在进行反射攻击时,攻击者使用受控主机发送大量的数据包,这些数据包的特别之处在于,其目的IP地址指向做为反射器的服务器、路由器等设施,而源IP地址则被伪形成被攻击目标的IP地址,反射器在收到数据包时,会认为该数据包是否被攻击目标所发来的请求,所以会将相应数据发送给被攻击目标,当大量的响应数据包涌向攻击目标时,就会耗尽目标的网络宽带资源,形成拒绝服务攻击。
放大攻击是一种特殊的反射攻击,其特殊之处在于反射器对于网络流量具备放大做用,所以咱们也能够将这种反射器成为放大器,进行放大攻击的方式与反射攻击的方式也是基本一致的,不一样之处在于反射器(放大器)所提供的网络服务须要知足必定条件。
在反射器所提供的网络服务协议中,须要存在请求和响应数据量不对称的状况,响应数据量须要大于请求数据量,响应数据量与请求数据量的比值越大,放大器的放大倍数也就越大,进行放大攻击所产生的消耗宽带资源的效果也就越明显。
在传输控制协议创建链接时,首先会进行TCP三次握手,在这个过程当中,当服务器端接收到客户端发来的SYN链接请求时,会对该请求进行ACK应答,利用TCP握手的ACK应答,便可进行ACK反射攻击。
若是攻击者将SYN的源IP地址伪形成被攻击目标的IP地址,服务器的应答也就会直接发送给被攻击目标,因为使用TCP协议的服务在互联网上普遍存在,攻击者能够经过受控主机向大量不一样的服务器发送伪造源IP地址的SYN请求,从而使服务器响应的大量ACK应答数据涌向被攻击目标,占用目标的网络宽带资源并拒绝服务。
Domain Name System (域名系统)是因特网的一项核心服务,它做为能够将域名和IP地址相互映射的一个分布式数据库,可以令人更方便地访问互联网,而不用去记住那些难以记忆的IP地址,DNS使用的TCP与UDP端口号都是53,主要使用的UDP协议。
一般,DNS的相应数据包会比查询数据包大,所以攻击者利用普通的DNS查询请求就可以发动放大攻击,并将攻击流量放大2~10倍,但更有效的方法是使用RFC2671中定义的DNS扩展机制EDNS0。
在EDNS0中,扩展了DNS数据包的结果,增长了OPT RR字段,在OPT RR字段中,包含了客户端可以处理的最大UDP报文大小的信息,服务器在响应DNS请求时,解析并记录下客户端可以处理的最大UDP报文的大小,并根据该大小生成响应的报文。
攻击者可以利用dig和EDNS0进行高效的DNS放大攻击,攻击者向普遍存在的开放DNS解析器发送dig查询命令,将OPT RR字段中UDP报文大小设置为很大的值,并将请求的源IP地址伪形成被攻击目标的IP地址。DNS解析器收到查询请求后,会将解析的结果发送给被攻击目标,当大量的解析结果涌向目标时,就会致使目标网络拥堵和缓慢,形成拒绝服务攻击。攻击者发送的DNS查询请求数据包大小通常为60字节左右,而查询返回结果的数据包大小一般为300字节以上,所以,使用该方式进行放大攻击可以达到50倍以上的放大效果。
Network Time Protocol (网络时间协议)是用来使计算器时间同步化的一种协议,它可使计算机与时钟源进行同步化并提供高精准度的时间校订,NTP使用UDP 123端口进行通讯。
在NTP协议的服务器实现上,一般会实现一系列Mode 7的调试接口,而接口中的monlist请求可以获取到目标NTP服务器进行同步的最后600个客户端的IP地址等信息。这意味着,只须要发送一个很小的请求包,就能触发大量连续的包含IP地址信息等数据的UDP响应数据包。
实际上,monlist请求返回的数据量与一段时间内和NTP服务器交互的客户端数据量有关,因为NTP服务使用的是UDP单包通讯,所以攻击者能够将伪造源IP地址的UDP请求包发送给NTP放大器,伪造客户端与NTP服务器的交互,增长“和NTP服务器交互的客户端的数量”,以此来增长monlist请求的响应数据量并增大NTP放大器的放大倍数,只要向NTP放大器发送600个不超过64字节的请求包(约40KB数据),就可以快速的将NTP放大器的放大倍数提升到700倍以上,并在该服务器的NTP服务关闭或从新启动以前一直保持这么大的放大倍数。攻击者发送的monlist请求数据包大小不超过64字节,而请求返回的结果会包含100个482字节的UDP响应数据,所以使用该方式进行放大攻击可以达到700倍以上的放大效果。
Simple Network Management Protocol(简单网络管理协议)是目前网络中应用最为普遍的网络管理协议,它提供了一个管理框架来监控和维护互联网的设备,SNMP协议使用UDP 161端口进行通讯。
利用SNMP协议中的默认通讯字符串和GetBulk请求,攻击者可以开展有效的SNMP放大攻击。
许多厂商安装的SNMP都采用了默认的通讯字符串(Community String),这些通讯字符串是程序获取设备信息和修改配置必不可少的,最多见的默认通讯字符串是public和private,除此以外还有许多厂商私有的默认通讯字符串,几乎全部运行SNMP的网络设备上,均可以找到某种形式的默认通讯字符串。
在SNMPv1中定义的get请求能够尝试一次获取多个MIB对象,但响应消息的大小受到设备处理能力的限制,若是设备不能返回所有请求的响应,则会返回一条错误信息。在SNMPv2中,添加了Getbulk请求,该请求会通知设备返回尽量多的数据,这使得管理程序可以经过发送一次请求就得到大段的检索信息。
攻击者向普遍存在并开启了SNMP服务的网络设备发送Getbulk请求,使用默认通讯字符串做为认证凭据,并将源IP地址伪形成攻击目标的IP地址,设备收到Getbulk请求后,会将响应结果发送给攻击目标,当大量的响应结果涌向攻击目标时,就会致使攻击目标网络拥堵和缓慢,形成拒绝服务攻击。
攻击者发送的Getbulk请求数据包约为60字节,而请求的响应数据可以达到1500字节以上,所以,使用该方式进行放大攻击可以达到25倍以上的放大效果,这也是一种放大效应明显且有效的放大攻击方式。
Character Generator Protocol (Chargen字符发生器协议)是一种简单网络协议,在RFC 864中被定义。该协议设计的目的是用来调试TCP或UDP协议程序、测量链接的带宽或进行QoS的微调等。它的默认端口为19,分为基于TCP和UDP两种方式,TCP方式下创建链接后,服务器会不断传送任意字符到客户端,直到客户端关闭链接。UDP方式下每当服务器收到客户端的一个UDP数据包后向客户端返回一个数据包,长度为0~512字节之间随机值,数据包的负载能够是任意字符。
Chargen协议的设计初衷是为了网络测试,并无严格的访问控制和流量控制机制,在UDP模式下任何人均可以向开放Chargen服务的主机请求服务,这种简单的请求-回复模式使得攻击者能够伪造源发地址信息向Chargen服务发送请求,而Chargen服务并不会验证源发地址的真伪,会向源发地址发送应答包,这致使该服务可被用来进行DOS攻击。RFC 864中给出Chargen应答包的建议大小不超过512字节,可是在实际实现过程当中,这个大小并未被严格限制,根据实际测试,在Linux 系统下,对于64字节的无负载UDP Chargen请求,系统回复一个1066字节的UDP 应答报文,流量被放大了15倍,而在Windows系统下使用一样的请求,回复的UDP应答报文长度达3259字节,并产生了分片,流量被放大了50倍。这使得该服务能够被用来进行放大DOS攻击。
互联网上家用路由器、网络摄像头、打印机、智能家电等智能设备广泛采用 UPnP(即插即用)协议做为网络通信协议, 而UPnP设备的发现是经过源端口为 1900 的 SSDP(简单服务发现协议)进行相互感知。
利用SSDP协议进行反射攻击的原理与利用DNS服务、NTP服务相似,都是伪形成被攻击者的IP地址向互联网上大量的智能设备发起SSDP请求,接收到请求的智能设备根据源IP地址将响应数据包返回给受害者。随着物联网和智能设备的快速发展和普及,利用智能设备展开DDoS攻击会愈来愈广泛。
攻击链路与之前介绍的几种攻击方法有所不一样,其攻击的目标并非做为互联网断点的服务器的宽带资源,而是骨干网上的链路的宽带资源,对链路进行攻击的一种典型的方式是Coremelt攻击。
Coremelt是安全研究人员在2009年提出的一种针对链路的分布式拒绝服务攻击方法,攻击者须要控制一个分布足够普遍的僵尸网络来发动Coremelt攻击。
首先,攻击者经过traceroute等手段来判断各个僵尸主机和将要攻击的链路之间的位置关系,并根据结果将僵尸主机分为两个部分,而后,攻击者控制僵尸主机,使其与链路另外一侧的每一台僵尸主机进行通讯并收发大量数据,这样,大量的网络数据包就会通过骨干网上的被攻占链路,形成网络拥堵和延时。
从骨干网上来看,这些僵尸主机之间相互收发的数据包确实是真是存在的通讯数据,没有办法将这些通讯数据与真正的合法通讯数据进行有效的区分,所以这种攻击方式更加难以防御和缓解。
Transmission Control Protocol(传输控制协议)是一种面向链接的、可靠的、基于字节流的传输层通信协议,不一样主机的应用层之间常常须要可靠的、像管道同样的链接,可是IP层没法提供这样的流机制,在现实的互联网中,这种链接一般经过TCP协议来实现。
TCP链接包括三个阶段:链接建立,数据传送和链接终止,因为在协议的设计过程中只专一于协议的可用性,而没有对协议的安全性进行比较周密和详细的考虑,所以TCP协议存在不少安全缺陷和安全性问题。
TCP链接洪水攻击是在链接建立阶段对TCP资源进行攻击的。
在三次握手进行的过程当中,服务器会建立并保存TCP链接的信息,这个信息一般被保存在链接表结构中,可是,链接表的大小是有限的,一旦服务器接收到的链接数量超过了链接表能存储的数量,服务器就没法建立新的TCP链接了。攻击者能够利用大量受控主机,经过快速创建大量恶意的TCP链接占满被攻击目标的链接表,使目标没法接受新的TCP链接请求,从而达到拒绝服务攻击的目的。
SYN洪水攻击就是攻击者利用受控主机发送大量的TCP SYN报文,使服务器打开大量的半开链接,占满服务器的链接表,从而影响正经常使用户与服务器创建会话,形成拒绝服务。
在创建TCP链接的过程当中,若是在服务器返回SYN+ACK报文后,客户端因为某种缘由没有对其进行确认,这时服务器端就须要重传SYN+ACK报文,并等待客户端的确认报文直到TCP链接超时,这种等待客户确认的链接状态一般被称为半开链接。
在链接超时以前,半开链接会一直保存在服务器的链接表中。
因为链接表的大小是有限的,若是在短期内产生大量的半开链接,而这些链接又没法很快的结束,链接表就会很快被占满,致使新的链接TCP链接没法创建。
攻击者在发送TCP SYN报文时,能够在收到服务器返回的SYN+ACK报文后,跳过最后的ACK报文发送,使链接处于半开状态,可是这样会很明显的暴露出进行SYN洪水攻击的IP地址,同时相应报文会做为反射流量占用攻击者的宽带资源,因此更好的方式是攻击者将SYN报文的源IP地址随机伪造其余主机的IP地址或者不存在的IP地址,这样攻击目标将会应答发送给被伪造的IP地址,从而占用链接资源并隐藏攻击来源。
因为带有PSH标志位的TCP数据包会强制要求接收端将接收缓冲区清空并将数据提交给应用服务进行处理,所以当攻击者利用受控主机向攻击目标发送大量的PSH+ACK数据包时,被攻击目标就会消耗大量的系统资源不断地进行接收缓冲区的清空处理,致使没法正常处理数据,从而形成拒绝服务。
在正常的TCP传输过程中,若是待发送的数据会清空发送缓冲区,那么操做系统的TCP/IP协议栈就会自动为该数据包设置PSH标志,一样,当服务端接收到一个设置了PSH+ACK标志的报文时,意味着当前数据传输已经结束,所以须要当即将这些数据投递交给服务进程并清空接收缓冲区,而无须等待判断是否还会有额外的数据到达。
在TCP链接的终止阶段,一般是经过带有FIN标志报文的四次交互(TCP四次握手)来切断客户端与服务端的TCP链接,可是客户端或服务器其中之一出现异常情况,没法正常完成TCP四次握手以终止链接时,就会使用RST报文将链接强制中断。
在TCP链接中,RST表示复位,用来在异常时关闭链接,发送端在发送RST报文关闭链接时,不须要等待缓冲区中的数据报所有发送完毕,而会直接丢弃缓冲器的数据并发送RST报文,一样,接收端在收到RST报文后,也会清空缓冲区并关闭链接,而且没必要发送ACK报文进行确认。
攻击者能够利用RST报文的这个特性,发送伪造的带有RST标志位的TCP报文,强制中断客户端与服务端的TCP链接,在伪造RST报文的过程当中,服务端的IP地址和端口号是已知的,攻击者还须要设法获取客户端的IP地址和端口号,而且使RST报文的序列号处于服务器的接收窗口以内,若是攻击者和被攻击客户端或服务器处于同一内网,这些信息能够经过欺骗和嗅探等方式获取到。
不少状况下,攻击者不会与被攻击客户端或服务器处于同一内网,致使发动TCP RST攻击时难以获取端口和序列号,在这种状况下,攻击者能够利用大量的受控主机猜想端口和序列号,进行盲打,发送RST洪水攻击,只要在数量巨大的RST报文中有一条与攻击目标的端口号相同,而且序列号落在目标的接收窗口之中,就可以终端链接。
Sockstress攻击是研究人员在2008年提出的一种攻击TCP链接的方法,与前面几种攻击方式不一样的是,Sockstress攻击不须要在短期内发送大量的攻击流量,所以不属于洪水攻击,而是一种慢速攻击。
在TCP传输数据时,并非将数据直接递交给应用程序处理,而是先临时存储在接受缓冲区里,该接收缓冲区的大小是由TCP窗口表示的,若是TCP窗口大小为0,则表示接收缓冲区已被填满,发送端应该中止发送数据,知道接收端的窗口发生了更新,Sockstress攻击就是利用该原理长时间维持TCP链接,以达到拒绝服务攻击的目的。
Sockstress攻击首先会完成TCP三次握手以创建TCP链接,可是在三次握手的最后一次ACK应答中,攻击者将其TCP窗口大小设置为0,随后进行一次数据请求,攻击目标在传输数据时,发现接收端的TCP窗口大小为0,就会中止传输数据,并发出TCP窗口探测包,询问攻击者其TCP窗口是否有更新,因为攻击者没有更改TCP窗口的大小,被攻击目标就会一直维持TCP链接等待数据发送,并不断进行窗口更新的探测,若是攻击者利用大量的受控主机进行Sockstress攻击,被攻击目标会一直维持大量的TCP链接并进行大量窗口更新探测,其TCP链接表会逐渐耗尽,没法链接新的链接而致使拒绝服务。
Secure Sockets Layer(安全套接层)是为网络通讯提供安全及数据完整性的一种安全协议,SSL可以在传输层对网络链接进行加密,以防止传输的数据明文被监听和截获。
然而,SSL协议加密、解密和秘钥协商的过程当中会消耗大量的系统资源,严重下降机器的性能,所以,一般只有在传输密码等机密信息时才使用SSL协议进行传输。攻击者能够利用SSL协议消耗资源的特性进行拒绝服务攻击。
在进行SSL数据传输以前,通讯双方首先要进行SSL握手,以协商加密算法交换加密秘钥,进行身份验证,一般状况下,这样的SSL握手过程只须要进行一次便可,可是在SSL协议中有一个Renegotiation选项,经过它能够进行秘钥的从新协商以创建新的秘钥。
THC SSL DOS攻击是安全研究人员在2011年提出的一种针对SSL的拒绝服务攻击方法,这种方法就是利用Renegotiation选项,形成被攻击目标资源耗尽,在进行SSL链接并握手以后,攻击者反复不断的进行秘钥从新协商过程,而秘钥从新协商过程须要服务器投入比客户端多15倍的CPU计算资源,攻击者只须要一台普通的台式机就能拖慢一台高性能服务器,而若是有大量主机同时进行攻击,则会使服务器忙于协商秘钥而彻底中止响应。
在进行SSL握手的过程当中,服务器会消耗较多的CPU计算资源进行加解密,并进行数据的有效性检验,对于客户端发过来的数据,服务器须要先花费大量的计算资源进行解密,以后才能对数据的有效性进行检验,重要的是,不论数据是不是有效的,服务器都必须先进行解密才可以作检查,攻击者能够利用这个特性进行SSL洪水攻击。
在进行洪水攻击时,一个要点是须要攻击者可以在客户端大量的发出攻击请求,这就须要客户端所进行的计算尽量的少,对于SSL洪水攻击,比较好的方式是在数据传输以前,进行SSL握手的过程当中发动攻击,攻击者并不须要完成SSL握手和秘钥交换,而只须要在这个过程当中让服务器去解密和验证,就可以大量的消耗服务器的计算资源,所以,攻击者能够很是容易的构造秘钥交换过程当中的请求数据,达到减小客户端计算量的目的。
Domain Name System (域名系统)服务是互联网的一项核心服务,经过使用DNS,人们在访问网络时不须要记住其IP地址,而只需输入其域名便可,在IPv6网络环境下,因为IP地址由原来的32位扩展到了128位,变得更加难以记忆,DNS服务也就变得更加剧要,当DNS服务的可用性收到威胁时,互联网上的大量设备都会受到影响甚至没法正常运行。
DNS查询和解析过程: 当客户端向DNS服务器查询某域名时,DNS服务器会首先检查其本地缓存中是否有该域名的记录,若是缓 存中有该域名的记录(即命中),则直接讲缓存中记录的IP地址做为非权威应答返回给客户端,若是在 缓存中没有找到该域名的记录,则会进行迭代查询,从根域名开始,逐级进行域名解析,直到解析出完 整的域名,以后服务器会将域名解析结果做为应答发送给客户端,并生成一条解析记录保存到缓存中。
在DNS解析的过程当中,客户端发起一次查询请求,DNS服务器可能须要进行额外的屡次查询才能完成解析的过程并给出应答,在这个过程当中会消耗必定的计算和网络资源,若是攻击者利用大量受控主机不断发送不一样域名的解析请求,那么DNS服务器的缓存会被不断刷新,而大量解析请求不能命中缓存又致使DNS服务器必须消耗额外的资源进行迭代查询,这会极大的增长DNS服务器的资源消耗,致使DNS响应缓慢甚至彻底拒绝服务。
DNS NXDOMAIN洪水攻击是DNS QUERY洪水攻击的一个变种攻击方式,区别在于后者是向DNS服务器查询一个真实存在的域名,而前者是向DNS服务器查询一个不存在的域名。(NXDOMAIN = Non-eXistent Domain)
在进行DNS NXDOMAIN洪水攻击时,DNS服务器会进行屡次域名查询,同时,其缓存会被大量NXDOMAIN记录所填满,致使响应正经常使用户的DNS解析请求的速度变慢,这与DNS QUERY洪水攻击所达到的效果相似,除此以外,一部分DNS服务器在获取不到域名的解析结果时,还会再次进行递归查询,向其上一级的DNS服务器发送解析请求并等待应答,这进一步增长了DNS服务器的资源消耗,所以,DNS NXDOMAIN洪水攻击一般比DNS QUERY洪水攻击的效果更好。
近年来,Web技术发展很是迅速,人们能够经过浏览器使用Web服务,简单方便的获取须要的信息,而许多机构和企业的重要信息和关键业务也是经过Web服务的方式对外提供,一旦Web服务受到解决服务攻击,就会对其承载的业务形成致命的影响。
Web服务一般使用 HyperText Transfer Protocol (超文本传输协议)进行请求和响应数据的传输。
常见的HTTP请求有GET请求和POST请求两种,一般GET请求用于从Web服务器获取数据和资源,例如请求页面、获取图片和文档等;POST请求用于向Web服务器提交数据和资源,例如发送用户名/密码、上传文件等。在处理这些HTTP请求的过程当中,Web服务器一般须要解析请求、处理和执行服务端脚本、验证用户权限并屡次访问数据库,这会消耗大量的计算资源和I/O访问资源。
攻击者利用大量的受控主机不断的向Web服务器发送恶意大量HTTP请求,要求Web服务器处理,就会彻底占用服务器的资源,形成其余正经常使用户的Web访问请求处理缓慢设置得不处处理,致使拒绝服务,这就是HTTP洪水攻击。
因为HTTP协议是基于TCP协议的,须要完成三次握手创建TCP链接才能开始HTTP通讯,所以进行HTTP洪水攻击时没法使用伪造源IP地址的方式发动攻击,这时,攻击者一般会使用HTTP代理服务器,HTTP代理服务器在互联网上普遍存在,经过使用HTTP代理服务器,不只能够隐藏来源以免被追查,还可以提升攻击的效率——攻击者链接代理服务器并发送完成请求后,能够直接切断与该代理服务器的链接并开始链接下一个代理服务器,这时代理服务器与目标Web服务器的HTTP链接依然保持,Web服务器须要继续接收数据并处理HTTP请求。
与DNS服务相似,Web服务也存在缓存机制,若是攻击者的大量请求都命中了服务器缓存,那么这种攻击的主要做用仅体现再消耗网络宽带资源上,对于计算和I/O资源的消耗是很是有限的,所以,高效的HTTP洪水攻击应不断发出针对不一样资源和页面的HTTP请求,并尽量请求没法被缓存的资源,从而加剧服务器的负担,加强攻击效果。
此外,若是Web服务器支持HTTPS,那么进行HTTPS洪水攻击是更为有效的一种攻击方式,一方面,在进行HTTPS通讯时,Web服务器须要消耗更多的资源用来进行认证和加解密,另外一方面,一部分的防御设备没法对HTTPS通讯数据流进行处理,也会致使攻击流量绕过防御设备,直接对Web服务器形成攻击。
HTTP洪水攻击是目标对Web服务威胁最大的攻击之一,有大量的攻击工具支持HTTP洪水攻击,发动简单其效果明显,已经成为攻击者使用的主要攻击方式之一。
Slowloris攻击是一种针对web服务器的慢速HTTP攻击,由安全研究人员在2009年提出。
在HTTP协议中规定,HTTP头部以连续的“rnrn”做为结束标志,许多Web服务器在处理HTTP请求的头部信息时,会等待头部传输结束后再进行处理,所以,若是Web服务器没有接受到连续的“rnrn”,就会一直接受数据并保持与客户端的链接,利用这个特性,攻击者可以长时间与Web服务器保持联系,并逐渐耗尽Web服务器的链接资源。
攻击者在发送HTTP GET请求时,缓慢的发送无用的header字段,而且一直不发送“rnrn”结束标志,这样就可以长时间占用与Web服务器的链接并保证该链接不被超时中断,然而,Web服务器可以处理的并发链接数是有限的,若是攻击者利用大量的受控主机发送这种不完整的HTTP GET请求并持续占用这些链接,就会耗尽Web服务器的链接资源,致使其余用户的HTTP请求没法被处理,形成拒绝服务。
慢速POST请求攻击也是一种针对Web服务器的慢速HTTP攻击,由安全研究人员在2010年提出,与Slowloris攻击不一样的是,慢速POST请求攻击利用缓慢发送HTTP BODY的方式达到占用并耗尽Web服务器链接资源的目的。
在HTTP头部信息中,可使用Content-Length字段来指定HTTP消息实体的传输长度,当Web服务器接收到的请求头部中含有Content-Length字段时,服务器会将该字段的值做为HTTP BODY的长度,持续接收数据并在达到Content-Length值时对HTTP BODY的数据内容进行处理,利用这个特性,攻击者可以长时间与Web服务器保持链接,并逐渐耗尽Web服务器的链接资源。
攻击者在发送HTTP POST请求时,在请求头部中将Content-Length设置为一个很大的值,并将HTTP BODY以很是缓慢的速度一个字节一个字节的向Web服务器发送,这样,Web服务器就须要一直维持与客户端的链接并等待数据传输结束,因为Content-Length被设置成了很大的值,而HTTP BODY的传输速度又很是缓慢,攻击者就能够长时间占用这个链接,经过间断性的发送单字节的HTTP BODY内容,攻击者就可以确保链接不因超时而致使中断,若是攻击者利用大量的受控主机发送这种缓慢的HTTP POST请求并持续占用这些链接,就会耗尽Web服务器的链接资源,致使其余用户的HTTP请求没法被处理,形成拒绝服务。
Web服务器在收到HTTP请求以后,须要检查并处理其中的数据,经过恶意构造请求数据的内容,攻击者能够显著的增长数据处理过程当中的资源消耗,形成拒绝服务攻击。
这里以正则表达式拒绝服务攻击和哈希冲突拒绝服务攻击为例进行说明。
正则表达式拒绝服务攻击又被称为ReDoS,是安全研究人员在2009年发现的一种拒绝服务攻击方法,在处理请求数据时,Web应用一般会使用正则表达式进行字符的匹配操做,一部分正则表达式引擎会使用一种被称为非肯定性有限状态自动机的实现方式,以便可以处理复杂的正则表达式,例如包含了向后引用或者捕获括号的正则表达式。然而,这种正则引擎的实现方式也致使了其处理时间增长,尤为是在肯定“否认匹配”时,正则引擎须要对全部可能的匹配路径所有进行测试,若是位于Web应用中的正则表达式写的很差,须要测试的匹配路径数量会随着输入字符串的长度呈指数级增加,利用恶意构造的输入字符串,攻击者只须要提交相对较短的输入字符串,就能够强制正则引擎处理数亿个匹配路径,所需时间能够达到几个小时甚至几天,只须要几个这种相似的恶意正则表达式匹配请求,就可以彻底占用Web服务器的计算资源,形成Web服务器拒绝服务。
哈希冲突拒绝服务攻击是安全研究人员在2011年提出的一种拒绝服务攻击方法,web应用在处理请求中的POST数据时,一般使用键-值对的方式来进行存储,在PHP、Python、Java等语言中,键-值对的实质是一个哈希表,web应用程序经过计算“键”的哈希来获取其所对应的的“值”。正常状况下,这个哈希表的哈希冲突较少,所以进行查找和插入的速度很快,正常状态下的哈希表如图所示。
若是攻击者构造一组恶意的POST数据,使得请求中的“键”的哈希值所有相同,那么保存POST数据的哈希表就会所以退化成为链表 ,对哈希表的查找和插入等操做规则变成了对链表的遍历操做,形成大量的计算资源被占用,致使拒绝服务攻击。如图所示为大量冲突状态下的哈希表。
攻击分类 | 洪水攻击 | 慢速攻击 |
---|---|---|
网络层攻击 | ICMP/IGMP洪水攻击 | / |
传输层攻击 | UDP洪水攻击 SYN洪水攻击 TCP链接洪水攻击 PSH+ACK洪水攻击 ACK反射攻击 RST洪水攻击 SSL洪水攻击 |
Sockstress攻击 THC SSL Dos攻击 |
应用层攻击 | DNS QUERY洪水攻击 DNS NXDOMAIN洪水攻击 DNS放大攻击 HTTP洪水攻击 SNMP放大攻击 NTP放大攻击 |
Slowloris攻击 慢速POST请求攻击 数据处理过程攻击 |
要保证网络设备不能成为瓶颈,所以选择路由器、交换机、硬件防火墙等设备的时候要尽可能选用知名度高、口碑好的产品。再就是假如和网络提供商有特殊关系或协议的话就更好了,当大量攻击发生的时候请他们在网络接点处作一下流量限制来对抗某些种类的DDoS攻击是很是有效的。
网络带宽直接决定了能抗受攻击的能力,倘若仅仅有10M带宽的话,不管采起什么措施都很难对抗如今的SYN Flood攻击。因此,最好选择100M的共享带宽,固然是挂在1000M的主干上了。
在有网络带宽保证的前提下,请尽可能提高硬件配置,要有效对抗每秒10万个SYN攻击包。并且最好能够进行优化资源使用,提升web server 的负载能力。
经过DDoS硬件防火墙对异常流量的清洗过滤,经过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等顶尖技术能准确判断外来访问流量是否正常,进一步将异常流量禁止过滤。
把网站尽量作成静态页面,不只能大大提升抗攻击能力,并且还给黑客入侵带来很多麻烦,最好在须要调用数据库的脚本中,拒绝使用代理的访问,经验代表,使用代理访问你网站的80%属于恶意行为。
这是目前网络安全界防护大规模DDoS攻击的最有效办法。分布式集群防护的特色是在每一个节点服务器配置多个IP地址,而且每一个节点能承受不低于10G的DDoS攻击,如一个节点受攻击没法提供服务,系统将会根据优先级设置自动切换另外一个节点,并将攻击者的数据包所有返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防御角度去影响企业的安全执行决策。
对稳定性、流畅性以及安全性上要求较高的业务,用户遭受 DDoS 攻击且达到必定峰值时,系统经过 IP 轮询机制,将从IP 池中灵活调取一个新的 IP 充当业务 IP,使攻击者失去攻击目标,以此保证业务在 DDoS 的攻击下正常运转。
当用户应用 BGP 高防 IP 且配置转发规则和域名回源后,此时全部的访问流量都将流经 BGP 高防 IP 集群,经过端口协议转发的方式(支持网站业务和非网站业务)将访问流量转发至源站,同时攻击流量将在 BGP 高防 IP 集群进行清洗和过滤,只会将正常业务流量返回至源站,从而确保源站业务的稳定。
针对反射放大类攻击,都有相同的特色,能够直接在运营商侧进行过滤,不用将流量流入抗D设备,从而使防护与反射放大类压制更有效果。本不存在放大效果,但基于其真实 IP 的缘由,穿透性与隐蔽性都十分显著。
流量预压制/UDP 预压制等能力,从容应对新型的超大流量攻击。 (Memcached的5W倍反射)
参考资料:绿盟科技博客,原文连接
《破坏之王:DDos攻击与防范深度剖析》 做者:鲍旭华、洪海、曹志华