apache nginx tomcat iis Slow HTTP Denial of Service Attack DDOS漏洞修复办法,可以使用slowHTTPtest自行测试

[ 2020-08-08 09:11:40 | 作者: admin ]
字号: | |
p.s. 关于其中的参数设置数值部分争议比较大,如果真正遭遇到攻击,那么超时数值自然是小一点比较稳妥,比如连接超时设20左右。
为保证服务器稳定运行,具体修改配置需要每操作一步就测试一次是否运行正常。比如修改头信息Content-type,在没有预设谓词情况下拒绝其他谓词,都会造成网站无法服务。总之仅供参考,需要根据实际需求来综合解决ddos问题。

Slow HTTP Denial of Service Attack 中文叫作缓慢的HTTP攻击漏洞,网上多数是tomcat的修复方法,然而实际上会碰到iis nginx apache等web服务器的这个问题,于是就有了这个修复集合。

漏洞描述:
利用的HTTP POST:POST的时候,指定一个非常大的content-length,然后以很低的速度发包,比如10-100s发一个字节,hold住这个连接不断开。这样当客户端连接多了后,占用住了webserver的所有可用连接,从而导致DOS。

修复方法:
对web服务器的http头部传输的最大许可时间进行限制,修改成最大许可时间为8秒。

具体方法如下:
tomcat:
tomcat配置文件conf/server.xml中,
<Connector port="8080" protocol="HTTP/1.1"
                     connectionTimeout="20000"
                     redirectPort="8443" /> //把connectionTimeout的20000改成20即可,如果不受攻击则可以调整到2000

apache:
httpd.conf下启用mod_reqtimeout模块 去掉下面一行前面的#号
LoadModule reqtimeout_module modules/mod_reqtimeout.so
增加以下配置
<IfModule reqtimeout_module>
         RequestReadTimeout header=5-40,MinRate=500 body=20,MinRate=500
</IfModule>
重启apache,工具扫描确认漏洞是否修改完成

建议使用mod_reqtimeout和mod_qos两个模块相互配合来防护。
1、mod_reqtimeout用于控制每个连接上请求发送的速率。配置例如:
请求正文部分,设置超时时间初始为10秒,并在收到客户端发送的数据后,每接收到500字节数据就将超时时间延长1秒,但最长不超过40秒。可以防护slow message body型的慢速攻击。
RequestReadTimeout body=10-40,minrate=500
需注意,对于HTTPS站点,需要把初始超时时间上调,比如调整到20秒。

2、mod_qos用于控制并发连接数。配置例如:
当服务器并发连接数超过600时,关闭keepalive
QS_SrvMaxConnClose 600
每个源IP最大并发连接数为50
QS_SrvMaxConnPerIP 50

这两个数值可以根据服务器的性能调整。

IIS:
感觉没有非常明显的效果,再下面的步骤之前,首先修改下默认的注册表,主要是修改最大连接数。 http://blog.xg98.com/article.asp?id=2662
步驟一: 設定HTTP Request 屬性: 用來限制HTTP 請求的URL及query string長度。
取消勾選 [Allow unlisted verbs]
Max URL length: 2048
Max query string: 1024
attachments/202008/08_092155_1.jpg

attachments/202008/08_095740_11.jpg


步驟二: 設定Header:
在Headers中設定 [Content-type] : 100
attachments/202008/08_092306_2.jpg


步驟三: 設定connectionTimeout, headerWaitTimeout, and minBytesPerSecond等屬性來降低攻擊所帶來的影響。
如果是iis6则需要配置 MetaBase.xml,但是iis6里面其实也没有找到相关属性,下面的例子为iis7.5。
打开C:\Windows\System32\inetsrv\config\applicationHost.config,找到里面<webLimits />改为
<webLimits connectionTimeout="00:00:30" headerWaitTimeout="00:00:30" minBytesPerSecond="250" />
 
<configuration>
       <system.applicationHost>
             <webLimits connectionTimeout="00:00:30" headerWaitTimeout="00:00:30" minBytesPerSecond="250" />
         </system.applicationHost>
   </configuration>

步驟四: 設定完成後,請執行iisreset 讓設定生效。

此外,还可以设置具体站点的 连接超时,最大并发连接数,最大带宽。
选中站点,点最右边的高级设置,图示如下
attachments/202008/08_105101_12.jpg


关于IIS的超时设置可以参考2个文章
How to increase request timeout in IIS? https://www.e-learn.cn/content/wangluowenzhang/86596
Web Limits <webLimits> https://docs.microsoft.com/en-us/iis/configuration/system.applicationHost/webLimits

nginx:
关闭慢速连接
您可以关闭正在写入数据的连接,这可能意味着尝试尽可能保持连接打开(从而降低服务器接受新连接的能力)。Slowloris是这种类型的攻击的一个例子。该[client_body_timeout](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_timeout)指令控制NGINX在客户机体写入之间等待的时间,该[client_header_timeout](http://nginx.org/en/docs/http/ngx_http_core_module.html#client_header_timeout) 指令控制NGINX在写入客户机标题之间等待的时间。这两个指令的默认值是60秒。本示例将NGINX配置为在来自客户端的写入或头文件之间等待不超过5秒钟:
server {
         client_body_timeout 5s;
         client_header_timeout 5s;
         # ...
}
1、通过调整$request_method,配置服务器接受http包的操作限制;
2、在保证业务不受影响的前提下,调整client_max_body_size, client_body_buffer_size, client_header_buffer_size,large_client_header_buffersclient_body_timeout, client_header_timeout的值,必要时可以适当的增加;
3、对于会话或者相同的ip地址,可以使用HttpLimitReqModule and HttpLimitZoneModule参数去限制请求量或者并发连接数;
4、根据CPU和负载的大小,来配置worker_processes 和 worker_connections的值,公式是:max_clients = worker_processes * worker_connections。


参考链接:
https://www.jianshu.com/p/b3fdc16c0808
https://community.qualys.com/blogs/securitylabs/2011/11/02/how-to-protect-against-slow-http-attacks
https://blogs.msdn.microsoft.com/griffey/2015/08/13/iis-request-filtering-slow-http-attack/
https://www.nginx.com/blog/mitigating-ddos-attacks-with-nginx-and-nginx-plus/
IIS6属性大全 https://blog.csdn.net/sukey00/article/details/189226
[最后修改由 admin, 于 2020-08-10 14:39:25]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2703

这篇日志没有评论。

此日志不可发表评论。