常见的DDOS攻击主要分为流量型攻击和cc攻击:
流量型攻击主要通过发送大量的非法报文侵占正常业务带宽
包括SYN Flood/ SYN-ACK Flood /ACK Flood/ FIN/RST Flood
cc攻击的原理是通过模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标CPU资源,造成拒绝服务。CC攻击是针对网站的页面进行攻击
流量型攻击原理:
首先回顾一下tcp三次握手和四次挥手的过程,客户端向服务端发送SYN,服务端回应SYN+ACK,客户端再次回应ACK建立起连接,然后互相发送数据,客户端数据发送完后,客户端会向服务端发送FIN请求关闭连接,客户端回应ACK进行确认,等到服务端把数据发送完成后同样发送FIN进行关闭,其实这其中的每一个环节都有可能被攻击者利用发起攻击。
ACK Flood:
SYN是三次握手的第一个环节,攻击者发送 SYN,当服务器返回ACK后,攻击者不进行回应,攻击者就对服务器发送非常大量SYN,每一个都没法完成三次握手,这些tcp连接处于挂起状态,耗尽CPU和内存,正常用户来的时候无法提供服务,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更会浪费服务器的资源
SYN-ACK Flood:
SYN-ACK报文出现在第二次握手中,是用来确认第一次握手的。一方收到SYN-ACK报文后,首先会判断该报文是不是属于三次握手范畴之内的报文。如果都没有进行第一次握手就直接收到了第二次握手的报文,那么就会向对方发送RST报文,告知对方其发来报文有误,不能建立连接。SYN-ACK Flood攻击正是利用了这一点,攻击者向目标服务器发送大量的SYN-ACK报文,这些报文都属于凭空出现的第二次握手报文,服务器忙于回复RST报文,导致资源耗尽,无法响应正常的请求
ACK Flood:
ACK Flood攻击是在TCP连接建立之后,所有的数据传输TCP报文都是带有ACK标志位的,服务器在接收到一个带有ACK标志位的数据包的时候,需要检查该数据包所表示的四元组是否存在,如果在检查中发现该数据包不合法就会回应RST包告诉对方此端口不存在。服务器要做两个动作:查表、回应ACK/RST。攻击者发送大量的ACK包,服务器忙于处理这些非法数据包导致资源耗尽,无法响应正常的请求。
FIN Flood:
正常用户和服务器连接时,攻击者发送一个伪造的FIN包给服务端,这个伪造的FIN包源地址是正常用户的地址,服务端收到后就会断开与正常用户的连接,随后正常用户发送的数据服务器会认为是网络错误而忽略掉
RST Flood:
RST flood 与 FIN flood 攻击类似,攻击者发送一个伪造的RST包给服务端,服务端就会直接断开与正常用户的连接
UDP Flood:
UDP FLOOD 攻击是基于udp协议,UDP 是一种无连接的协议,不需建立连接来传输数据。Udp flood攻击在短时间那模拟随机的源端口地址向随机的目的端口发送大量的udp包,服务器要处理判断是否是正常的udp包,如果不是正常的udp包,服务器要进行回应处理,造成服务器不能处理其他udp的请求
反射放大攻击:
反射放大攻击原理利用一些协议的请求数据包和响应数据包比例不平衡的特点,就是响应包大于请求包,攻击者通过伪造受害者的 IP 地址、向开放性的服务器发送构造的请求报文,开放服务器会将大量的响应数据包发送受害者 IP,,间接形成 DDoS 攻击,如dns reflect flood /snmp reflect flood/ ntp reflect flood
cc攻击: challenge collapsar 抗击黑洞
cc攻击的原理是通过模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标CPU资源,造成拒绝服务。CC攻击是针对网站的页面进行攻击.
防御原理:
1.首包丢弃:丢弃第一个SYN报文看是否重传来判断客户端的真实性 ,比如syn ack攻击
2. 源认证:向客服端响应错误报文,根据客服端的反应判断客户端的真实性
3.会话检查,检查报文是否命中会话,如果没有命中直接丢弃,如果命中继续检查报文的序号,不正确的也是丢弃掉
4.特征过滤:报文长度或内容一样的报文数量超出阈值判定为udp攻击,直接丢弃
5.限速,超过设定的阈值之后,通知引流或者加入黑名单
6.在一定的周期内,请求访问量过大,超过了阈值,清洗设备通过返回验证码或者JS代码的方式。这种防护方式的依据是,攻击者利用工具模拟大量http 请求,正常户通过浏览器访问,利用工具发送的请求一般不会解析服务端返回数据,更不会解析JS之类的代码。当服务单返回一段特殊JavaScript代码,正常用户的浏览器会处理并正常跳转不影响使用,而攻击程序会攻击到空处。