CDN流量放大攻击思路

首先,为了对CDN进行攻击,我们必须清楚CDN的工作原理,这里我们再来简单介绍一下CDN的工作模型。

CDN的全称是Content Delivery Network(内容分发网络),通过在网络各处的加速节点服务器来为网站抵挡恶意流量,把正常流量进行转发。用简单点的话来说,CDN一般有三个作用

1. 跨运营商加速:我们自己的网站常常只属于一个运营商(比如:电信),而加速节点遍布每家运营商,于是和网站不同运营商(比如:联通)的用户访问起来就不会那么慢了。
2. 缓存加速:很多的静态资源以及一部分页面更新都是比较慢的(比如首页),这个时候CDN就会根据浏览器的max-age和last-modified值以及管理员的预设值来进行缓存,于是很多流量CDN节点就不会每次都来向网站请求,CDN节点可以直接自作主张地将命中的缓存内容返回。
3. 恶意流量过滤:这是CDN非常重要的一个作用,也是很多网站会用CDN的原因,因为CDN能为我们抵挡攻击大流量攻击、普通的攻击(比如注入等),只有正常流量才会转发给网站。

这里还要说明几个名词:

源站:我们自己的那个网站就被称为是源站。
反向代理:CDN节点向源站请求数据的方式就叫反向代理,也就是上文所说的转发。
回源:CDN节点向源站请求数据的行为就叫做回源。

0x01 探究之旅



我们在做OpenCDN测试的时候,遇到了一些小问题。发现一个没有人访问的网站居然会有流量,并且有着惊人的访问次数。

我们的OpenCDN有2分钟一次的反向代理检测,但是这次数加起来也就区区的720次,而这400万的访问次数是哪里冒出来的?然后我们查看了日 志,发现单个域名的日志到达了58G之多,而将其打开之后发现X-Forwarded-For字段中(X-Forwarded-For机制是通过一层代理 后记录一个IP,让源站在使用CDN后能够获得真实的访客IP而不是CDN节点IP)充斥着大量有的IP,而且都是本服务器IP。我们瞬间明白了什么,然 后去管理端上验证了一下,果不其然地,我们一不小心把源站IP设成了CDN节点的IP,不过当时我们并没有发现。于是这么大的流量也好解释了,由于2分钟 一次的检测触发CDN节点的回源,而这个站点的源站是CDN节点本身,于是CDN就开始不断自身反向代理死循环,这样一个请求就被无限地放大了。当超时或 者HEADER太大(就是X-Forwarded-For字段导致HEADER溢出)的时候,请求会被丢弃。

把站点的源站IP设为CDN节点本身,能够让CDN节点进行自我的反向代理死循环,然后放大流量。

貌似有点意思,小伙伴们于是马上就行动起来了,进行了实验。

我们在安全宝上成功地将源站IP设置成了某个为我们加速的CDN节点IP,然后在美帝的一台小vps上开webbench用2000个线程去打这个 这个站点(无论是哪个CDN节点收到请求,请求最终都会汇聚到那个无辜的被设源站的CDN节点),不过实验结果并不理想,节点没有宕机,通过IP反查找到 一台和我们公用一个CDN节点的网站,通过这个CDN节点反向代理访问那个网站,出现了卡顿和打不开情况,仅此而已。由于没法采集到安全宝的这个节点的性 能数据,我们也没法对我们的攻击做出评估。而且我们这个实验缺少了一个对照组,到底是因为死循环把流量放大导致CDN节点卡顿,还是这个2000线程本身 就能把CDN节点打卡。

于是我们总结了一下,猜想这种节点反向代理自身的攻击手法可能可以适用于这样的场景

你想要攻击某个CDN节点,但是如果打404页面消耗不了太多,而如果打CDN中的某个站点,因为流量会穿透过去,可能还没有把CDN节点打掉,背后的站点早被穿透死了。这个时候,如果让节点进行自身反向代理死循环,他就会把所有的流量给吃进去,并且没法吐出来,这个时候可以产生一定量的流量杠杆效应,可以使得CDN节点出现异常。

不过话说回来,这种攻击的防御方式也异常简单,只要在设置源站IP的时候,不让设置CDN节点IP就行了,只要在网站前端交互输入的时候加点验证就行了。

我们考虑到我们没法对不是我们的CDN节点的带宽上限,性能上限有个很好的评估,黑盒式的摸索可能带来不了什么,于是我们拿我们自己的CDN节点开刀。

同时我们继续对这个思路进行探索。我们发现,既然一个节点能死循环,那两个节点怎么样?结果是肯定的,并且产生了质的变化。我们假设了这样的一个场景

