http 拒绝服务
1 详细描述
缓慢的 http 拒绝服务攻击是一种专门针对于 Web 的应用层拒绝服务攻击,攻击者操纵网络
上的肉鸡,对目标 Web 服务器进行海量 http request 攻击,直到服务器带宽被打满,造成了
拒绝服务。
慢速 HTTP 拒绝服务攻击经过不断的演变和发展,主要有三种攻击类型,分别是 Slow
headers、Slow body、Slow read。以 Slow headers 为例,Web 应用在处理 HTTP 请求之前都
要先接收完所有的 HTTP 头部,因为 HTTP 头部中包含了一些 Web 应用可能用到的重要的
信息。攻击者利用这点,发起一个 HTTP 请求,一直不停的发送 HTTP 头部,消耗服务器
的连接和内存资源。抓包数据可见,攻击客户端与服务器建立 TCP 连接后,每 40 秒才向
服务器发送一个 HTTP 头部,而 Web 服务器再没接收到 2 个连续的 时,会认为客户端
没有发送完头部,而持续的等等客户端发送数据。如果恶意攻击者客户端持续建立这样的
连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。这种攻击类型称
为慢速 HTTP 拒绝服务攻击。
2 原理
是以极低的速度往服务器发送 HTTP 请求。由于 Web Server 对于并发的连接数都有一定的
上限,因此若是恶意地占用住这些连接不释放,那么 Web Server 的所有连接都将被恶意连
接占用,从而无法接受新的请求,导致拒绝服务。
要保持住这个连接,RSnake 构造了一个畸形的 HTTP 请求,准确地说,是一个不完整的
HTTP 请求。
GET / HTTP/1.1
HOST: host
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR
1.1.4322; .NET CLR 2.0.503l3; )
Content-Length: 42
在正常的 HTTP 包头中,是以两个 CLRF 表示 HTTP Headers 部分结束的。
由于 Web Server 只收到了一个,因此将认为 HTTP Headers 部分没有结束,并保持此连
接不释放,继续等待完整的请求。此时客户端再发送任意 HTTP 头,保持住连接即可。
X-a: b
当构造多个连接后,服务器的连接数很快就会达到上限。
3 安全加固
如果是 TOMCAT 的话,
修改/conf/server.xml 配置中的 connectionTimeout 参数,修改为,7000ms 或更少
原来:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为:
<Connector port="8080" protocol="HTTP/1.1"
评论2