DNS攻击详解

目录

  • DNS概念
    • 什么是DNS
    • 因特网的域名结构
    • DNS域名服务器
    • DNS记录
      • DNS记录类型
  • DNS攻击
    • DDOS攻击
      • 基于主机耗尽型的dns查询拒绝服务攻击(DNS query Flooding)
        • 攻击方法
        • 防御策略
      • 基于宽带耗尽型的DNS反弹式拒绝服务攻击(DNS reflector attacks,又称DNS amplification attacks)
        • 攻击方法
        • 防御策略
    • 会话劫持
      • 劫持dns服务器地址
      • hosts文件被修改
      • DNS服务器缓存中的映射关系被修改,又称缓存投毒攻击
        • 传统的DNS缓存投毒攻击
          • 如何实现响应伪造
          • 响应伪造的挑战
          • 缺陷
        • kaminsky缓存投毒攻击
          • 优势
          • 防护策略

DNS概念

什么是DNS

域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便千人们使用 的机器名字转换为1P地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名“ 呢?这是因为在这种因特网的命名系统中使用了许多的“域"(domain), 因此就出现了域名这个名词。”“域名系统”就很明确地指明这种系统是用在因特网中。
许多应用层软件经常直接使用域名系统DNS,但计算机的用户只是间接而不是直接使 用域名系统。
用户与因特网上某个主机通信时,显然不愿意使用很难记忆的长达32位二进制主机地 址。即使是点分十进制IP地址也并不太容易记怀。相反,大家愿意使用比较容易记忆的主 机名字。早在ARPANET时代,整个网络上只有数百台计算机,那时使用一个叫做hosts的 文件,列出所有主机名字和相应的IP地址。只要用户输入一个主机名字,计算机就可很快 地把这个主机名字转换成机器能够识别的二进制IP地址。
为什么机器在处理IP数据报时要使用IP地址而不使用域名呢?
这是因为IP地址的长 度是固定的32位(如果是1Pv6地址,那就是128位,也是定长的),而域名的长度并不是 固定的,机器处理起来比较困难。
因特网的域名系统DNS被设计成为一个联机分布式数据库系统, 并采用客户服务器方 式。DNS使大多 数名字都在本地进行解析(resolve)CD , 仅少量解析需要在因特网上通信, 因 此DNS系统的效率很高。 由千DNS是分布式系统 ,即使单个 计算机出了故障, 也不会妨碍整个DNS系统的正常运行。
域名到IP地址的解析是由分布在因特网上的许多域名服务器程序(可简称为域名服务器)共同完成的。 域名服务器程序在专设的结点上运行, 而人们也常把运行域名服务器程序 的机器也称为域名服务器
域名到1P地址的解析过程的要点如下: 当某一个应用进程需要把主机名解析为IP地址
时, 该应用进程就调用解析程序(resolver), 并成为DNS的一个客户, 把待解析的域名放在 DNS请求报文中, 以UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开 销)。 本地域名服务器在查找域名后, 把对应的IP地址 放在回答报文中返回。 应用进程获得目的主机的IP地址 后即可进行通信。
若本地域名服务器不能回答该请求, 则此域名服务器就暂时成为DNS中的另一个客 户, 并向其他域名服务器发出查询请求。 这种过程直至找到能够回答该请求的域名服务器为止。

因特网的域名结构

因特网采用 了层次树状结构的命名方法, 就像全球邮政系统和电话系统那样。 采用这种命名方法, 任何一个连接在因特网上的主机或路由器, 都有 一个唯一的层次结 构的名字, 即域名(domain name)。 这里,“域" (domain)是名字空间中一 个可被管理的划 分。 域还可以划分为子域, 而子域还可继续划分为子域的子域, 这样就形成了顶级域、 二级域、 芒级域, 等等。
据2006年12月的统计,现在顶级域名TLD(Top Level Domain)已有265个[W-TLD], 分为三大类:
1)国家顶级域名nTLD:采用ISO3166的规定。如:en表示中国,us表示美国,uk表示英国,等等
2)通用顶级域名gTLD:到2006年12月为止,通用顶级域名的总数已经达到18个 [W-gTLD]。最常见的通用顶级域名有7个,即:com (公司企业),net(网络服务机构),org(非营利性的组织),int(国际组织),edu (美国专用的教育机构),gov(美国的政府部门),mil(美国的军事部门)。
其余11个通用顶级域名是:
aero (航空运输企业),bizC公司和企业),cat(加泰隆人的语言和文化团体),coop(合作团体),info(各种情况),jobs(人力资源管理者),mobi(移动产品与服务的用户和 提供者),museum(博物馆),name(个人),pro(有证书的专业人员),travel(旅游业)。
(3)基础结构域名(infrastructuredomain): 这种顶级域名只有一个,即arpa,用千反向域 名解析,因此又称为反向域名。
在国家顶级域名下注册的二级域名均由该国家自行确定。例如,顶级域名为jp的日本,将其教育和企业机构的二级域名定为ac和CO,而不用edu和com。

