DNS在整个互联网体系中处于入口的重要位置,近年来利用或针对DNS的网络攻击呈愈演愈烈之势,而DNS隧道就是其中典型的攻击形式。DNS隧道指基于DNS封装其他协议(例如SSH、HTTP或自定义私有协议)的方法。利用DNS隧道窃取数据已成为APT攻击的重要组成部分,而DNS服务端口UDP 53通常不会被防火墙管控,这也为攻击者利用DNS进行隐蔽通信提供了便利的条件。
DNS隧道已经存在很长时间,常见的攻击工具包括dns2tcp、dnscat2、Iodine、OzymanDNS、SplitBrain、TCP overDNS、TUNS等,如何有效的检测和防护DNS隧道是一个值得高度关注的问题。本文以dnscat2和dns2tcp开源工具为基础,搭建实验环境并模拟泄露过程,分析其通信数据,分享针对DNS隧道可能的防护维度(工具的搭建过程不在本文介绍范畴)。enjoy:
dns2tcp环境搭建示例:

server端启动服务

client端连接建立会话
数据传输:

client启用远程nc服务

server端启动接收

client端发起数据传输
实验使用同一个文件进行测试,dns2tcp和dnscat2文件传输过程抓包数据如下:

dns2tcp泄露文件通信过程(部分)

dnscat2泄露文件通信数据(部分)
结合以上抓包数据以及DNS协议的元数据(如域名、请求应答类型、IP、应答信息等)分析,可以得到以下针对DNS隧道的防护手段:随机域名:从报文可以看到,请求的数据中存在大量随机域名,随机域名是传输文件信息的载体,通过随机域名将信息发送到服务器,再重组资料。通过对随机域名的分析和检测可以及时判断异常的DNS请求行为;威胁情报:域名的随机性更多体现在构造的子域名上,但域名后缀也可以作为一个检测的维度,如果攻击关联非法组织,可以通过威胁情报做一层过滤,及时阻断外联;2.应答内容分析:利用DNS隧道通信,response的信息中会包含大量的控制信息,这些信息加密后,与正常应答信息对比也存在较大差异,也可以作为一个异常判定的维度。3.请求和应答类型检测:本次测试主要以TXT类型完成,因为TXT单次请求相对于A和AAAA可以传输更多的数据。对于利用DNS泄露数据检测,TXT类型可以作为一种检测维度,持续高频的TXT类型请求通常比较少见,但其并非唯一的检测类型,dnscat2可通过A、AAAA、CNAME、MX、TXT多种类型请求外传,对这些常见请求类型泄露数据的检查,还需配合其它策略判定。4.请求频率监控:利用隧道传输数据基本上采用尽力而为的方式完成传输,所以在传输数据时,会在短时间高频次发生请求。如果传输文件较大,这种高频传输会更加明显。5.请求数据包大小过滤:本次测试传输文件的每个请求数据包都在200byte以上,通常合法的DNS请求包在100byte以下,一般不会超过这个阈值或不会持续高频超过。6.负载分析:通过DNS隧道传输数据,请求数据包大小和应答数据包短时间内快速增大,超出正常请求状态的数据包大小,可以通过提前训练并存储域名正常请求状态下的负载,对比实现异常DNS请求行为的判定。7.异常流量监控:流量检测与负载检测相似,也是基于异常流量分析DNS隧道行为,但是流量分析需依赖更多的报文交互,而且容易误判,更侧重于事后人为研判。综上所述,DNS隧道的防护是需要多维度策略综合研判,最终输出评估结果,但各维度判定的阈值、分析窗口等需要长期的训练甚至结合实际业务请求进行评估,同时DNS隧道防护需要权衡防护的时效性以及降低误判率,还要保证解析性能,而且DNS隧道防护还有更多其他维度,是一个综合性较强的研究内容。而放大到整个DNS的安全防护,将是一个更复杂的问题。ZDNS研发的Safeguard安全威胁管控系统提供了一个系统解决DNS安全难题的方案,通过DNS协议深度防护和威胁情报检测技术,扼住网络通信的咽喉要道,保护合规业务正常通信,阻断网络攻击外联,成为保障网络应用安全访问的“门神”。