我们的opencdn.cc在甲CDN服务商注册服务,并且在乙CDN服务商注册服务,然后我们得到甲CDN服务商的一个CDN加速节点1.1.1.1,然后又得到乙CDN服务商的一个CDN加速节点2.2.2.2。 然后聪明的你一定已经猜到了。我们把在甲CDN服务商设置源站为乙的加速节点2.2.2.2,在乙CDN服务商设置源站为甲的加速节点1.1.1.1,然后甲会问乙去索取源站,乙又来问甲索取源站,于是1.1.1.1和2.2.2.2就很开心地并且不停地交流了起来~

于是我们也进行了实验。这次我们采用POST包进行测试。

用POST包的原因有两个

1.CDN节点是会有缓存机制的,刚刚你请求的地址命中缓存,那么就直接返回,不会成为死循环了,而POST包则有一个很好的特性,绝对回源,一点也不含糊。
2.POST包可以扩大体积,在同等连接数的情况下让效应更加明显。

我们本次测试发送500个POST包,每个体积大概为10k左右。然后总共发送的流量为5M。

然后让我们来看下两个节点的反应

不过似乎到了带宽上限。因为我们手中的机器毕竟也不是很给力。

然后让我们来看下这500个POST包产生的效果

58.215.139.124
RX bytes:5473847154 (5.0 GiB) TX bytes:17106340685 (15.9 GiB)
RX bytes:6014294496 (5.6 GiB) TX bytes:17717990777 (16.5 GiB)
流入 540447342(515MB) 流出 611650092(583MB)
112.65.231.233
RX bytes:5583125549 (5.1 GiB) TX bytes:5022744608 (4.6 GiB)
RX bytes:6133578284 (5.7 GiB) TX bytes:5649798353 (5.2 GiB)
流入 550452735(524MB) 流出 627053745(598MB)

我们拿最小的进行测算吧,大概把流量扩大了100倍左右,然后如果把流入流出加起来就是扩大了200倍左右。

这一种攻击方式和前一种相比有两个优点

1.CDN服务商不能把源站IP做限制来防御,因为他无法知道别家的CDN节点IP。
2.能借刀杀人,可以用一家CDN服务商的CDN节点来打另外一家CDN服务商。

然后我们还进行了一些联想,一个站点可以把两个节点陷入死循环,如果把更多的节点来进来呢?

我们可以这样。让多个CDN节点和一个CDN节点死循环,把中间的CDN节点带宽耗尽。

我们还可以这样。让三个CDN节点死循环,如果有做流量上的流入流出探测限制,这样能保证流入流出不为一个IP。

毕竟在CDN服务商添加一个域名的代价是很小的(免费),我们可以用一个一个域名将节点串起来,然后啪一下开始流量死循环震荡。

好了,让我们用四个字总结一下这次的漏洞的特点:借力打力。

0x02 防御方法



那么如何来防御这种以及可能演化出来的攻击呢?

1. 禁止把源站IP设为CDN节点本身(这是必须的)。
2. 限制每个站点的带宽。
3. 对请求超时的源站做一定限制。
4. 通过X-Forwarded-For来进行限制,超过多少层自动丢弃。

以及CDN节点已经存在的一系列的软硬防都可以让一部分的攻击流量无法成型,自然也无法形成死循环震荡。

本文仅为一种CDN流量放大攻击的思路,只是做过一些小规模的实验,也欢迎大牛们进行验证。如有不足之处或者逻辑上的错误还请提出,谢谢您的阅读。

by OpenCDN成员 囧思八千 Twwy.net

时间: 2024-10-26 23:47:34

CDN流量放大攻击思路的相关文章

DNS反射放大攻击分析——DNS反射放大攻击主要是利用DNS回复包比请求包大的特点,放大流量,伪造请求包的源IP地址为受害者IP,将应答包的流量引入受害的服务器

DNS反射放大攻击分析 摘自:http://www.shaojike.com/2016/08/19/DNS%E6%94%BE%E5%A4%A7%E6%94%BB%E5%87%BB%E7%AE%80%E5%8D%95%E5%88%86%E6%9E%90/ 简介 DNS反射放大攻击主要是利用DNS回复包比请求包大的特点,放大流量,伪造请求包的源IP地址为受害者IP,将应答包的流量引入受害的服务器. 简单对比下正常的DNS查询和攻击者的攻击方式: 正常DNS查询:源IP地址 -–DNS查询--> DN

使用bind新功能rate-limit防止DNS放大攻击和流量攻击

目前好多做DNS解析的服务,都采用了bind开源软件.好处就不多说了.但是在安全方面是个软肋,遭受DDOS流量攻击和放大攻击是常有的事情.在14年12月isc发布了最新的bind9.10-p1稳定版,同时对rate-limit默认支持(之前bind9.9的扩展支持版本,同样支持处于开发功能,需要在编译安装的时候./configure --enable-rrl开启rate-limit功能).rate-limit可以有效防止放大攻击和DDOS流量攻击. DDOS流量攻击就不多说了,关于放大攻击原理,