我国把二级域名划分为“类别域名“和“行政区域名“两大类。
类别域名共7个,分别为:ac (科研机构);com (工、商、金融等企业);edu(中国的教育机构);gov (中国的政府机构);血1(中国的国防机构);net (提供互联网络 服务的机构);org (非营利性的组织)。
行政区域名“共34个,适用千我国的各省、自治区、直辖市。

DNS域名服务器

具体实现域名系统使用分布在各地的域名服务器。一个服务器所负责管辖的(或有权限的)范围叫做区(zone)。各单位根据具体情况来划 分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权 限域名服务器(authoritativename server), 用来保存该区中的所有主机的域名到IP地址的映射。总之,DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS 服务器实际管辖的范围。区可能等于或小于域,但一定不可能大于域。

因特网上的DNS域名服务器是按照层次安排的。 每一个域名服务器都只对域名体系中的一部分进行管辖。 根据域名服务器所起的作用, 可以把域名服务器划分为以下四种不同的类型:
(1 )根域名服务器(root name server): 根域名服务器是最高层次的域名服务器, 也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。 根域名服务器是最重要的域名服务器,因为不管是哪一个本地域名服务器,若要对因特网上 任何一个域名进行解析(即转换为IP地址),只要自己无法解析,就首先要求助千根域名服 务器。假定所有的根域名服务器都瘫痪了,那么整个的DNS系统就无法工作。在因特网上共有13个不同IP地址的根域名服务器, 它们的名字是用一个英文字母命名, 从a 一百到m (前 13个字母)。
注意:根域名服务器的数目并不是13个机器, 而是13套装置
(2)顶级域名服务器(即TLD服务器):这些域名服务器负责管理在该顶级域名服务器 注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)。
(3)权限域名服务器:这就是前面已经讲过的负责个区的域名服务器。当 一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当 一找哪个权限域名服务器。
(4)本地域名服务器(localname server): 个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。由此可看出本地域名服务器的重要性。每一个因特网服务
提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器。地域名服务器离用户较近,般不超过几个路由器的距离。当所要查询的主机也属于同个本地ISP时,该本地域名服务器立即就能将所查询的主机名转换为它的IP地址,而不需要再去询问其他的域名服务器。

DNS记录

DNS请求包括两个部分:name 和 type
DNS响应包括四个部分:name、value、type、和TTL
一条响应可能包含多条域名记录
name和value的含义取决于type

DNS记录类型

DNS攻击详解_第1张图片
DNS攻击详解_第2张图片
DNS攻击详解_第3张图片

DNS攻击

DDOS攻击

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

攻击方法

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

  1. 利用发包程序向DNS服务器发送不带任何负载的NULL数据包。由于数据包本身不符合协议规定,服务器在收到报文的时候将直接丢弃。因此这种攻击方式除非攻击流量比较大,否则不会有明显的效果。
  2. 利用程序构造DNS解析请求固定的域名,由于DNS服务器在解析请求的时候会在系统cache存放上一次解析的结果,这种攻击方式也需要较大的流量。
  3. 向DNS服务器发起解析请求随机的、不存在的域名;这样DNS服务器就需要进行频繁的字符串匹配,由于在本地无法查到对应的结果,服务器必须使用递归查询向上层域名服务器提交解析请求,引起连锁反应。 目前尚没有防火墙能对DNS服务器的攻击进行防护,只有少数的专业防护设备可以做到。
    DNS攻击详解_第4张图片

