昨天我贴出了周六停电的验尸报告。这次中断是因为我们在与坚决的DDoS攻击者作战时,对网络上的流量应用了过于激进的速率限制。在写这篇文章的过程中,我提到我们在周六早些时候看到了一款65Gbps的DDoS。从那以后,我收到了几个问题,大概是:65Gbps DDoS!?是谁发起了这样的攻击?你如何保护自己免受攻击?所以我想我应该给出更多的细节。
65Gbps的DDoS是一个很大的攻击,在我们看到的最大的攻击中,它很容易排在前5%。下图显示了攻击我们的欧盟数据中心的攻击数量(绿线表示入站流量)。当攻击速度为65Gbps时,这意味着每秒钟有65千兆位的数据被发送到我们的网络。这相当于同时观看3400个高清电视频道的数据量。这是一大堆数据。大多数网络连接是以100 Mbps、1Gbps或10Gbps为单位测量的,因此即使是大型互联网连接,这样的攻击也会很快饱和。
在CloudFlare,攻击需要超过5Gbps才能向我们的操作团队发出警报。即便如此,我们的自动化网络防御系统通常可以在不需要任何人工干预的情况下阻止攻击。当攻击达到每秒数十千兆的数据量时,我们的运营团队就会开始监控攻击:应用过滤器并转移流量,以确保被攻击的客户网站保持在线,而我们网络的其他部分不会受到影响。
那么攻击者如何产生65Gbps的流量呢?攻击者极不可能拥有一台具有足够大的Internet连接的计算机,从而单独生成如此多的通信量。产生如此大流量的一种方式是通过僵尸网络。僵尸网络是被病毒入侵的PC的集合,可以由所谓的僵尸网络牧人控制。
僵尸网络牧民通常会出租他们的僵尸网络访问权限,通常以15分钟为单位收费(就像律师一样)。租金取决于僵尸网络的大小。传统上,垃圾邮件发送者在僵尸网络上购买时间,以便发送他们的邮件,使其看起来像是来自大量来源。随着更好的垃圾邮件过滤器的兴起,垃圾邮件的利润变得越来越低,僵尸网络牧民越来越多地将他们的受攻击机器网络出租给想要发动DDoS攻击的攻击者。
要发动65Gbps的攻击,你需要一个僵尸网络,每个僵尸网络至少有6.5万台被攻破的机器,每台机器都能发送1 Mbps的上行数据。考虑到许多受攻击的电脑都在发展中国家,那里的连接速度较慢,而且组成僵尸网络的许多机器可能在任何给定时间都不在线,因此发动攻击所需的僵尸网络的实际大小可能需要至少是这个大小的10倍。虽然这绝不是闻所未闻的,但这是一个大型僵尸网络,利用其所有资源推出DDoS可能会让互联网服务提供商发现许多受攻击的机器,并让它们离线。
由于租用大型僵尸网络可能既昂贵又笨拙,攻击者通常会寻找其他方法来扩大他们的攻击规模。周六的攻击使用了一种名为DNS反射的放大技术。要了解这些功能的工作原理,您需要了解一些有关DNS的工作原理。
当您第一次注册Internet连接时,您的ISP将为您提供递归DNS服务器,也称为DNS解析器。当您点击一个链接时,您的计算机将向您的ISP的DNS解析器发送一个查找。查找是在问一个问题,比如:cloudflare.com的服务器的IP地址是什么?如果您查询的DNS解析器知道答案,因为最近有人已经询问过它,并且答案被缓存,它就会响应。如果没有,它会将请求传递给域的权威DNS。
通常,ISP的DNS解析器设置为只回答来自ISP客户端的请求。不幸的是,有大量配置错误的DNS解析器可以接受来自Internet上任何人的查询。它们被称为开放式解算器,它们是互联网上一种潜在的地雷,一旦被滥用,就会等着引爆。
DNS查询通常通过UDP协议发送。UDP是一种即发即忘协议,这意味着无需握手即可确定数据包所说的来自哪里就是它来自的地方。这意味着,如果你是攻击者,你可以伪造UDP数据包的报头,声称它来自你想要攻击的特定IP,然后将伪造的数据包发送到开放的DNS解析器。DNS解析器将回复对伪造IP地址的响应,并提供对询问的任何问题的答案。
为了放大攻击,攻击者会问一个会引起很大反响的问题。例如,攻击者可能会请求特定区域的所有DNS记录。或者,他们可以请求DNSSEC记录,这些记录通常非常大。由于解析器通常具有相对较高的互联网带宽连接,因此它们可以毫不费力地输出数以吨计的字节。换句话说,攻击者可以发送相对较小的UDP请求,并使用开放解析程序对通信量极大的目标进行回击。
当我们处理这些攻击时,最具讽刺意味的是,我们经常会收到网络所有者的电子邮件,该网络正在运行一个开放的解析程序,要求我们关闭我们的网络正在对他们发起的攻击。他们看到大量以我们的一个IP为来源的UDP数据包进入他们的网络,并认为是我们发起的。事实上,被用来攻击我们的其实是他们的网络。最棒的是,我们可以安全地响应并要求他们阻止来自我们网络的所有DNS请求,因为我们的IP永远不应该向解析器发起DNS请求。这不仅解决了他们的问题,还意味着可以用来定位CloudFlare网络上的站点的开放解析器数量更少了。
已经采取了许多措施来清理当前处于活动状态的开放解析程序。遗憾的是,它的运行速度很慢,许多DNS客户端的默认安装仍然默认处于打开状态。虽然我们积极接触最恶劣的罪犯来保护我们的网络,但要保护互联网,总体上需要齐心协力清理开放的DNS解析器。
在阻止这些攻击方面,CloudFlare使用了许多技术。首先是我们的网络架构。我们使用任播(Anycast),这意味着来自解析器的响应虽然针对一个特定的IP地址,但将命中距离最近的任何数据中心。这本质上会冲淡攻击的影响,将其影响分散到我们所有的23个数据中心。考虑到我们整个网络有成百上千的容量,即使是一次大的攻击也很少会使连接饱和。
在我们的每一个设施中,我们都采取了额外的措施来保护自己。例如,我们知道我们还没有从我们的网络发送任何DNS查询。因此,我们可以安全地过滤来自DNS解析器的响应:在我们的路由器上丢弃来自开放解析器的响应数据包,或者在某些情况下,甚至在我们的带宽提供商的上游丢弃响应数据包。其结果是,这些类型的攻击相对容易缓解。
有趣的是,当受到攻击的客户成为65Gbps流量的目标时,没有一个来自该攻击的数据包进入他们的网络或影响他们的运营。事实上,CloudFlare在客户甚至不知道存在问题的情况下阻止了整个攻击。从网络图可以看出,大约30分钟后攻击者就放弃了。我们认为这很酷,随着我们继续扩大我们的网络,我们将对像这样的攻击变得更有弹性。
攻击模式下的流量DDoS攻击可靠性