识别DOS攻击

我怀疑我的一台服务器已经被攻击了一段时间了。 我的问题是,如何在受到攻击或攻击结束后识别DOS或DDOS攻击?

拒绝服务攻击的重点是消费有限的资源。 主要是指networkingstream量,但可能是任何你可以用尽。 例如,如果您的Web服务器需要五秒钟才能生成特定的复杂页面,那么我可以为自己节省大量的stream量,并且只需要很慢的请求就可以快速消耗服务器的后端资源。

看到资源利用率大幅度上升,确定了拒绝服务攻击。 如果你仔细观察一下图表,发现它很难实现,那么这是一个拒绝服务事件的候选人。

只是因为你看到很多stream量或资源的使用并不意味着它是一个攻击。 Slashdot效应解释了这一现象。 你只能通过查看你的日志来弄清楚。 如果有一半的连接有引用者指向刚刚发布在一个主要网站上的合法文章,那么这是真正的stream量。 如果没有,也许你正在受到攻击。

DOS和DDOS攻击的区别归结为“closures阀门”的挑战。 如果不是分布式攻击,我可以在networking边缘杀死这个有问题的主机或者networking,生活就会继续。 当发布攻击时,这是一个更大的挑战。 如果您的攻击者努力使不需要的stream量看起来与您的正常stream量非常相似,则更是一个挑战。

概要

  1. 见秒杀
  2. 确定原因
  3. 识别负责任的交通

这取决于您正在运行的服务。 维基百科有一个很好的定义:

拒绝服务攻击(DoS攻击)或分布式拒绝服务攻击(DDoS攻击)是试图使计算机或networking资源不可用于其目标用户。 尽pipe实施DoS攻击的手段,动机和目标可能各不相同,但通常由一个人或多个人共同努力来防止互联网站点或服务有效或完全暂时或无限期地运行。

该术语通常用于计算机networking,但不限于此领域; 例如,它也用于参考CPU资源pipe理。

当你运行一个Web服务器的时候,你会发现GET请求中有一个巨大的峰值,对于DNS服务来说,这将是蜜jar查找,……这个攻击主要是询问你的很多服务器,直到它不能够应付。

在这里输入图像说明

确定故意的恶意行为与非恶意但是破坏性的行为之间的差异是困难的。

您会在SYN_RECV状态中看到大量的半开连接。 你正在被SYN淹没,还是让你工作的某人更改了防火墙规则或出站路由规则?

您看到来自单个IP地址的HTTP请求数量猛增。 这是一个performance不好的机器人或脚本kiddy试图从你母亲的地下室做你? 或者,也许一封电子邮件只是给所有在大学的学生提供了链接到您的网站。

您看到来自许多IP地址的HTTP请求数量猛增。 DDoS或Reddit?

您看到来自一个IP地址的大量DNS请求。 该服务器是否试图阻止您或者是其他人欺骗源地址,使您成为反映的DNS攻击的一部分?


对于您的网站是否因故意的攻击或有机stream量而closures,可能有几点提示。 其中一些可以从日志中确定,有些只在发生攻击时发生:

正如杰夫·费兰(Jeff Ferland)所提到的,一个有效的Referer头文件是一个很好的提示,即stream量是合法的,但这不是绝对的证据。 一个有几百个隐藏图像的stream行网页,可能是一个启动DDoS的方法。 它甚至不一定是图像,任何页面都可以。 <img href="http://target-site.com" />仍将导致客户端从您的Web服务器加载该页面,但显示一个破碎的图标图标。 如果您find引荐者,请检查网页,如果可以,并确保它是真正合法的。

电子邮件客户端通常不会设置引用者,而是设置网页邮件客户端。 虽然你不能简单地通过加载引用来看电子邮件,事实上,有一个暗示这是一个合法的请求。

User-Agent标题可以是一个很好的线索。 大多数合法的机器人使用唯一的用户代理,并链接到关于页面。 许多不那么合法的机器人(垃圾邮件机器人和电子邮件刮板)使用IE 6.0作为他们的用户代理。 大多数DoS工具都包含一系列真实但较旧的用户代理,它们是在每次请求后轮换的最stream行的浏览器。 如果您知道网站上每个浏览器的不同版本的正常比例,那么Firefox 7.0.1和IE 8.0的高峰值应该清楚地显示出来。 特别是自Firefox和Chrome现在自动更新以来,看到一个甚至一个月的版本是很less见的。

DoS工具可以请求一个页面,也可以通过页面列表进行轮换,但是无论哪种情况,通常都不会请求所有关联的内容,如样式表,JavaScript和图像。 他们也不会发送caching控制头,如If-Modified-SinceIf-None-Match因为这些在很大程度上打败了提出请求的目的。 如果你看到很多客户展示这种行为,那很可能是恶意的。 (只要你的caching控件设置正确。)

DoS工具通常不会像普通的Web浏览器那样发送相同的头文件。 在服务器上运行一个tcpdump来捕获一些stream量并进行分析。 在机器人中看到的一些差异(不一定是DoS工具):

  • Host:标题最后而不是第一个。 普通浏览器似乎在GET之后立即列出它。
  • POST数据没有正确的URL编码。 一些真正的浏览器,如IE6也没有得到这个权利。
  • 具体和唯一的Accept-*:标题。 中国和俄罗斯的语言跳出来,但这是轶事,而不是统计。
  • 没有cookies。

某些标头可能会有明显的恶意,例如列出数千个重叠范围的Range:标头。

如果您打开了mod_forensic ,您可能能够在攻击后分析这些标头,但是mod_forensic可能会在您的日志中产生大量数据,这可能会导致DoS自行启动。

至于反映的DNS攻击,通过简单分析stream量几乎是不可能的。 你将不得不走出去找出这一个。 找出谁拥有IP地址,并通过电子邮件或电话联系他们,询问他们是否真的在做这些DNS请求。

这就把我带到了计算恶意意图的带外方法。 通常,DoS攻击背后有一个原因。 Google可以帮助您find原因。 search您的域名(但从-site:yourdomain.com删除该域名的结果)和/或IP地址,并将结果限制为最新的域名。 你可能会发现攻击者吹嘘自己失败的证据,或者@anonops的鸣叫表示你是目前的目标。 你也许会发现那个提到你的Slashdot故事。 无论哪种方式,search您的网站可能工作。 不要忘记其他search引擎,他们都有自己的抓取工具,而且由于您在过去几个小时内都在寻找结果,因此他们都没有完整的覆盖范围。

一些DoS攻击基于勒索。 特别是针对赌博网站等大量金钱和具体的预定事件的网站。 通常的方法是在超级杯或者大国赛之前的一两个星期内产生一个简短的DoS,并且如果没有还清,他们会在关键的时候再次做出这样的威胁。 如果您收到勒索请求,则DoS可能是故意的和恶意的。

简单的直接回答一个简单的直接问题:

在您的路由器上设置监视器以graphics化每秒的数据包(pps)。 如果您无法绘制ppsgraphics带宽使用情况。 我build议使用像Cacti这样的软件包来做到这一点,使用思科设备和本地networking接口非常简单。

一旦你有这个运行,你可以注意到在每秒的峰值。

如果这是一个简单的DoS,则可以通过防火墙规则很容易地阻止stream量来源。

如果这是一个DDoS,那么除非你自己有一些非常棒的设备,否则你需要让你的IP中转服务商通过DDoS过滤/保护服务来通过受影响的路由。 大多数运输提供商提供此服务。