DNS攻击,QQ:1604769

安全咨询 0 77

基于主机耗尽型的dns查询拒绝服务攻击(DNS query Flooding)

攻击方法

攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络上根本不存在的域名,被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层DNS服务器递归查询域名信息。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。

通常攻击者采用的手段包括:


1.利用发包程序向DNS服务器发送不带任何负载的NULL数据包。由于数据包本身不符合协议规定,服务器在收到报文的时候将直接丢弃。因此这种攻击方式除非攻击流量比较大,否则不会有明显的效果。

2.利用程序构造DNS解析请求固定的域名,由于DNS服务器在解析请求的时候会在系统cache存放上一次解析的结果,这种攻击方式也需要较大的流量。

3.向DNS服务器发起解析请求随机的、不存在的域名;这样DNS服务器就需要进行频繁的字符串匹配,由于在本地无法查到对应的结果,服务器必须使用递归查询向上层域名服务器提交解析请求,引起连锁反应。 目前尚没有防火墙能对DNS服务器的攻击进行防护,只有少数的专业防护设备可以做到。


20210612212701566.png

防御策略

1.在UDP Flood的基础上对 UDP DNS Query Flood 攻击进行防护

2.根据域名 IP 自学习结果主动回应,减轻服务器负载(使用 DNS Cache)

3.对突然发起大量频度较低的域名解析请求的源 IP 地址进行带宽限制

4.在攻击发生时降低很少发起域名解析请求的源 IP 地址的优先级

5.限制每个源 IP 地址每秒的域名解析请求次数


基于宽带耗尽型的DNS反弹式拒绝服务攻击(DNS reflector attacks,又称DNS amplification attacks)

攻击方法

此DDoS攻击是基于反射的体积分布式拒绝服务(DDoS)攻击,其中攻击者利用开放式DNS解析器的功能,以便使用更大量的流量压倒目标服务器或网络,从而呈现服务器和它周围的基础设施无法进入。


所有放大攻击都利用了攻击者和目标Web资源之间的带宽消耗差异。当在许多请求中放大成本差异时,由此产生的流量可能会破坏网络基础设施。通过发送导致大量响应的小查询,恶意用户可以从更少的内容获得更多。由具有在每个机器人这个倍数乘以僵尸网络进行类似的请求,攻击者是从检测既混淆和收获大大提高了攻击流量的好处。


DNS放大攻击中的一个机器人可以被认为是一个恶意的少年打电话给餐馆并说“我将拥有一切,请给我回电话并告诉我整个订单。”当餐厅要求时一个回叫号码,给出的号码是目标受害者的电话号码。然后,目标接收来自餐馆的电话,其中包含许多他们未请求的信息。

由于每个机器人都要求使用欺骗性IP地址打开DNS解析器,该IP地址已更改为目标受害者的真实源IP地址,然后目标会从DNS解析器接收响应。为了创建大量流量,攻击者以尽可能从DNS解析器生成响应的方式构造请求。结果,目标接收到攻击者初始流量的放大,并且他们的网络被虚假流量阻塞,导致拒绝服务。

20210612222048729.jpg

防御策略

对于运营网站或服务的个人或公司,缓解选项是有限的。这是因为个人的服务器虽然可能是目标,但却不会感受到体积攻击的主要影响。由于产生了大量流量,服务器周围的基础设施会产生影响。Internet服务提供商(ISP)或其他上游基础架构提供商可能无法处理传入流量而不会变得不堪重负。因此,ISP可能将所有流量黑洞到目标受害者的IP地址,保护自己并使目标站点脱机。除Cloudflare DDoS保护等非现场保护服务外,缓解策略主要是预防性互联网基础设施解决方案。

减少打开DNS解析器的总数

