这年头,连DNS隧道都被玩坏了

DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量 。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征 。DNS Tunneling,是隐蔽信道的一种,通过将其他协议封装在DNS协议中传输建立通信 。因为在我们的网络世界中DNS是一个必不可少的服务,所以大部分防火墙和入侵检测设备很少会过滤DNS流量,这就给DNS作为一种隐蔽信道提供了条件,从而可以利用它实现诸如远程控制,文件传输等操作,现在越来越多的研究证明DNS Tunneling也经常在僵尸网络和APT攻击中扮演着重要的角色 。
一、写给小白DNS使用端口53,你几乎可以在任何系统,防火墙和客户端上打开并进行DNS查询 。DNS在我们的网络世界中是一个非常重要的协议,它将长串的不适合记忆的IP地址映射成可读性较强的字符域名 。整个域名空间呈层次化的树状结构,顶层是根域,全球一共有13个根域 。根域下为我们平常熟悉的顶级域,如.com,.net,.org等 。域名的存储、解析和管理都要通过域名服务器来实现 。根据域名所属域和授权范围可以划分Zone,Zone上的主服务器和辅服务器均被称为权威域名服务器 。权威域名服务器上保存了该域的所有主机信息 。
DNS的记录类型有很多,大家常见的有A,AAAA,CNAME,MX,SOA,NS等 。DNS Tunneling可以利用其中的一些记录类型来传输数据 。例如A,MX,CNAME,TXT,NULL等 。
DNS的解析过程可以分为两种类型:迭代查询和递归查询 。通常本机到Local DNS Server的过程属于递归查询,而Local DNS Server对查询域名的解析过程属于迭代查询 。为了减轻Local DNS Server的压力,提高解析速度,引入了缓存机制 。缓存和TTL紧密相连,当TTL过期,Local DNS Server则会丢弃缓存的数据,重新从权威域名服务器上获取新的数据 。这些查询使用UDP协议,而不是TCP协议,所以它与TCP等效查询具有更低的延迟,带宽和资源 。但是UDP没有错误或流量控制功能,也没有任何完整性检查以确保数据完好无损 。所以互联网如何保证用户浏览网页,使用应用,聊天可靠呢?比如如果在一个实例中UDP DNS查询失败,大多数系统将在多次失败之后,可能切换到TCP; 如果DNS查询超出UDP数据报大小的限制,则也使用TCP。DNS运行基本过程:客户端使用特定类型发送查询字符串(例如,在这种情况下为mail.google [ 。] com) – 通常为主机地址的A. 我已经跳过了中间DNS系统可能必须确定'.com'存在的部分,然后找出可以找到'google [ 。] com'的位置 。

这年头,连DNS隧道都被玩坏了

文章插图
 
一般我们上网,无论是从搜索引擎结果转移还是直接访问网站,都会留下DNS查询痕迹 。留下的多少取决于操作系统,DNS服务器(特别是启用了扩展或调试日志记录的服务器)可以收集关于请求和客户机请求的整个主机信息 。可以从DNS服务器日志中收集的信息类型的一些想法; 操作此类服务器的管理员获取远程IP发送请求 – 尽管这可能是最后一跳或DNS服务器的IP,而不是确切的请求客户端的IP – 以及查询字符串本身,以及来自服务器的响应 。
二、写给老白DNS Tunneling可以分为直连和中继两种 。直连也就是Client直接和指定的目标DNS Server(Authoritative NS Server)连接,通过将数据编码封装在DNS协议中进行通信,这种方式速度快,但是隐蔽性比较弱,很容易被探测到,另外限制比较高,很多场景不允许自己指定DNS Server 。而通过DNS迭代查询而实现的中继隧道,则更为隐秘,但同时因为数据包到达目标DNS Server前需要经过多个节点,所以速度上较直连慢很多 。
这年头,连DNS隧道都被玩坏了

文章插图
 
UserA 和User B由于防火墙D的规则限制无法访问外网,但防火墙上对于DNS的流量是放行的 。当User需要解析的域名Local DNS Server无法给出回答时,Local DNS Server就会采用迭代查询通过互联网与各级域的权威服务器进行查询,比如从com域的服务器得到test.com域的权威服务器地址,最后定位到所查询域的权威DNS Server,形成一个逻辑信道 。所以,我们可以将通信的数据封装在客户端查询的请求中,当请求的数据包最终到达我们控制的权威DNS Server时,再从请求数据包中解析出数据,并将相应的数据封装在DNS Response中,返回给Client完成通信 。(Local DNS Server可以由Remote DNS Server代替,原理相同)
中继过程中的一个关键点是对DNS缓存机制的规避,因为如果需要解析的域名在Local DNS Server中已经有缓存时,Local DNS Server就不会转发数据包 。所以在我们构造的请求中,每次查询的域名都是不一样的或者是已经是过期的 。


推荐阅读