淘宝后台开发中总结的一些DNS攻击防御经验

谈谈安全防御领域DNS攻击防御中的一些策略及弊端,以及解决办法。

一、网络安全定义

传统意义的网络安全,是指具有高性能、利用技术手段区分攻击流量和正常业务流量,清洗过滤攻击流量的安全措施。常见的如安全厂家的专业服务器设备,思科的Guard,以及阿里大名鼎鼎的aliguard等。这些方法的共性就是利用会话技术识别某个请求是否是真实的用户请求。实现方式为使用网关或反向代理代替server响应client的请求,并通过client的下一步动作有无跟进继续请求来判断请求是否有效。通常情况下如果是肉鸡发起的攻击行为,一般不会有下一步的动作被匹配到。而如果某个特定的client IP(从服务端视角来说是全局IP,不考虑NAT映射)被判定为真实用户IP,那么该IP会放入白名单(也可针对特定IP设置黑名单过滤),后续一段时间内该IP继续请求时直接判定合法。

         

                 

二、UDP DNS的问题及相应安全方案

与DNS相关的攻击主要有DDOS攻击和放大攻击(DNS劫持本文不讨论),对DNS而言最大的问题在于UDP没有连接会话的概念,数据包的交互是无状态的,因此不能通过交互来判断某个请求是否为攻击行为。因此传统安全技术的一个重要工作就在于将缺乏会话交互的UDP无状态请求转换为有状态的会话请求,并根据第二次请求(如果没有第二次请求,那么超时后判定为非法攻击)的数据包来判定客户端IP是否为真实请求。通常会采用下面几种技术:

1、cname重传

根据DNS迭代查询一直到获取最终结果的特点,网关给client返回一个伪造的唯一随机字符串cnema域名,并根据client源IP是否继续针对该cname域名发起请求来判断该client是否为正常请求。如果为攻击者,则在规定超时时间内基本不会发起针对该cname域名的请求。

2、TC重传

DNS协议实现中client遇到DNS应答的flag字段携带TC标记时会发起TCP DNS请求(注:比如443端口,在tcp和udp都是预留给dns协议),利用该特点,网关给client返回一个伪造空应答,该应答的flag字段TC标记为1,然后查看该client是否针对同样域名发起TCP的DNS请求来判断该客户端IP是否为正常请求。

3、首包丢弃

大部分协议都设置了超时重传特性,网关可以直接丢弃首包请求,根据客户端IP是否会继续请求来判定是否为正常请求。

三、存在的问题

1、cname重传伪造一个虚构应答,正常交互流程中该应答只起到中间传递的作用,对dns处理结果不会有影响。但是由于运营商实际部署中存在的“缓存递归分离”、“缓存加速应答”等缓存技术都会对dns交互流程进行修改,导致伪造的cname域名被当成正确的结果直接返回给终端用户;另外运营商的TTL优化技术也会放大这种影响,导致出现严重故障。最终我们可能看到下面这种结果:

2、相对于cname重传策略,TC重传不会对交互数据进行修改。然而发起TCP DNS请求需要安全服务与DNS server支持TCP请求,在性能上是个挑战,随之带来的被打瘫痪的风险反而增大。除此之外,某些运营商的localdns不支持TCP DNS,这种场景在客户端调试中会出现很多坑。

3、DNS防御一般不会采用首包丢弃的方法,原因是递归DNS查询在遇到权威查询请求被丢弃时,会根据SRTT算法来选择其他的权威服务器,导致安全网关基本无法收到需要的第二次请求,因此误判概率很大。此外权威服务器丢弃请求会对递归服务器资源占用造成比较严重的浪费,此外这种情况下递归服务器可能会根据自身保护算法策略直接丢弃该域名的正常请求,造成更严重的故障。

除此之外,安全集群DNS的会话一致性、运营商互联网环境原生丢包导致的黑白名单误判、伪造IP影响真实IP导致的误杀等等也会影响正常业务。

四、解决方案

防御DNS攻击真正有效的方法只有两个:

1、报警

一般能控制大量肉鸡执行攻击的基本是成规模的黑产,这种情况已经满足立案标准了。而且对于淘宝域名的攻击,淘宝基本会配合西溪派出所打击黑产,净化互联网环境。

2、硬扛

理论上而言,传统安全防护将UDP转换为有状态会话的策略比单纯回复一个DNS应答更耗费计算资源。比如在服务器性能相同的场景下,回复一个cname应答或者tc应答,与直接回复原生DNS应答,两者耗费的CPU指令集并没什么差别,当然前提是DNS服务器系统性能达标,有能力对标安全服务器性能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值