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