在Tomcat 8上缓解缓慢的HTTP发布漏洞

时间:2018-03-23 05:21:50

标签: java spring-mvc security tomcat ddos

我们用于安全测试的第三方工具是在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上使用的配置。

1 个答案:

答案 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配置和灵活性。