我们用于安全测试的第三方工具是在Tomcat 8上提供 Slow HTTP POST 漏洞。我们在应用程序中有一个简单的Spring Controller和JSP。
现有的Tomcat连接器配置如下:
<Connector port="8643" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true" compression="on"
clientAuth="false" sslProtocol="TLS" maxPostSize="20480"
maxSwallowSize="20480" maxHeaderCount="25" maxParameterCount="100"/>
请注意,我们在tomcat前面没有Apache或Nginx。请建议我们可以直接在Tomcat上使用的配置。
答案 0 :(得分:2)
慢速HTTP攻击的示例是SLOWLORIS
要使用Tomcat缓解它,解决方案是使用NIO Connector,如tutorial中所述。
您的问题还不清楚,Tomcat默认情况下Tomcat 8上已经使用了NIO连接器,这是您的配置:
默认值为HTTP / 1.1,它使用自动切换机制 选择非阻塞的基于Java NIO的连接器或 APR /基于本机的连接器。
也许您应该设置一些其他连接器参数来专门限制 POST 滥用,我建议:
maxPostSize="1048576" (1 MByte)
connectionTimeout="10000" (10 seconds between the connection and the URI request)
disableUploadTimeout="false" (activate the POST maximum time allowed)
connectionUploadTimeout="20000" (maximum POST of 20 seconds)
一个选项也是限制标题编号(默认为100),但这会对使用智能手机的人产生副作用(已知会发送许多标题):
maxHeaderCount="25"
但这取决于您的流量是来自互联网,还是来自已知用户的专业内部网。在后一种情况下,您可以将设置调整为更宽松。
编辑1:使用MultipartConfig加强
正如其他一些帖子所述,maxPostSize可能不适用于限制上传。使用Java 7 built-in uploads时,可以通过Servlet的注释或配置来配置限制。它不是你提出的纯Tomcat配置,但是有必要了解它并与DEV团队交谈,因为从开发的早期阶段就必须考虑到安全性。
编辑2:禁用分块传输编码
某些慢速HTTP POST 攻击基于使用Transfer-Encoding : chunked
标头发送的请求,然后发送许多或无限数量的块。为了应对这种攻击,我建议配置一个Rewrite Valve。
要实现此目的,请在server.xml
:
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
假设您的主机名是默认主机名(localhost),您需要使用以下内容创建$CATALINA_BASE/conf/Catalina/localhost/rewrite.config
文件:
RewriteCond %{HTTP:Transfer-Encoding} chunked
RewriteRule ^(.*)$ / [F]
如果有必要,您可以调整RewriteRule来回复除了由F标志引起的403 Forbidden之外的其他内容。这是纯Tomcat配置和灵活性。