我的网站上周一直遭遇拒绝服务/黑客攻击。攻击是在循环中随机生成的无效API密钥攻击我们的Web API。
我不确定他们是否试图猜测一个密钥(数学上不可能像64位密钥)或尝试DOS攻击服务器。攻击是分发的,所以我不能禁止所有的IP地址,因为它发生在数百个客户端。
我的猜测是它是IP的Android应用,所以有人在Android应用中有一些恶意软件,并使用所有安装攻击我的服务器。
服务器是Tomcat / Java,目前Web API只响应400无效密钥,并缓存已经进行多次无效密钥尝试的IP,但仍需要对每个错误请求进行一些处理。
有关如何制止攻击的建议吗?有没有办法识别从HTTP标头发出请求的Android应用程序?
答案 0 :(得分:43)
防止蛮力攻击:
有大量工具和策略可以帮助您完成此任务,使用哪些工具和策略完全取决于您的服务器实施和要求。
如果不使用防火墙,IDS或其他网络控制工具,您就无法阻止DDOS拒绝为您的应用程序提供服务。但是,您可以修改应用程序以使暴力攻击更加困难。
执行此操作的标准方法是实施锁定或渐进式延迟。如果IP无法登录N次,则锁定会阻止IP发出X分钟的登录请求。渐进式延迟会增加处理每个错误登录请求的延迟和延迟。
如果你正在使用Tomcat的身份验证系统(即你的webapp配置中有<login-constraint>
元素),你应该使用Tomcat LockoutRealm,这样可以轻松放置IP一旦他们发出许多错误请求,就会锁定地址。
如果您没有使用Tomcat的身份验证系统,那么您必须发布有关您正在使用的更多信息以获取更具体的信息。
最后,您可以简单地增加API密钥的长度。 64位似乎是一个不可逾越的巨大搜索关键空间,但它的重量不足现代标准。许多因素可能会使其远远低于您的预期:
将API密钥长度提高到128(或256或512)不会花费太多,并且您将极大地增加任何暴力攻击的搜索空间(以及难度)。
减轻DDOS攻击:
然而,要减轻DDOS攻击,您需要做更多的工作。 DDOS攻击是 hard 来防御,如果你不控制服务器所在的网络,它就特别难。
话虽如此,你可以做一些服务器端的事情:
Valve
,如here所述,以User-Agents
(或任何其他标准)拒绝传入请求作为最后一道防线。 但是,最终,您可以做很多事情来免费停止DDOS攻击。服务器只有很多内存,如此多的CPU周期和如此多的网络带宽;有足够的传入连接,即使是最有效的防火墙也不会让你失望。如果您投资于更高带宽的互联网连接和更多服务器,或者您在Amazon Web Services上部署应用程序,或者您购买了许多消费者和企业DDOS中的一个,您将能够更好地抵御DDOS攻击缓解产品(@SDude has some excellent recommendations in his post)。这些选项都不便宜,快捷或简单,但它们是可用的。
底线:
如果您依赖应用程序代码来缓解DDOS,那么您已经失去了
答案 1 :(得分:4)
如果它够大,你就不能单独阻止它。你可以在应用程序级别进行所需的所有优化,但是你仍然会失败。除了用于预防的应用级安全性(如在FSQ的答案中),您应该使用经过验证的解决方案,将繁重的工作留给专业人士(如果您认真对待您的业务)。我的建议是:
互联网 - &gt; CloudFlare / Incapsula - &gt; AWS API网关 - &gt;您的API服务器
0.02
PS:我认为这个问题属于Sec
答案 2 :(得分:3)
最好的方法是完全阻止对那些失败的IP地址进行3次访问。这将占用服务器的大部分负载,因为攻击者在Tomcat甚至必须为该用户启动线程之前被阻止。
实现此目标的最佳工具之一称为fail2ban(http://www.fail2ban.org)。它作为所有主要Linux发行版中的包提供。
您需要做的是将失败的尝试记录到文件中,并为fail2ban创建自定义过滤器。 Darryn van Tonder在他的博客上有一个很好的例子来说明如何编写自己的过滤器:https://darrynvt.wordpress.com/tag/custom-fail2ban-filters/
答案 3 :(得分:2)
如果D-DOS攻击严重,应用程序级别检查根本不起作用。 D-DOS客户端将占用整个带宽,并且不会触发您的应用程序级别检查。实际上,您的Web服务根本不运行。
如果您必须保护您的应用程序免受严重的D-DOS攻击,除了依靠第三方工具付款之外,您没有任何其他选择。我可以从过去的经验中找到一个干净的管道提供商(只发送良好的流量)工具:Neustar
如果您网站中的D-DOS攻击温和,您可以实施应用程序级别检查。例如,以下配置将限制Restrict calls from single IP
中引用的单个IP的最大连接数<Directory /home/*/public_html> -- You can change this location
MaxConnPerIP 1
OnlyIPLimit audio/mpeg video
</Directory>
有关D-DOS攻击的更多信息,请访问Wiki link。它提供了预防和安排的清单。响应工具,包括:防火墙,交换机,路由器,基于IP的防御,基于D-DOS的防御
最后
清洁管道 (所有流量通过代理,隧道甚至直接电路等各种方法通过“清洁中心”或“清洗中心”传输分离“坏”流量(DDoS以及其他常见的互联网攻击)并仅将良好的流量发送到服务器之外)
您可以找到12个清洁管道经销商。
答案 4 :(得分:2)
以下是一些想法。此外还有许多策略,但这应该可以帮助您入门。还要意识到亚马逊经常得到ddos'd,并且他们的系统往往会有一些启发式方法来加强它们(以及你们)对这些攻击的强化,特别是如果你使用的是弹性负载平衡,无论如何你应该使用它。 / p>
使用限制机制来阻止大量请求
在到达您的应用程序之前,自动拒绝非常大的请求(例如,大于1-2mb;除非您有照片上传服务或类似服务)
通过限制系统中其他组件的连接总数来防止级联故障;例如,不要让数据库服务器因打开一千个连接而过载。
答案 5 :(得分:1)
对于有针对性和高度分布的DOS攻击,唯一可行的解决方案(除了提供吸收它的能力之外)是分析攻击,识别“告知”并将该流量路由到低资源处理程序。
您的问题有一些说明 - 请求无效,但可能确定这样做的成本太高。请求来自特定的网络组,并且可能是它们以突发形式发生。
在你的评论中,你告诉我们至少另一个告诉 - 用户代理是空的。
在不添加任何其他组件的情况下,您可以通过对连接进行tarp来开始 - 如果匹配该配置文件的请求进入,请继续并验证该密钥,然后让您的代码休眠一两秒钟。这将以较低的成本降低这些客户的请求率。
另一种解决方案是使用与tell匹配的日志失败并使用fail2ban实时重新配置防火墙,以便暂停源地址中的所有数据包。
不,你不太可能在没有拿到受影响的设备的情况下识别应用程序。