IIS headerWaitTimeout SSEM对慢速HTTP标头攻击没有影响
我正试图提供某种形式的缓解或缓解针对IIS的缓慢HTTP POST攻击。不幸的是,由于我们有许多绑定,用nginx替换IIS以提供传输速率控制将非常困难 通过使用连接超时属性,我在缓慢的HTTP POST正文攻击方面取得了部分成功。它似乎也会影响Timer_EntityBody,因此如果套接字在那么多秒(比如20秒)内没有接收到任何内容,http.sys将断开连接 IIS在应用程序主机级别具有名为“headerWaitTimeout”的webLimits设置: 旧(网站默认设置): https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/sites/sitedefaults/limits 它允许您设置客户端发送所有HTTP头的最长时间。我可以成功地设置这个值,但在使用Kali Linux和“slowhttpest”进行测试时,它似乎没有任何效果。我还用wireshark验证了这种行为 在我的Windows 2012 R2服务器上使用此命令(IIS 8.5,但我怀疑在WS-2019上的IIS 10也是如此): 我可以看到我的主站点的应用程序池具有以下设置:IIS headerWaitTimeout SSEM对慢速HTTP标头攻击没有影响,http,security,post,iis,denial-of-service,Http,Security,Post,Iis,Denial Of Service,我正试图提供某种形式的缓解或缓解针对IIS的缓慢HTTP POST攻击。不幸的是,由于我们有许多绑定,用nginx替换IIS以提供传输速率控制将非常困难 通过使用连接超时属性,我在缓慢的HTTP POST正文攻击方面取得了部分成功。它似乎也会影响Timer_EntityBody,因此如果套接字在那么多秒(比如20秒)内没有接收到任何内容,http.sys将断开连接 IIS在应用程序主机级别具有名为“headerWaitTimeout”的webLimits设置: 旧(网站默认设置): https
URL group ID: A10000024000000F
State: Active
Request queue name: MyMainAppPool (name changed..)
Properties:
Max bandwidth: inherited
Max connections: 5000
Timeouts:
Entity body timeout (secs): 45
Drain entity body timeout (secs): 45
Request queue timeout (secs): 65535
Idle connection timeout (secs): 45
Header wait timeout (secs): 0
Minimum send rate (bytes/sec): 0
Authentication Configuration:
Authentication schemes enabled:
Number of registered URLs: 2
Registered URLs:
HTTPS://*:443/
HTTP://*:80/
请注意,请求Q超时很高(不知道为什么-在任何级别都找不到这个数字),并且报头等待超时始终为0。
其他应用程序池正确地继承了这一点。例如:
Timeouts:
Entity body timeout (secs): 45
Drain entity body timeout (secs): 45
Request queue timeout (secs): 65535
Idle connection timeout (secs): 45
Header wait timeout (secs): 25
Minimum send rate (bytes/sec): 768
我需要一个关于下一步去哪里的线索和指针。ETW跟踪显示http.sys中的代码,只是等待新数据。如果有任何微软IIS专家可以解释这个问题-请分享任何信息或指针
谢谢,
Eli嗯,这是最近才出现的。当你试图将问题暴露给医生时,他们似乎真的很害怕:——) 我发现了这个小宝石: 基本上,netsh http add timeout允许您直接操作http.sys的headerWaitTimeout。与IISwebLimits部分不同,这实际上完成了任务 我能够在我的站点上设置20或30秒的超时(实际上这是机器的全局超时…),并使用以下命令测试HTTP标头攻击:
slowhttptest -c 1 -H -i 5 -r 200 -t POST -u http://<url to post>/.../ -p 30 -x 20 -l 120
slowhttpest-c1-H-i5-r200-tpost-uhttp:///.../ -p 30-x 20-l 120
(用于测试1个带有Wireshark capture的连接)
然后,当我将连接计数移动到2000时,我看到了一个链锯式的行为,即打开连接的数量,这是人们所期望的
预期<代码>站点默认值/限制仅适用于更改后创建的新站点。您必须设置现有站点的
限制。是的,但webLimits是应用程序主机级别的一个部分。它应该将更改向下反映到IIS下的所有站点。。所以这种行为很奇怪.“它应该反映出IIS下所有站点的变化”。不,不应该。再次阅读我上面所说的内容和Microsoft文档,默认值部分将无法反映到现有站点,因为您已经可以拥有特定于站点的设置。这就是为什么您的更改只适用于更改后的新站点。@LexLi-我不是在谈论站点默认限制,但我现在意识到了混淆。我的链接不正确。我要更新它。我写的文本是指applicationHost部分下的webLimits。
slowhttptest -c 1 -H -i 5 -r 200 -t POST -u http://<url to post>/.../ -p 30 -x 20 -l 120