0%

Flask之缓慢的http拒绝服务攻击漏洞解决

1.什么是缓慢的http拒绝服务攻击漏洞

缓慢的http拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,攻击者操纵网络上的肉鸡,对目标Web服务器进行海量http request攻击,直到服务器带宽被打满,造成了拒绝服务。

慢速HTTP拒绝服务攻击经过不断的演变和发展,主要有三种攻击类型,分别是Slow headers、Slow body、Slow read。

  • slowloris:完整的http请求是以 \r\n\r\n 结尾,攻击时仅发送 \r\n,少发送一个 \r\n,服务器认为请求还未发完,就会一直等待直至超时

  • slow post:通过声明一个较大的content-length后,body缓慢发送,导致服务器一直等待

    • slow read:向服务器发送一个正常合法的read请求,请求一个很大的文件,但把TCP滑动窗口设置得很小,服务器就会以滑动窗口的大小切割文件,然后发送,这时文件会长期存放在内存中,消耗资源

2. Flask应对措施

  • 限制每次请求数据的大小

  • 限制单个HTTP请求头的最大许可时间

  • 限制单个ip请求数量

  • 。。。。。。

#3. 使用slowhttptest测试漏洞

3.1 slowhttptest的安装

安装说明:https://github.com/shekyan/slowhttptest/wiki/InstallationAndUsage1

  1. 下载压缩包:https://github.com/shekyan/slowhttptest/releases

  2. 安装libssl-dev
    $ yum install openssl openssl-devel

  3. 安装C++编译器
    $ yum install gcc-c++

  4. 解压

    $ tar -xzvf slowhttptest-x.x.tar.gz

  5. 编译安装

    1
    2
    3
    4
    $ cd slowhttptest-x.x
    $ ./configure --prefix=PREFIX
    $ make
    $ sudo make install

3.2 参数说明及使用测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-g      在测试完成后,以时间戳为名生成一个CVS和HTML文件的统计数据
-H SlowLoris模式
-B Slow POST模式
-R Range Header模式
-X Slow Read模式
-c number of connections 测试时建立的连接数
-d HTTP proxy host:port 为所有连接指定代理
-e HTTP proxy host:port 为探测连接指定代理
-i seconds 在slowrois和Slow POST模式中,指定发送数据间的间隔。
-l seconds 测试维持时间
-n seconds 在Slow Read模式下,指定每次操作的时间间隔。
-o file name 使用-g参数时,可以使用此参数指定输出文件名
-p seconds 指定等待时间来确认DoS攻击已经成功
-r connections per second 每秒连接个数
-s bytes 声明Content-Length header的值
-t HTTP verb 在请求时使用什么操作,默认GET
-u URL 指定目标url
-v level 日志等级(详细度)
-w bytes slow read模式中指定tcp窗口范围下限
-x bytes 在slowloris and Slow POST tests模式中,指定发送的最大数据长度
-y bytes slow read模式中指定tcp窗口范围上限
-z bytes 在每次的read()中,从buffer中读取数据量

3.2.1参考实例:

slowloris模式:

1
slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u https://xxxxxx.xxxxx.xx -x 24 -p 3

slow post模式:

1
$ slowhttptest -c 3000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://xxx.xxx.xxx -x 10 -p 3

slow read模式:

1
$ slowhttptest -c 8000 -X -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u https://xxx.xxx.xxx -p 3

4.使用说明

以下是分别使用四种方式对自己的服务进行测试的结果,先开始不太懂每个曲线图的意义。这里说明一下,上面的参数可以设置连接数量以及持续请求时间等参数。然后下面展现的是曲线图,主要看在测试程序运行时间内Connected的数量是否被释放,是否通过服务的设置不符合条件的请求被服务端关闭,Service是否正常运行(服务是否存在被漏洞攻击程序给冲宕机了)。

##4.1 RANGE HEADERS

##4.2 SLOW HEADERS(SlowLoris)

##4.3 SLOW BODY(SLOW POST)

4.4 SLOW READ