DNS放大攻击的一个重要组成部分是访问开放式DNS解析器。通过将配置不当的DNS解析器暴露给Internet,攻击者需要做的就是利用DNS解析器来发现它。理想情况下,DNS解析器应仅向源自受信任域的设备提供其服务。在基于反射的攻击的情况下,开放的DNS解析器将响应来自Internet上任何地方的查询,从而允许利用漏洞。限制DNS解析器以使其仅响应来自可信源的查询使得服务器成为任何类型的放大攻击的不良工具。

源IP验证 - 停止欺骗数据包离开网络

由于攻击者僵尸网络发送的UDP请求必须具有欺骗受害者IP地址的源IP地址,因此降低基于UDP的放大攻击有效性的关键组件是Internet服务提供商(ISP)拒绝任何内部流量欺骗的IP地址。如果从网络内部发送一个数据包,其源地址使其看起来像是在网络外部发起的,那么它可能是一个欺骗性数据包,可以被丢弃。Cloudflare强烈建议所有提供商实施入口过滤,有时会联系那些不知不觉地参与DDoS攻击并帮助他们实现漏洞的ISP。


劫持dns服务器地址

这种情况一般不会发生,不过当几个小的漏洞结合在一起的时候就成为了大的漏洞。比如之前出现过的路由器劫持事件:

漏洞本身依赖3个部分:

tp-link路由器发现存在csrf漏洞。

有些用户的路由器没有更改用户名和密码,使用了默认的用户名和密码;或者浏览器记录了路由器的登录状态。

firefox和chrome等浏览器支持Http Authentication。

这些结合在一起就导致了这么一个攻击流程:

恶意人员构造了一个恶意的web页面,如www.foo.com/text.html,页面的功能是自动登录路由器并修改dns地址。

恶意人员构造一个url发送给被害者,当被害者点击这个链接的时候就访问了恶意页面,就修改了路由器的dns地址。


接着恶意人员可以将你想要访问的网站域名解析到任意其他的地址如1.1.1.1等

传统的DNS缓存投毒攻击

由于DNS 采用UDP 协议传输查询和应答数据包,属于简单信任机制。对接收到的应答数据包仅进行原查询包IP 地址、端口和随机查询ID 的确认,而不会对数据包的合法性做任何分析。如果若匹配,则接受其作为正确应答数据包,继续DNS 解析过程,并丢弃后续到达的所有应答数据包。这就使得攻击者可以仿冒权威名字服务器向缓存DNS 服务器发送伪造应答包,力争抢先完成应答以污染DNS 缓存。

如果攻击者发送的伪造应答包在权威DNS发送的正确应答包之前到达缓存DNS 服务器,并与原查询包IP 地址、端口和随机查询ID 相匹配,就能够成功污染DNS 缓存。

例如,攻击者伪造上面的test.com权威应答内容,将www.test.com的A记录修改成一个非法的IP地址比如1.1.1.1,且伪造权威DNS的IP地址、端口号以及查询ID提前一步应答给本地缓存DNS,那么本地缓存DNS就会将此内容视为合法,并缓存到本地然后应答给客户端。即使后来真正的应答到了本地缓存DNS,那也没办法再改变。


如何实现响应伪造

为了伪造DNS响应,攻击者需要知道:

目标域名的IP地址和真实的权威服务器

公开信息,容易获取

权威域名服务器的端口

53

请求的问题

目标域名

请求源端口

TxID

如何获取源端口和TxID信息?

传统DNS服务使用1个端口,并且TxID是递增的。

攻击者可以向目标DNS请求其控制的域名,从而获取源端口,并分析和预测TxID。


响应伪造的挑战

攻击必须是在目标域名服务器发出解析请求之后,并且请求域名必须是没有缓存的。

攻击者必须正确推断出响应接收端口和TxID

攻击者必须比正当响应先到达,否则域名服务器会缓存正确域名地址,直至缓存超时才能再次攻击。


缺陷

