最基本的原理是二分法,当你ip足够多时,检测出那个域名正在被攻击不是很难。
CDN 厂商一般有很多个节点,分布在全球/全国各地,如果是攻击源很分散(如肉鸡),则由于智能调度的存在,这些攻击流量会被分散到各个节点,导致攻击效果会差很多,所以这种不在这里讨论。这种其实cdn最喜欢了,像cloudflare也是使用anycast等将攻击流量分散到全球节点,这样防御能力就相当于将各个节点的带宽加起来。
另外,有个基础,检测某个目的IP(CDN的ip)的流量大小是很简单的。
先以国内的为例,国内的CDN就比较苦逼,anycast实施起来很贵,只能使用unicast,这样,智能调度只能在dns解析上做文章了。比如电信的用户调度到电信的节点,河南的调度到河南的节点。
先来分析一个简单的攻击例子,比如你有一个20G的攻击带宽,syn/udp flood 某个域名时,可能你的攻击目标会集中到少数几个(如2个,记为ip1,ip2)。
这样,我们来看下,如果我是cdn我会怎么做:
0. 上面说了,CDN检测到了自己的这两个ip流量异常是很easy的。
1. 这两个ip上的域名是‘嫌疑人’,但是可能多达N个。
2. 那我们就将这N个二分,分到2个新的ip上,ip3, ip4,这样ip3, ip4 各有N/2个域名。
3. 如果攻击不会跟随dns解析,即攻击还傻傻打ip1,ip2,那我大不了放弃这两个ip,或者将其引入黑洞。(此时找不出谁被打)
4. 如果攻击跟随dns解析,那么好玩的来了,或者打ip3, 或者打ip4(注意,我们先只考虑同一时间只有一个域名)
5. 假设打ip3, 我们就继续二分,将N/2 个域名解析到ip5,ip6,这也ip5,ip6上只有N/4个域名。
6. 以此下去,就可以找到是哪个倒霉鬼被打。
7. 当逻辑梳理清楚,其实这些都是可以自动化的。
cloudflare 使用了anycast,如果定位到某个ip被攻击,很方便的可以将此ip的流量分散到全球节点,或者放到黑洞类的设备。
上面只是简单的原理说明,大家可以自己想下更复杂的场景:
1. 多个域名同时被打怎么办。
2. 攻击不跟随,把ip1,ip2 所在机房打卦怎么办。
3. cdn 应该怎么把客户分配到不同的ip上去
4. 国内没有anycast,即每个节点都是独立作战,这时候该怎么办。
这里补充一下,在很多云CDN厂商,很多情况下他也同时是被攻击网站的DNS服务者。在被攻击的时候,利用同时针对DNS的分析也能找到一些蛛丝马迹。如果不通过DNS解析的,说明并不是针对某一站点,通常就当作是针对节点进行攻击进行防御就OK了,这些攻击不会计入到单个站点的流量中。
至于协议层攻击,对于国外厂商,anycast的作用下,让他们其实不care究竟是哪个域名带来的。如何防御才是第一位的。在这个时候,屏蔽攻击来源更容易实现。
而对于国内厂商,没有anycast让他们没法发挥最大防御能力,因此才会经常用到二分法之类的方式,定位攻击站点,在实在无法防御的大型攻击情况下,才会剔除他来保其他。
顺带说下,绝大多数云CDN厂商在控制面板里显示的攻击流量,都单纯的是应用层攻击流量(CC+web攻击)。
评论(0)