最近我读到一篇关于亚马逊和 PayPal 遭到拒绝服务攻击的文章。我很好奇这是如何进行的。这些大公司一定有巨大的服务器,因此 DOS 需要数十亿个机器人来访问它。
我的问题是
- DDOS 攻击在这个级别表现如何?
- 如何提前知道这次攻击正在发生?
- 如何防止这种情况(除了常见的验证码方式外,如何区分机器人和用户)
答案1
从根本上讲,此类拒绝服务攻击涉及向服务器发送超出其处理能力的请求。这可能是大量机器人发送简单请求(尽管摧毁一台服务器并不需要数十亿个请求 - 最多几千个请求),也可能是少数机器人发送执行时间极长的请求。
第二种攻击类型是最恶毒的,因为单个机器人就足以搞垮一台服务器。例如,MySQLLIMIT N OFFSET M
在M
变大时会变得非常慢,因此一个简单的攻击就是快速连续地请求 500 个页面中的 200-300 个页面,从而阻塞所有 MySQL 工作线程。在不受保护的服务器上,可以使用 firebug 来完成此操作。唯一的解决方案是识别成本高昂的操作,然后要么对它们进行优化,使它们连续(这样阻塞网站的这一部分不会使网站的其余部分瘫痪),要么检测请求成本高昂的操作的 IP 并拒绝执行该操作,除非遵守一定的等待间隔。
第一种攻击类型更难实现,因为你需要很多机器人。另一方面,从服务器上阻止它也更难:如果有成千上万的机器人以最快的速度向你发送数据,你的带宽将被洪水吞噬,服务器对此无能为力(即使它直接拒绝 99% 的请求),所以如果你认为自己可能成为目标,那么具有洪水预防功能的路由器是一个不错的选择。
答案2
确实没有办法阻止真正分布式的 DoS 攻击,因为这与处理大量合法流量没有什么区别。(提供验证码可以防止攻击占用长时间运行的进程或大量资源使用,但足够多的攻击也会压垮您的验证码服务带宽)。