防御策略

1.在UDP Flood的基础上对 UDP DNS Query Flood 攻击进行防护
2.根据域名 IP 自学习结果主动回应,减轻服务器负载(使用 DNS Cache)
3.对突然发起大量频度较低的域名解析请求的源 IP 地址进行带宽限制
4.在攻击发生时降低很少发起域名解析请求的源 IP 地址的优先级
5.限制每个源 IP 地址每秒的域名解析请求次数

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

攻击方法

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

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

DNS放大攻击中的一个机器人可以被认为是一个恶意的少年打电话给餐馆并说“我将拥有一切,请给我回电话并告诉我整个订单。”当餐厅要求时一个回叫号码,给出的号码是目标受害者的电话号码。然后,目标接收来自餐馆的电话,其中包含许多他们未请求的信息。
由于每个机器人都要求使用欺骗性IP地址打开DNS解析器,该IP地址已更改为目标受害者的真实源IP地址,然后目标会从DNS解析器接收响应。为了创建大量流量,攻击者以尽可能从DNS解析器生成响应的方式构造请求。结果,目标接收到攻击者初始流量的放大,并且他们的网络被虚假流量阻塞,导致拒绝服务。
DNS攻击详解_第5张图片
DNS放大可分为四个步骤:

攻击者使用受损端点将带有欺骗性IP地址的UDP数据包发送到DNS recursor。数据包上的欺骗地址指向受害者的真实IP地址。

每个UDP数据包都向DNS解析器发出请求,通常会传递诸如“ANY”之类的参数,以便接收可能的最大响应。

在收到请求后,尝试通过响应提供帮助的DNS解析器会向欺骗的IP地址发送大量响应。

目标的IP地址接收响应,周围的网络基础设施因流量泛滥而变得不堪重负,导致拒绝服务。

虽然一些请求不足以取消网络基础设施,但当此序列在多个请求和DNS解析器之间成倍增加时,目标接收的数据放大可能很大。探索有关反射攻击的更多技术细节。

防御策略

对于运营网站或服务的个人或公司,缓解选项是有限的。这是因为个人的服务器虽然可能是目标,但却不会感受到体积攻击的主要影响。由于产生了大量流量,服务器周围的基础设施会产生影响。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。

会话劫持

链接:
以下方面会导致返回的ip是错误的。

劫持dns服务器地址

这种情况一般不会发生,不过当几个小的漏洞结合在一起的时候就成为了大的漏洞。比如之前出现过的路由器劫持事件:
漏洞本身依赖3个部分:
tp-link路由器发现存在csrf漏洞。
有些用户的路由器没有更改用户名和密码,使用了默认的用户名和密码;或者浏览器记录了路由器的登录状态。
firefox和chrome等浏览器支持Http Authentication。
这些结合在一起就导致了这么一个攻击流程:
恶意人员构造了一个恶意的web页面,如www.foo.com/text.html,页面的功能是自动登录路由器并修改dns地址。
恶意人员构造一个url发送给被害者,当被害者点击这个链接的时候就访问了恶意页面,就修改了路由器的dns地址。

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

hosts文件被修改

根据解析流程来看,如果要解析www.ctrip.com的ip,系统会首先访问hosts文件,看看有没有相关的绑定:
如果有如下记录:

1.1.1.1  www.ctrip.com

你们系统就不会将www.ctrip.com发送给dns服务器去解析,直接就将它解析为1.1.1.1。

DNS服务器缓存中的映射关系被修改,又称缓存投毒攻击

DNS攻击详解_第6张图片

系统检测到hosts文件中没有响应的域名的解析的时候就会发送给本地dns服务器进行解析,解析之前会先查看缓存中是否存在,如果没有,再将解析请求发送给下一个dns服务器。结果返回后将该域名的解析结果保存到缓存中,方便下一次的解析。

针对缓存中的解析的攻击有2种:传统的DNS缓存投毒攻击kaminsky缓存投毒攻击
链接:https://blog.51cto.com/zdzhu/1575498

传统的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或者增加新的安全认证协议。

你可能感兴趣的:(网络安全,网络,网络安全,dns服务器)