本文大部分内容借鉴了《破坏之王 DDoS攻击与防范深度剖析》,有感兴趣的同学可以去看这本书,作为入门书籍对我帮助很大。
DDoS(Distributed Denial of Service),第一次拒绝服务攻击可以追溯到1996年,为什么到了今天,他还是如此流行且高效?DDoS攻击很像现实中的战争,打仗往往不需要全歼对手,把敌人的后勤线切断,攻占指挥中心都可以达到胜利的目的。现在网络服务,各个模块组件之间都有着紧密的联系,一个模块出问题,可能影响整个业务。这就使得DDoS只需要投入相对不那么大的成本,集中攻击目标的一个点就可以摧毁目标的整个服务,而被攻击方往往为了应对这一小搓“敌人”要付出成倍的成本。当然了,随着现在网络安全防护能力的增强,流量不高而且逻辑简单的攻击往往对目标没什么影响,DDoS攻击的成本也就越来越高,但是相比于其他攻击方式,他从成本,收益和难度来看,都几乎是最优的选择。
DDoS涉及的知识面非常广,本人也是初学者,这篇文章只简单介绍下DDoS攻击的一些常见方法。随着技术的演进,攻击方法也越来越多,一篇文章肯定不能涵盖所有攻击方法,但是攻击的思路是一脉相承的,只是攻击方式不一样了而已。
DDoS的主要目的是让目标的服务不可用,要达到这个目的的方法应该有很多种,但是难度不一,DDoS可以说是选择了最简单的一种方法,它不需要关心你设计的架构有多强壮,不关心你的代码质量高低。它只干一件事,你提供服务,我都用了,别人就用不了了。如果你有很多服务器,可以支持很多并发连接,服务器的计算性能也很高,那么好,我就用得更多,你支持10000条并发连接,那么我就把这10000条连接都占了呗。
通过什么来占用这些服务不是本文关心(僵尸网络,控制高性能服务器等),本文关心的是如何占用这些服务。现在主流的一些攻击方法思路分为三类,对网络带宽的攻击,对系统资源的攻击以及对应用资源的攻击。
这类攻击就是字面意思,通过占满被攻击者的带宽,并消耗服务器和网络设备的网络数据处理能力,进而影响其他正常请求,达到denial of service的目的。
ICMP/IGMP洪水攻击
核心思想就是发ICMP/IGMP报文,这种方法比较早,现在基本不用了,因为被 攻击目标可以在其网络边界直接过滤并丢弃该类报文。故不过多介绍。
UDP洪水攻击
利用UDP向目标主机发送大量UDP报文,攻击者一般会使用小包(64字节)和大包(1500)两种方式。由于交换机路由器会对包进行校验,小包可以有效的增大网络设备处理数据包的压力;而大包则可以有效的占用网络接口的传输带宽,并迫使被攻击目标在接收UDP数据时进行分片重组,造成网络拥堵,服务器响应变慢。 但是这种攻击方式,对攻击者的机器网络性能要求很高,你打50G的流量,你就需要发50G的UDP包。
直接攻击对攻击主机的网络性能要求很高,往往是你发多少流量才能打对少流量,放大攻击就是为了解决这一问题。同时经过了反射,还可以达到隐藏攻击源ip的目的
反射放大攻击两个特性:放大&&隐藏。放大就需要在网络协议中找到请求和响应数据量不对称的情况。
ACK反射攻击
利用TCP握手,发送SYN包时把源地址伪造成攻击目标的地址,这样就可以让返回的ACK包发送到攻击目标主机上,并且可以伪造攻击者的ip,但是没有放大效果,没什么意思。
DNS放大攻击
DNS的响应包往往比查询的包大。可以放大到2-10倍。在没有EDNS0之前,DNS包大小被限制到了512字节。在EDNS0之后,客户端可以自定义能处理报文的最大值,DNS就会根据这个值生成响应数据报文。这样可以把放大倍数提升到50倍以上。但是注意,能利用的DNS服务器必须是支持递归查询的DNS服务器。这种方式不仅可以隐藏攻击者,还可以放大流量,比较常用。
NTP放大攻击
与DNS攻击类似,只不过这种方式利用的是NTP协议。利用这种方式,配合合适的手段,可以把攻击倍数放大到700倍以上。主要利用了monlist的一个特性,有兴趣的可以自行了解。当公开的NTP服务器对monlist的特性做了限制,这种攻击的效果就会变得很差,因为放大倍数就会急剧下降
SNMP放大攻击
Simple Network Management Protocol协议。利用这种方式放大倍数可以达到25倍以上,由于这个协议效果很好,很多网络设备都使用了这个协议,可以利用的机器非常多。但是扫描到这些设备后还需要对他们所使用的默认字符串进行猜测,难度比较大,放大倍数也不理想
这个攻击的目标不是互联网上端点的服务器带宽资源,而是骨干网上的链路带宽资源。这种攻击需要控制一个分布广泛的僵尸网络,然后分成两部分,利用A中的主机向B中的主机发送数据。这种攻击比较难防,因为看起来都是真实的通信数据
这一部分主要攻击的是系统的会话资源。占用会话,阻止正常连接的建立,从而达到拒绝服务的目的。
这里有一个误区,就是DDOS都是消耗网络带宽资源的攻击,其实则不然,此类攻击就是攻击系统的资源,而且SYN攻击这类消耗系统资源的攻击比UDP攻击这类攻击带宽的攻击危害更大。
TCP连接洪水攻击
利用僵尸网络主机和攻击目标主机建立完整的TCP连接,从而占满攻击主机的tcp连接表已达到拒绝正常请求的目的。注意是完整的三次握手
SYN洪水攻击
僵尸网络只发送SYN报文,不响应目标主机的ACK报文,不是一次完整的连接,但是也可以占满目标主机的连接表,造成拒绝服务。这种攻击非常流行且简单。同时可以发现,由于不需要建立完整的连接,攻击者就可以伪造syn报文的源ip,已达到隐藏攻击源的目的。
PSH+ACK洪水攻击
在TCP传输过程中,可以设置PSH标志位来表示当前数据传输结束,服务端接受到设置了PSH+ACK标志的报文后会把这个数据递交给服务进程并清空接受缓冲区,无需等待判断是否还有额外的数据到达。 这样攻击者就可以利用这个标志位向目标主机发送大量PSH+ACK数据包。被攻击目标就会消耗大量的系统资源不断地进行接收缓冲区的清空处理,从而造成拒绝服务
RST洪水攻击
无法完成TCP正常的四次挥手时,会利用RST强制中断连接,这也是一种攻击手段,但是有一个难点,需要知道真正客户端的ip端口,并且还需要让RST报文的序列号处在服务器的接收窗口之内。一般都是利用rst结合一些欺骗和嗅探手段进行盲打。常用于在线游戏或者比赛,LOL掉线挂感觉就是利用这种方式。
Sockstress攻击
该攻击不需要在短时间内发送大量攻击流量,是一种慢速攻击。这种攻击方式主要利用接受缓冲区大小的设置,攻击者将该值设置为0,当目标主机需要给攻击者发数据时,发现接收窗口大小为0,就会停止发送数据,并一直发窗口探测包。从而达到占用资源拒绝服务的目的
安全套接层(Secure Socket Layer),在传输层为网络连接进行加密。但是在加解密过程中会消耗大量的系统资源。
如果使用RSA4096算法,在极端情况下,服务端消耗的资源是客户端的25倍
THC SSL DoS攻击
一般进行SSL数据传输前,通信双方只需要进行一次SSL握手,但是通过Renegotiation选项,可以进行密钥的重新协商以建立新的密钥连接。攻击者就是利用这一参数,不断进行密钥重新协商,消耗服务器计算资源。即使服务器不支持这个参数,攻击者也可以打开新的ssl连接达到类似的攻击效果。
SSL洪水攻击
服务器在进行SSL握手过程中,需要对数据进行有效性校验,这个是需要对数据解密才能得知有效性的。 攻击者可以利用这个特性发送大量的fake ssl handshake请求对目标进行SSL洪水攻击
针对DNS公共服务的一种攻击,影响面会比较大。
DNS QUERY 洪水攻击
通过对DNS发送大量查询请求以达到拒绝服务的效果。DNS的原理自行了解一下。在查询过程中,不断发送不同的域名,这样DNS服务器会不断刷新缓存,并且让新的解析请求无法命中缓存,这样就会使DNS服务器进行多次的额外查询,增加计算和网络资源的消耗,最终达到拒绝服务的目的。
DNS NXDOMAIN洪水攻击
是DNS QUERY的一种变种攻击,区别是DNS QUERY每次都是发送的真实域名,而DNS NXDOMAIN发送的是虚假域名。如果没有命中缓存,DNS是不知道这个域名是真实的还是虚假,还会进行递归或者迭代查询。
HTTP洪水攻击
字面意思,对web服务利用受控的僵尸主机发送大量恶意http请求,消耗目标主机的资源。由于http七层协议利用的TCP需要进行握手,这就无法隐藏攻击ip。这时攻击者一般会利用http代理服务器,即使被拉黑了还能换一台继续攻击。但是web服务也有缓存机制,攻击者需要每次请求都不一样,才能消耗目标主机的计算和io资源,否则只能消耗带宽。如果服务器支持HTTPS,那么利用HTTPS攻击更加有效,因为还会有额外的加解密。
Slowloris攻击
慢速攻击的一种,HTTP协议规定,header中以\r\n\r\n作为结束的标志,攻击者就可以在构造get请求时缓慢发送无用的header字段,一直不发送\r\n\r\n结束标志,来占用web处理请求的线程,web服务处理请求的并发数是有限的,这样就可以达到拒绝服务的目的
慢速POST请求攻击
类似Slowloris攻击,这次处理的body字段,在请求header中将Content-Length设置成一个很大的值,然后BODY以非常缓慢的速度一个一个字节发送数据,占用服务器的请求连接
数据处理过程攻击
通过构造恶意请求的内容,来显著增加数据处理过程中的资源消耗。例如正则表达式拒绝服务攻击ReDDoS,哈希冲突拒绝服务攻击等。
此类攻击就是把上述攻击结合,达到更好的攻击效果。
例如利用slowloris攻击和慢速POST请求攻击结合,利用大量的攻击淹没慢速攻击请求,从而让防御者无法定位出真正被拒绝服务攻击的原因
最后,从其他不同的分类角度来展示现有的攻击方法
攻击分类 | 洪水攻击 | 慢速攻击 |
---|---|---|
网络攻击 | ICMP/IGMP攻击 | |
传输层攻击 | UDP洪水攻击 TCP连接攻击 SYN洪水攻击 PSH+ACK洪水攻击 ACK反射攻击 RST洪水攻击 SSL洪水攻击 | Sockstress攻击 THC SSL DoS攻击 |
应用层攻击 | DNS QUERY攻击 DNS NCDOMAIN洪水攻击 DNS放大攻击 HTTP洪水攻击 SNMP放大攻击 NTP放大攻击 | slowloris攻击 慢速POST请求攻击 数据处理过程攻击 |