根据DNS的工作原理可知:被攻击的域名只有在本地缓存DNS中没有缓存,那么才有可能攻击成功。本地缓存DNS中已经存在该域名的缓存,那么攻击者只能等到该域名缓存的生存时间(TTL)过期后再组织下一次攻击。这样的攻击效率和命中率是比较低的。


kaminsky缓存投毒攻击

Kaminsky缓存投毒攻击克服了传统DNS 缓存投毒攻击存在的攻击所需时间长、成功率很低的缺陷。其攻击原理如下:

(1)攻击者向被攻击的本地缓存DNS发送一个域名的DNS 查询请求,该查询请求中的域名主机使用随机序列和目标域名的组合。

例如www123456.test.com,其中ns2.test.com为目标域名,www123456是随机生成的。很显然,这个查询的域名主机记录在test.com的权威DNS中是不存在的。正常test.com的权威DNS要返回NXDOMIAN(代表域名不存在)。换句话说就是本地缓存DNS中肯定没有www123456.test.com的缓存记录,本地缓存DNS接收到这个域名查询请求后肯定是要出去迭代请求的。


(2)攻击者伪造test.com的权威DNS应答数据包中,应答资源记录部分与正确应答包中部分是与正常结果一样的,比如test.com的DNS的IP地址、UDP端口号、应答结果是NXDOMAIN。

但是,在应答报文中的授权资源记录部分,攻击者伪造一个test.com的NS记录为ns2.test.com,且该记录对应的A记录IP是2.2.2.2(可能是一个钓鱼网站的IP)。那么该资源记录信息将也被写入本地缓存DNS的Cache 中,在Cache 保持时间内,对test.com名字服务器所管辖的所有域名的查询都将被发送到攻击者自己控制的IP(2.2.2.2)中。


优势

传统DNS 缓存投毒攻击中,存在攻击所需时间长、攻击成功率低的问题,而Kaminsky 攻击克服了这一缺陷。因为Kaminsky 攻击中,每次查询都会在目标域名上添加随机序列,这使得在被攻击的本地缓存DNS的 Cache 中根本就不存在各个临时构造域名主机的记录,因此若攻击不成功,则立即更换随机序列连续不断地进行攻击,不存在有效攻击时间的问题进而提升了攻击成功率。

传统DNS 缓存投毒攻击成功后,只是污染了该与权威区中的某个域名,而Kaminsky 攻击成功后,污染的是本地缓存DNS Cache中一个域名主机的NS记录(即该域名的权威主机记录),之后对该名字服务器管辖的所有域名主机的查询都将被发送到攻击者控制的IP 地址中,破坏力度远高于传统缓存投毒攻击。


防护策略

(1)作为权威域名的负责方,要尽量的部署多台权威DNS,比如一主多备。这样能有效的防止自己域名被投毒。

例如,test.com区,本来只有一个DNS服务器,NS为dns.test.com,对应的IP为1.1.1.1。那么攻击者伪造源IP回包的时候只需要伪造这一个IP应答给本地缓存DNS就可以了,因为本地缓存DNS肯定是向1.1.1.1发起了迭代请求。但如果有多台权威DNS,那么这个攻击的成功率就会降低,攻击的时间就会变长。因为,本地缓存DNS可能是向5.5.5.5发了www123456.test.com的域名解析请求。攻击者回的包可能回的是3.3.3.3,就算是伪造5.5.5.5回的包,那么可能已经在真正应答之后了。


(2)在选择DNS软件时要尽量选择DNS ”源端口随机性”较好的软件或者版本。

例如,现在应用比较广泛的开源Bind软件,在比较早期的版本中,源端口的随机性并不是很好。微软windows serve中的DNS软件做“本地缓存DNS”更是不太合适,因为无论从源端口随机性、解析性能等等诸多方面都不健壮。但它也有自身的有点,例如与AD域的配合等方面。


(3)在现有的DNS基础上绑定新的安全机制,比如部署DNSSEC或者增加新的安全认证协议。



也许您对下面的内容还感兴趣:

留言0

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。