隐藏通信隧道技术——防御DNS隧道攻击
DNS协议
DNS协议是一种请求/应答协议,也是一种可用于应用层的隧道技术。虽然激增的DNS流量可能会被发现,但是基于传统Socket隧道已经濒临淘汰及TCP、UDP通信大量被防御系统拦截的状况,DNS、ICMP、HTTP/HTTPS等难以被禁用的协议已成为攻击者控制隧道的主流渠道。
一方面,在网络世界中,DNS是一个必不可少的服务;另一方面,DNS报文本身具有穿透防火墙的能力。由于防火墙和入侵检测设备大都不会过滤DNS流量,也为DNS成为隐蔽信道创造了条件。越来越多的研究证明,DNS隧道在僵尸网络和APT攻击中扮演着重要的角色。
用于管理僵尸网络和进行APT攻击的服务器叫做C&C服务器(Command and Control Server,命令及控制服务器)。C&C节点分为两种,分别是C&C服务端(攻击者)和C&C客户端(被控制的计算机)。C&C通信是指植入C&C客户端的木马或者后门程序与C&C服务端上的远程控制程序之间的通信。
正常网络之间的通信,都是在两台机器之间建立TCP连接后进行的。在进行数据通信时:如果目标是IP地址,可以直接发送报文;如果目标是域名,会先将域名解析成IP地址,再进行通信。两台机器建立连接之后,C&C服务端就可以将指令传递给C&C客户端上的木马(后门)程序,让其受到控制。
内网中安装了各种软/硬件防护设施来检查主机与外部网络的连接情况 。很多厂商会收集C&C服务端的域名、IP地址、URL等数据,帮助防火墙进行阻断操作。这样一来,C&C通信就会被切断。于是,通过各种隧道技术
实现C&C通信的技术(特别是DNS隧道技术)出现了。
DNS隧道的工作原理很简单:在进行DNS查询时,如果查询的域名不在DNS服务器本机的缓存中,就会访问互联网进行查询,然后返回结果。如果在互联网上有一台定制的服务器,那么依靠DNS协议即可进行数据包的交换。从DNS协议的角度看,这样的操作只是在一次次地查询某个特定的域名并得到解析结果,但其本质问题是,预期的返回结果应该是一个IP地址,而事实是不是——返回的可以是任意字符串,包括加密的C&C指令。
域名型DNS隧道木马的通信架构,如果所示。
在使用DNS隧道与外部进行通信时,从表面上看是没有接连外网的(内网网关没有转发IP数据包),但实际上,内网的DNS服务器进行了中转操作。这就是DNS隧道的工作原理,简单地说,就是将其他协议封装在DNS协议中进行传输。
使用DNS隧道
DNS隧道的使用方法比较简单。由于客户端和服务端在同一个局域网中,只要直接访问服务端即可。例如,登录目标主机的3389端口,就可以直接执行“mstsc 192.168.1.27:3389"命令。同样,目标主机也可以通过SSH进程远程登录服务端。如图所示。
防御DNS隧道攻击的方法
防御隧道攻击并非易事,特别是防御DNS隧道攻击。通过如下操作,能够防御常见的隧道攻击行为。
- 禁止网络中任何人向外部服务器发送DNS请求,只允许与受信任的DNS服务器通信。
- 虽然没有人会将TXT解析请求发送给DNS服务器,但是dnscat2和邮件服务器/网关会这样做。因此,可以将邮件服务器/网关列入白名单并阻止传入和传出流量中的TXT请求。
- 跟踪用户的DNS查询次数。如果达到阙值,就生成相应的报告。
- 阻止ICMP。
用户的DNS查询次数。如果达到阙值,就生成相应的报告。
- 阻止ICMP。