13.1 DDoS简介
(1)DDoS又称为分布式拒绝服务,全称是Distributed Denial of Service。
(2)利用合理的请求造成资源过载,导致服务不可用。
13.2 应用层DDoS
(1)发生在应用层,TCP三次握手已经完成,连接已经建立。
(2)Challenge Collapasar(简称CC),意指在黑洞的防御下,仍然能有效完成拒绝服务攻击。CC攻击的原理非常简单,就是对一些消耗资源较大的应用页面不断发起正常的请求,已达到消耗服务端资源的目的。
(2)最常见的针对应用层DDoS攻击的防御措施,是在应用中针对每个“客户端”做一个请求频率的限制。
(3)攻击者经常使用代理服务器或傀儡机来隐藏攻击者的真实IP地址。解决方式如下:
应用代码要做好代码优化;在网络架构上做好优化;实现一些对抗手段,比如限制每个IP地址的请求频率。
13.3 验证码的那些事
(1)验证码可以有效地阻止自动化的重放行为。但验证码如果设计得过于复杂,那么人也很难辨识出来。
(2)通过一些图像处理技术,可以将验证码逐步变化成可识别的图片。
13.4 防御应用层DDoS
(1)让客户端解析一段JavaScript,并给出正确的运行结果,可以判断出客户端到底是不是浏览器。
(2)除了人机识别外,还可以在Web Server这一层做些防御。
(3)在Apache的配置文件中,有一些参数可以缓解DDoS攻击。
(4)Apache提供的模块接口为我们扩展Apache、设计防御措施提供了可能。目前已经有一些开源的Module全部或部分实现了针对应用层DDoS攻击的保护。
13.5 资源耗尽攻击
(1)Slowloris攻击:以极低的速度往服务器发送HTTP请求。
(2)HTTP POST DoS:发送HTTP POST包时,指定一个非常大的Content-Length值,然后以很低的速度发包,比如10~100s发一个字节,保持住这个连接不断开。这样当客户端连接数多了以后,占用住了Web Server的所有可用连接,从而导致DoS。
(3)Server Limit DoS:Web Server对HTTP包头都有长度限制。假如攻击者通过XSS攻击,恶意地往客户端写入了一个超长的Cookie,则该客户端在清空Cookie之前,将无法再访问该Cookie所在域的任何页面。
13.6 一个正则表达式引发的血案:ReDOS
(1)正则表达式是基于NFA(Nondeterministic Finite Automaton)的,它是一个状态机,每个状态和输入符号都可能有许多不同的下一个状态。正则解析引擎将遍历所有可能的路径直到最后。
(2)当用户恶意构造输入时,这些有缺陷的正则表达式就会消耗大量的系统资源(比如CPU和内存),从而导致整台服务器的性能下降。