TFTP反射放大攻击浅析

0x00 前言 经由@杀戮提示,让我看看softpedia上的这篇报道,咱就来研究一下文中的使用TFTP(Trivial File Transfer Protocol,简单文件传输协议)进行反射型DDOS攻击.在报道的最后提到了Evaluation of TFTP DDoS amplification attack这篇论文,论文还是比较学术派和严谨的,其中使用GNS3和虚拟机搭建模拟环境,尽量严格控制相关变量与不变量,对TFTPD32,SolarWinds,OpenTFTP三种TFTP服务器进行

运营商流量劫持攻击之链路劫持剖析

运营商流量劫持攻击之链路劫持剖析 0x00 前言 链路劫持属于流量劫持攻击的一种,在电商领域较为常见,网络上也有不少案例.本文作者将会结合公司实际发生的案例来简要剖析链路劫持有关技术.由于作者水平有限,见解浅显在所难免,望大牛勿喷,如有描述不当之处望各路看官批评指正. 0x01 劫持案例分析 案例现象描述: 有用户反馈访问公司部分业务的URL时被重定向至公司其他业务的URL,导致用户无法请求所需的服务,严重影响了用户体验以及用户利益.我们第一时间通过远控的方式复现了上述现象,并及时抓取了相关数据

ntp服务器被反射放大攻击的处理方法

前言: 首先说明下什么是反射放到攻击? NTP是用UDP传输的,所以可以伪造源地址.NTP协议中有一类查询指令,用短小的指令即可令服务器返回很长的信息.放大攻击就是基于这类指令的.比如,小明以吴一帆的名义问李雷"我们班有哪些人?" 李雷就回答吴一帆说"有谁谁谁和谁谁谁--"(几百字)那么小明就以8个字的成本,令吴一帆收到了几百字的信息,所以叫做放大攻击.网络上一般NTP服务器都有很大的带宽,攻击者可能只需要1Mbps的上传带宽欺骗NTP服务器,即可给目标服务器带来几

《转》DNS放大攻击

原文链接:http://blog.sina.com.cn/s/blog_90bb1f200101iazl.html 放大攻击(也称为杠杆攻击,英文名字DNS Amplification Attack),利用回复包比请求包大的特点(放大流量),伪造请求包的源IP地址,将应答包引向被攻击的目标.对于DNS服务器来说,只需要抛弃不是自己发出去的请求包的应答包即可.从测试角度来说,向被测试服务器,发送大量的回复包,看是否被丢弃,同时观察此时的CPU利用率是否有急剧的上升即可. 当前许多DNS服务器支持E

NTP反射放大攻击分析

前一阵子NTP放大攻击挺活跃的,现在来简单分析一下. 攻击原理: 1.  利用UDP协议的天然脆弱点,即不需要前期建立连接,直接就可以向client发送数据: 2.  Internet上存在大量开放分布式的NTPServer,进行对同步请求的响应. 3.  比DNS反射放大攻击威力更大的区别是NTP特有的一个Monlist功能,(Monlist指令,可以获取与目标NTP Server进行过同步的最后600个客户机IP.这意味着,一个很小的请求包,就能获取到大量的活动IP地址组成的连续UDP包).

CC攻击原理与kangle预防CC攻击思路

CC攻击的基本原理 CC攻击利用*代*理*服务器向网站发送大量需要较长计算时间的URL请求,如数据库查询等,导致服务器进行大量计算而很快达到自身的处理能力而形成DOS.而攻击者一旦发送请求给*代*理*后就主动断开连接,因为*代*理*并不因为客户端这边连接的断开就不去连接目标服务器.因此攻击机的资源消耗相对很小,而从目标服务器看来,来自*代*理*的请求都是合法的. 以前防CC攻击的方法 为防范CC,以前的方法一个是限制每个IP的连接数,这在地址范围很广阔的情况下比较难实现:二是限制*代*理*的访问

云计算DDos风波:大流量云端攻击

大流量攻击呈现增长趋势,过百G的攻击越来越多 近年,美国联邦通信委员会(FCC)CC对宽带重新定义,下行速度从 4Mbps 调整至 25Mbps,上行速度从 1Mbps 调整至3Mbps.全球的互联网用户2008-2012共4年的年平均增长率高达12%,2013互联网用户数比例已经超过人口的37.96%,预期在2015年用户数量可以超过30亿. 十二五以来,国内随着"宽带中国"战略实施方案的推进,城市和农村家庭宽带接入能力逐步达到20兆比特每秒(Mbps)和4Mbps,部分发达城市达到