DDOS 学习
0x01 什么是DDOS
DOS
拒绝服务,英文名称是Denial of Service,简称DOS,造成拒绝服务的攻击行为被称为DOS攻击。DOS攻击的目的是使计算机或网络无法提供正常的服务,最常见的DOS攻击一般会用极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽, 最后导致合法的用户请求无法通过。
DDOS
DDoS(Distributed Denial of Service)意为分布式拒绝服务攻击,分布式拒绝服务攻击是从多个来源,彼此协同进行拒绝服务攻击,多个来源可能是攻击者控制的“肉鸡”,也可能是由众多真实的参与者组成,由于DDOS攻击可能来自任何IP,因此无法通过简单的IP封阻的方式进行防御。
0x02 DDOS攻击目的
DDoS攻击的主要目的是让指定目标无法提供正常服务,是目前最强大、最难防御的攻击之一。这是一个世界级的难题并没有解决办法只能缓解。
0x03 常见DDOS方式
DDOS攻击主要分为三类:流量型攻击;连接型攻击;特殊协议缺陷
流量型攻击
流量型攻击主要通过发送大量请求,将服务器网络带宽占满,使其不能对正常用户发起的请求进行响应。流量型攻击又分为直接攻击和反射放大攻击。
直接攻击
使用大量的受控主机向被攻击目标发送大量的网络数据包,以沾满被攻击目标的宽带,并消耗服务器和网络设备的网络数据处理能力,达到拒绝服务的目的
- Ip lood
此攻击以多个随机的源主机地址向目的主机发送超大量的随机或特定的IP包,造成目标主机不能处理其他正常的IP报文。
- ICMP/IGMP洪水攻击
攻击者使用受控主机向被攻击目标发送大量的ICMP/IGMP报文,进行洪水攻击以消耗目标的宽带资源,这种类型的攻击出现的很早,使用hping等工具就能简单的发起攻击。但现在使用这种方法发动的攻击已见不多,被攻击目标可以在其网络边界直接过滤并丢弃ICMP/IGMP数据包使攻击无效化。
- UDP洪水攻击
利用UDP数据报文,攻击者也可以发送洪水攻击,UDP洪水攻击和ICMP/IGMP洪水攻击的原理基本相同,通常,攻击者会使用小包和大包两种方式进行攻击。
小包是指64字节大小的数据包,这是以太网上传输数据帧的最小值,在相同流量下,单包体积越小,数据包的数量就越多。由于交换机、路由器等网络设备需要对没一个数据包进行检查和校验,因此使用UDP小包攻击能够最有效的增大网络设备处理数据包的压力,造成处理速度的缓慢和传输延迟等拒绝服务攻击的效果。
大包是指1500字节以上的数据包,其大小超过了以太网的最大传输单元,使用UDP大包攻击,能够有效的占用网络接口的传输宽带,并迫使被攻击目标在接受到UDP数据时进行分片重组,造成网络拥堵,服务器响应速度变慢。
UDP洪水攻击也是很早就出现的一种拒绝服务攻击方式,这种攻击发动简单,有相当多的工具都能够发动UDP洪水攻击,如hping,LOIC等,但UDP洪水攻击完全依靠受控主机本身的网络性能,因此通常对目标宽带资源的消耗并不太大。
- Http Flood
此攻击类型主要攻击目标为Web服务器上的网页访问服务,当发生攻击时攻击者向被攻击服务器大量高频的发送一个网页或多个网页的请求服务,使服务器忙于向攻击者提供响应资源从而导致不能想正常的合法用户提供请求响应服务
反射放大攻击
反射放大攻击又被称为DRDoS(分布式反射拒绝服务)攻击,是指利用路由器、服务器等设施对请求产生应答,从而反射攻击流量并隐藏攻击来源的一种分布式拒绝服务攻击技术
- ACK反射攻击
在传输控制协议建立连接时,首先会进行TCP三次握手,在这个工程中,当服务器端接收到客户端发来的SYN连接请求时,会对该请求进行ACK应答,利用TCP握手的ACK应答,即可进行ACK反射攻击。
如果攻击者将SYN的源IP地址伪造成被攻击目标的IP地址,服务器的应答也就会直接发送给被攻击目标,由于使用TCP协议的服务在互联网上广泛存在,攻击者可以通过受控主机向大量不同的服务器发送伪造源IP地址的SYN请求,从而使服务器响应的大量ACK应答数据涌向被攻击目标,占用目标的网络宽带资源并拒绝服务
- DNS放大攻击
攻击者能够利用dig和EDNS0进行高效的DNS放大攻击,攻击者向广泛存在的开放DNS解析器发送dig查询命令,将OPT RR字段中UDP报文大小设置为很大的值,并将请求的源IP地址伪造成被攻击目标的IP地址。DNS解析器收到查询请求后,会将解析的结果发送给被攻击目标,当大量的解析结果涌向目标时,就会导致目标网络拥堵和缓慢,造成拒绝服务攻击。
攻击者发送的DNS查询请求数据包大小一般为60字节左右,而查询返回结果的数据包大小通常为300字节以上,因此,使用该方式进行放大攻击能够达到50倍以上的放大效果,这种放大效应所产生的攻击效果是非常惊人的,只要攻击的发起端能够发出2Gbit/s的宽带,就能够在目标网络处产生 100Gbit/s的宽带消耗,在2013年3月在Spamhaus的分布式拒绝服务攻击中,主要就是用了DNS放大攻击技术,使得攻击流量达到了史无前例的300Gbit/s,设置拖慢了局部互联网的响应速度。
- NTP放大攻击
网络时间协议是用来使计算器时间同步化的一种协议,他可以使计算机与时钟源进行同步化并提供高精准度的时间校正,NTP使用UDP123端口进行通信。
在NTP协议的服务器实现上,通常会实现一系列Mode7的调试接口,而接口中的monlist请求能够获取到目标NTP服务器进行同步的最后600个客户端的IP地址等信息。这意味着,只需要发送一个很小的请求包,就能触发大量连续的包含IP地址信息等数据的UDP响应数据包。因此攻击者可以将伪造源IP地址的UDP请求包发送给NTP放大器,伪造客户端与NTP服务器的交互,增加“和NTP服务器交互的客户端的数量”,以此来增加monlist请求的响应数据量并增大NTP放大器的放大倍数,只要向NTP放大器发送600个不超过64字节的请求包(约40KB数据),就能够快速的将NTP放大器的放大倍数提高到700倍以上,并在该服务器的NTP服务关闭或重新启动之前一直保持这么大的放大倍数。
- SNMP放大攻击
利用SNMP协议中的默认通信字符串和GetBulk请求,攻击者能够开展有效的SNMP放大攻击,在SNMPv1中定义的get请求可以尝试一次获取多个MIB对象,但相应消息的大小受到设备处理能力的限制,如果设备不能返回全部请求的响应,则会返回一条错误信息。在SNMPv2中,添加了getbulk请求,该请求会通知设备返回尽可能多的数据,这使得管理程序能够通过发送一次请求就获得大段的检索信息。
攻击者向广泛存在并开启了SNMP服务的网络设备发送getbulk请求,使用默认通信字符串作为认证凭据,并将源IP地址伪造成攻击目标的IP地址,设备收到getbulk请求后,会将响应结果发送给攻击目标,当大量的响应结果涌向攻击目标时,就会导致攻击目标网络拥堵和缓慢,造成拒绝服务攻击。
连接型攻击
连接型攻击主要通过建立大量连接并努力保持尽量长的连接时间,将网络连接、中间件可用连接或服务器连接占满,使正常用户无法建立连接。
- Syn Flood
依据tcp建立连接的三次握手。此攻击以多个随机的源主机地址向目的主机发送syn包,而在收到目的主机的syn+ack包后并不回应,目的主机就为这些源主机建立大量的连接队列,由于没有收到ack一直维护这些连接队列,造成资源的大量消耗而不能向正常的请求提供服务。与之类似的攻击方式还有ackflood、s-ackflood、finflood、rstflood、tcpflood
- http slow header慢速攻击
攻击原理:在http协议中规定,http的头部以连续的“\r\n\r\n”作为结束标志。许多web服务器在处理http请求的头部信息时,会等待头部传输结束后再进行处理。因此,如果web服务器没有接收到连续的“\r\n\r\n”,就会一直接收数据并保持与客户端的连接。Slow-header的工作原理是攻击者在发送http get请求时,缓慢的发送无用的header字段,并且一直不发送“\r\n\r\n”结束标志。Web服务器能够处理的并发连接数是有限的,如果攻击者利用大量的主机发送这种不完整的http get请求把那个持续占用这些连接,就会耗尽web服务器的资源。
- http slow post慢速攻击
攻击原理:在post提交方式中,允许在http的头中声明content-length,也就是指定http消息实体的传输长度。当web服务器接收到请求头部中含有content-length字段时,服务器会将该字段的值作为http body的长度,持续接收数据并达到content-length值时对实体的数据内容进行处理。slow post会传送包括整个header的http请求,在提交了头以后,将后面的body部分卡住不发送,这时候服务器在接受了post长度以后,在处理数据之前会等待客户端发送post的内容,攻击者保持连接并且以10s-100s一个字节的速度去发送,就达到了消耗资源的效果,因此不断增加这样的连接会使得服务器的资源被消耗
- Https-ssl-dos攻击
攻击原理:在进行SSL数据传输之前,通信双方首先要进行ssl握手,以协商加密算法交换加密密钥,进行身份认证。通常情况下,这样的ssl握手过程只需要进行一次即可,但是在ssl协议中有一个renegotiation选项,通过它可以进行密钥的重新协商以建立新的密钥。在ssl握手的过程中,服务器会消耗较多的CPU资源来进行加解密,并进行数据的有效性验证。SSL-dos攻击方式的本质是消耗服务器的CPU资源,在协商加密算法的时候,服务器CPU的开销是客户端的15倍左右。攻击者在一个TCP连接中不停地快速重新协商,如果建立多个连接,给服务器端造成的压力会更加明显,从而达到攻击目的
- CC攻击
攻击原理:利用代理服务器向受害者发起大量HTTP Get请求;主要请求动态页面,涉及到数据库访问操作;数据库负载以及数据库连接池负载极高,无法响应正常请求
特殊协议缺陷
特殊协议缺陷主要利用中间件或者网络协议的缺陷,通过构造特殊的请求包,使服务器需要消耗大量的内存或计算资源进行处理,导致CPU或内存被占满,或者服务发生假死,从而无法对正常请求进行响应。
0x04 防御手段
应用层
关闭apache最大连接数等,合理配置中间件,缓解ddos攻击,页面中添加验证码,比如搜索数据库时。编写代码时,尽量实现优化,并合理使用缓存技术,减少数据库的读取操作。
硬件
-
1、 增加带宽
带宽直接决定了承受攻击的能力,增加带宽硬防护是理论最优解,只要带宽大于攻击流量就不怕了,但成本非常高。 -
2、提升硬件配置
在有网络带宽保证的前提下,尽量提升CPU、内存、硬盘、网卡、路由器、交换机等硬件设施的配置,选用知名度高、 口碑好的产品。 -
3、 硬件防火墙
将服务器放到具有DDoS硬件防火墙的机房。专业级防火墙通常具有对异常流量的清洗过滤功能,可对抗SYN/ACK攻击、TCP全连接攻击、刷脚本攻击等等流量型DDoS攻击
单个主机
- 1、及时修复系统漏洞,升级安全补丁。
- 2、关闭不必要的服务和端口,减少不必要的系统加载项及自启动项,尽可能减少服务器中执行较少的进程,更改工作模式
- 3、iptables
- 4、严格控制账户权限,禁止root登录,密码登录,修改常用服务的默认端口
整个服务器系统
- 1、DDoS 清洗
DDoS 清洗会对用户请求数据进行实时监控,及时发现DOS攻击等异常流量,在不影响正常业务开展的情况下清洗掉这些异常流量。
- 2、CDN
CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率,因此CDN加速也用到了负载均衡技术。相比高防硬件防火墙不可能扛下无限流量的限制,CDN则更加理智,多节点分担渗透流量,目前大部分的CDN节点都有200G 的流量防护功能,再加上硬防的防护,可以说能应付目绝大多数的DDoS攻击了。
- 3、 负载均衡
普通级别服务器处理数据的能力最多只能答复每秒数十万个链接请求,网络处理能力很受限制。负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性,对DDoS流量攻击和CC攻击都很见效。CC攻击使服务器由于大量的网络传输而过载,而通常这些网络流量针对某一个页面或一个链接而产生。在企业网站加上负载均衡方案后,链接请求被均衡分配到各个服务器上,减少单个服务器的负担,整个服务器系统可以处理每秒上千万甚至更多的服务请求,用户访问速度也会加快。
- 4、分布式集群防御
分布式集群防御的特点是在每个节点服务器配置多个IP地址,并且每个节点能承受不低于10G的DDoS攻击,如一个节点受攻击无法提供服务,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防护角度去影响企业的安全执行决策。
0x05参考文章
https://www.secpulse.com/archives/64088.html
https://baijiahao.baidu.com/s?id=1603040969904482717&wfr=spider&for=pc
https://blog.csdn.net/fanren224/article/details/79693872
https://zhuanlan.zhihu.com/p/26828198
http://m.sohu.com/a/142846972_629429
https://zhuanlan.zhihu.com/p/22953451
https://www.zhihu.com/question/26741164/answer/52776074
https://www.zhihu.com/question/26741164/answer/379370437