在上个系列《你的 DNS 服务真的安全么?》里我们介绍了 DNS 服务器常见的攻击场景,看完后,你是否对 ddos 攻击忧心重重?本节我们来告诉你,怎么破局!!
首先回顾一下 DDoS 攻击的原理。DDoS 是 Distributed Denial of Service 的简称,即分布式拒绝服务攻击,其利用处于不同位置的足够数量的僵尸主机产生数目巨大的数据包对一个或多个目标实施 DoS 攻击,耗尽受害端的网络带宽、系统资源,使受害主机或网络丧失提供正常网络服务的能力。
【传统网络对 DDoS 攻击的防御】
那传统网络是怎么对 DDoS 攻击进行安全防御的呢?简单来讲,传统安全技术的防护手段,通常是代替 server 端来响应 client 发过来的请求,并通过 client 的下一步动作有无跟进继续请求,来判断该请求是否来自真实用户。因为如果是肉鸡发起的攻击行为,通常不会再有下一步的动作被匹配到。而如果某个特定的 client IP 一旦被认定为是真实请求的 IP,则该 IP 会被放入对应的“白名单池”,后续一段时间内,当该 IP 继续请求时,便会被认为是合法的。可参考如下示意图:
这只是一个简单的原理模拟图,有些在策略上可能不一定适用黑白名单 IP list。
【传统权威 DNS 服务器对 DDoS 的防御手段】
知道了 DDoS 的常用防御手段,我们再来说说,对于传统的权威 DNS 服务器,是怎么防护 DDoS 攻击的。对于权威 DNS 而言,默认的请求都是基于 UDP,而且 DNS 协议里面明确说明了 DNS 服务器可以限制为 TCP 提供的资源,所以权威 DNS 的 DDoS 攻击防御最重要的是如何防住 UDP 攻击。但是 UDP DDoS 防御的最大的问题莫过于 UDP 没有会话,不能通过包的交互来判断某个请求是否为攻击行为,仅仅查看某个 DNS 数据报文是不可能区分是否为攻击请求或者真实用户请求的。因此传统安全技术首要地工作就在于需要将缺乏会话交互的 UDP 一来一回请求转换成为具有会话记录的 UDP 多来多回请求,它们会利用 DNS 协议的特点采用如下技术进行防御:
1、CNAME 重传
利用 DNS 的特性,递归请求具有迭代查询一直到获取最终结果的特点,直接代替 DNSserver 给 client 返回一个伪造的唯一随机字符串 cname 域名,并根据该源 IP 是否继续发起针对该 cname 域名的请求来判定,该 IP 是否为正常请求。很显然,如果某个 IP 马上跟进发起了该 cname 域名的请求,则该 IP 是可被信任的;相对地,如果某个 IP 在规定的超时时间内并没有发起针对该 cname 域名的请求,则该 IP 将被判定为攻击者
2、TC 重传
利用 DNS 的特性,在 DNS 请求 client 遇到 DNS 应答 flag 字段中 TC 标记为 1 时必然会发起 TCP DNS 请求的特点,直接代替 DNS server 给 client 返回一个伪造的空应答但该应答 flag 字段中 TC 标记为 1,并根据该源 IP 是否继续发起针对该域名的 TCP 的 DNS 请求来判定,该 IP 是否为正常请求。很显然,如果某个 IP 马上跟进发起了 TCP 的 DNS 请求,则该 IP 是可被信任的;相对地,如果某个 IP 在规定的超时时间内并没有发起针对的 TCP 请求,则该 IP 将被判定为攻击者。
3、首包丢弃
利用 DNS 的特性,在 DNS 请求 client 在超时时间内没有收到 DNS 应答时会重发该请求的特点,传统安全直接丢弃该首包请求,并根据该源 IP 是否继续发起针对这个域名的第二次请求来判定,该 IP 是否为正常请求。很显然,如果某个 IP 针对性地发起了第二次请求,则该 IP 是可被信任的;相对地,如果某个 IP 在规定的超时时间内并没有发起第二次请求,则该 IP 将被判定为攻击者。
由以上信息我们可以知道,这三种手段其原理都是通过将原来的 DNS 的 UDP 一来一回请求转换成为具有会话记录的 UDP 多来多回请求,并通过判断第二次请求的特点来判定该源 IP 是否为真实用户访问行为或者攻击行为,并随之进行对应的白名单 / 黑名单操作。
【传统方案在权威 DNS 防护中存在的问题】
以上的传统方案是不是就能完全保护我们的权威 DNS 了呢?其实还是存在一些防护的问题。以下我们总结了权威 DNS 防护可能遇到的问题:
1、首先从首包丢弃来讲,这是在权威 DNS 防御中基本没有被采用的技术,原因主要是递归 DNS 在遇到权威查询请求被丢弃时会根据 SRTT 算法另外选择其他的权威服务器,导致传统安全基本上无法收到所谓的“第二次请求”,因此误杀的概率极高。同时权威丢弃递归发过来的查询,会对递归服务器的资源占用造成严重影响,这种情况下递归服务器可能会根据自身保护的策略直接丢弃该域名的正常请求,有可能造成更严重的故障。
2、其次是 TC 重传,相对于 CNAME 重传的策略,TC 重传主要的好处在于并没有从数据内容信息上去进行篡改,并没有“伪造”对应的应答;而重大的缺陷在于需要安全服务 DNSserver 端支持 TCP 的请求,这个在性能上是非常大的考验,带来的被打瘫的风险反而会进一步加大。另外,有一部分 ISP 的 LocalDNS 根本不支持 TCP 也是一个重要的问题。
3、再来谈 CNAME 重传,前文提到了 CNAME 重传最大的问题在于“伪造”了一个虚构的应答,正常流程中这个“伪造”的应答只起到中间传递的结果不会有其他方面的影响,但是现实情况中,ISP 侧的各种“缓存递归分离”“缓存加速应答”技术都会对正常的流程进行篡改,导致前面提到的这个“伪造”的结果被当成正确的结果直接回给终端用户;更要命地是,ISP 侧的 DNS 各种“优化 TTL”的技术还会把这种问题严重放大,最终导致严重的故障。
针对这种问题,最终我们可能看见类似的错误结果:
总结,通过上面针对性的描述,我们大概知道了这些方法用在 DNS 上都有或多或少的问题。当然,其实还包括一些安全集群 DNS 会话状态数据一致性、互联网原生丢包带来的黑白名单误杀、伪造 IP 攻击影响真实 IP 带来的误杀等各种情况下的误杀,这部分误杀带来的影响也不可小视。
【权威 DNS 攻击的防护重点】
说了这么多,权威 DNS 究竟如何防?说真的,DNS 系统本身的优异性能非常关键。打铁还需自身硬,还是建议选择一款性能优异的服务器作为权威的 DNS 服务器。从原理上来讲,传统安全把缺乏会话交互的 UDP 一来一回请求转换成为具有会话记录的 UDP 多来多回的策略比起单纯的回复一个 DNS 应答更耗费计算资源。比如在同样的性能条件资源下,回复一个所谓的“cname 应答”或者“tc 应答”,还不如直接回复原生的 DNS 应答,粗略比较下来两者之间耗费 CPU 指令集并没有什么差别。当然前提最重要的是 DNS 系统要有卓越的性能,超大的带宽,有能力媲美安全服务器甚至优于安全服务器。阿里云解析 DNS 具备单机千万级 QPS,遍布全球的超大规模集群,具备 anycast 的架构、依托阿里巴巴大容量、稳定的基础网络,能够轻松抵抗过亿级的 DDoS 攻击。阿里云解析 DNS 绝对值得你的信赖。(–> 云解析详情页)
本文作者:kimi_nyn
原文链接
本文为云栖社区原创内容,未经允许不得转载。