IIS headerWaitTimeout ssems对缓慢的HTTP标头攻击没有影响

如何解决IIS headerWaitTimeout ssems对缓慢的HTTP标头攻击没有影响

我试图提供某种缓解或缓解IIS缓慢HTTP POST攻击的形式。不幸的是,由于存在很多绑定,因此很难用Nginx替换IIS以提供传输速率控制。

通过使用连接超时属性,我对缓慢的HTTP POST body 攻击获得了部分成功。它似乎也会影响Timer_EntityBody,因此,如果在这么多秒钟内没有在套接字上接收到任何内容(例如20),则http.sys将断开连接。

IIS在应用程序主机级别具有一个名为“ headerWaitTimeout”的webLimits设置: https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/weblimits

旧(网站认): https://docs.microsoft.com/zh-cn/iis/configuration/system.applicationhost/sites/sitedefaults/limits

它允许您设置客户端应发送所有HTTP标头的最长时间。我可以成功设置该值,但是在使用Kali Linux和'slowhttptest'对其进行测试时,它似乎没有任何作用。我还通过wireshark验证了此行为。

在Windows 2012 R2服务器上使用此命令(IIS 8.5,但我怀疑这与WS 2019上的IIS 10相同):

netsh http show servicestate

我可以看到我的主站点的应用程序池具有以下设置:

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中显示代码。如果有任何可以解决此问题的Microsoft IIS专家,请共享任何信息或指针。

谢谢, 以利

解决方法

嗯,这是最近才出现的。似乎每当您尝试向医生暴露问题时,他们都会感到害怕:-) 我发现了这个小宝石:

https://docs.microsoft.com/en-us/windows-server/networking/technologies/netsh/netsh-http

基本上,netsh http add timeout允许您直接操作http.sys的headerWaitTimeout。与IIS webLimits 部分不同,它实际上可以完成工作!

我能够在我的网站上设置20或30秒的超时时间(实际上这是计算机的全局时间...),并使用以下命令测试了HTTP标头攻击:

slowhttptest -c 1 -H -i 5 -r 200 -t POST -u http://<url to post>/.../ -p 30 -x 20 -l 120

(用于通过Wireshark捕获测试1个连接)

然后,当我将连接数更改为2000时,我看到了打开连接数量的类似电锯的行为,这可能是我们期望的。

Headers report

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?