浅析DNS反射放大攻击

  • A+
所属分类:安全文章


简介

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

简单对比下正常的DNS查询和攻击者的攻击方式:

正常DNS递归查询

浅析DNS反射放大攻击

DNS放大攻击示例

浅析DNS反射放大攻击


正常DNS查询:

源IP地址 —–DNS查询—-> DNS服务器 —–DNS回复包—-> 源IP地址

DNS攻击:

伪造IP地址 —–DNS查询—-> DNS服务器 —–DNS回复包—-> 伪造的IP地址(攻击目标)


首先,DNS放大攻击,简单解释有两点:

1.伪造源IP为其他人的ip地址

2.被请求的记录,要求比较大,比如TXT格式,4000KB

在A机器上,向DNS发送查询那个TXT的记录,并伪造成别人的ip,即可理解为DNS放大攻击。


可以用python的scapy模拟:

from scapy import *a = IP(dst='10.32.8.11',src='10.32.132.85')     #10.32.132.85即为伪造的源ipb = UDP(dport='53')c = DNS(id=1,qr=0,opcode=0,tc=0,rd=1,qdcount=1,ancount=0,nscount=0,arcount=0)c.qd=DNSQR(qname='www.qq.com',qtype=1,qclass=1)p = a/b/csend(p)

模拟结束。

在10.32.132.85上抓dns的包,就会收到一条DNS响应,是10.32.8.11发来的。


分析

从服务器上抓了一些攻击包,根据这些数据包可以来看看这种攻击都是什么特点。

  • 全部是大量的DNS响应请求(Response请求)

浅析DNS反射放大攻击

  • 通常里面包含一些不存在或者生僻的域名,经过循环查询从而放大DNS流量

浅析DNS反射放大攻击

  • 会将将 OPT RR 字段中的 UDP 报文大小设置为很大的值(如 4096)

浅析DNS反射放大攻击

    通过这样放大了攻击流量。发送的 DNS 查询请求数据包大小一般为 60 字节左右,而查询返回结果的数据包大小通常为 3000 字节以上,因此,使用该方式进行放大攻击能够达到 50 倍以上的放大效果。


  • 大量的流量都来自正常的DNS服务器

   攻击者通过伪造IP向正常的DNS服务器发送这些恶意的查询请求,将流量引入受害者的服务器,受害者查不到攻击者的真实IP


解决方案

  1. 如果没有必要可以关闭DNS服务(废话么不是)

  2. 如果有DNS服务,做好响应限制,DNS服务不应对互联网上的域名解析服务,而只响公司内部网络DNS解析请求

  3. 限制DNS响应数据包大小的阈值,直接丢弃超大的响应数据包


  与老式的“smurf attacks”攻击非常相似,DNS放大攻击使用针对无辜的第三方的欺骗性的数据包来放大通讯量,其目的是耗尽受害者的全部带宽。但是,“smurf attacks”攻击是向一个网络广播地址发送数据包以达到放大通讯的目的。DNS放大攻击不包括广播地址。相反,这种攻击向互联网上的一系列无辜的第三方DNS服务器发送小的和欺骗性的询问信息。这些DNS服务器随后将向表面上是提出查询的那台服务器发回大量的回复,导致通讯量的放大并且最终把攻击目标淹没。因为DNS是以无状态的UDP数据包为基础的,采取这种欺骗方式是司空见惯的。


    如何防御这种大规模攻击呢?首先,保证你拥有足够的带宽承受小规模的洪水般的攻击。一个单一的T1线路对于重要的互联网连接是不够的,因为任何恶意的脚本少年都可以消耗掉你的带宽。如果你的连接不是执行重要任务的,一条T1线路就够了。否则,你就需要更多的带宽以便承受小规模的洪水般的攻击。不过,几乎任何人都无法承受每秒钟数GBDNS放大攻击。

       因此,你要保证手边有能够与你的ISP(互联网服务提供商)随时取得联系的应急电话号码。这样,一旦发生这种攻击,你可以马上与ISP联系,让他们在上游过滤掉这种攻击。要识别这种攻击,你要查看包含DNS回复的大量通讯(UDP端口53),特别是要查看那些拥有大量DNS记录的端口。一些ISP已经在其整个网络上部署了传感器以便检测各种类型的早期大量通讯。这样,你的ISP很可能在你发现这种攻击之前就发现和避免了这种攻击。你要问一下你的ISP否拥有这个能力。

  最后,为了阻止恶意人员使用你的DNS服务器作为一个实施这种DNS放大攻击的代理,你要保证你的可以从外部访问的DNS服务器仅为你自己的网络执行循环查询,不为任何互联网上的地址进行这种查询。大多数主要DNS服务器拥有限制循环查询的能力,因此,它们仅接受某些网络的查询,比如你自己的网络。通过阻止坏蛋利用循环查询装载大型有害的DNS记录,你就可以防止你的DNS服务器成为这个问题的一部分。

     注:这是一个非常好的攻击思路。这些DNS服务器,不分善恶,被动响应,如同愚笨的仆人。

 

解决办法:分段

      让大多数主要DNS服务器拥有限制循环查询的能力,还要同时缩小DNS的服务范围,减少交集。其实对一台主机来讲,能访问的DNS越多,被攻击的就越惨。



参考链接:https://blog.csdn.net/easylife206/article/details/95560965https://blog.csdn.net/force_eagle/article/details/6372574?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.nonecasehttps://www.cnblogs.com/yd1227/archive/2011/01/24/1943412.htmlhttps://blog.csdn.net/weixin_30700099/article/details/99257494?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-8https://blog.csdn.net/Faris_W/article/details/6367883?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-9.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-9.nonecase

本文始发于微信公众号(LemonSec):浅析DNS反射放大攻击

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: