基于第二级域名的FQDN个数的DNS隐蔽信道检测
2016-02-19杨建强姜洪溪
杨建强+姜洪溪
DOI:10.16644/j.cnki.cn33-1094/tp.2016.02.016
摘 要: 基于DNS协议的隐蔽信道给企业和个人带来很大的安全威胁,对它的检测非常重要。提出一种新的检测方法——利用第二级域名的FQDN个数来检测DNS隐蔽信道。测试结果表明,在采样时间窗口较小的情况下,该方法很容易识别出某些DNS隐蔽信道。讨论了该方法的不足,并给出了解决办法。
关键词: DNS; 隐蔽信道; 检测; FQDN
中图分类号:TP393.08 文献标志码:A 文章编号:1006-8228(2016)02-53-03
Using FQDN number of the second-level domain name to
detect DNS-based covert channels
Yang Jianqiang, Jiang Hongxi
(School of Mathematics and Computer Science, Hubei University of Arts and Science, Xiangyang, Hubei 441053, China)
Abstract: It is very important to detect the DNS-based covert channel which brings about a significant risk to businesses and individuals. In this paper, a new detection method is presented, which uses FQDN (Fully Qualified Domain Name) number of the second-level domain to detect DNS-based covert channel. The test results showed that this method can easily identify some DNS-based convert channels, if the sampling time window is shorter. Shortcomings of the method are discussed and solutions are given.
Key words: DNS; covert channel; detection; FQDN
0 引言
隐蔽信道是指允许进程以危害系统安全策略的方式传输信息的通信信道[1]。隐蔽信道的概念最早是在研究安全操作系统时提出的,后来扩展到数据库和网络环境中。基于DNS协议的隐蔽信道(以下简称DNS信道)最早由Oskar Pearson于1998年4月提出。2004年Dan Kaminsky在Defcon黑客大会上公开了自编的DNS信道工具,该工具可以将音频、视频和远程登录等数据通过DNS协议封装后发布到Internet上[2]。从此DNS信道技术得到越来越多的关注。
目前已经有十多种DNS信道工具,比如dns2tcp、DNScapy、DNScat、DNScat-B、iodine、Heyoka等[3]。这些工具所用到的技术都非常相似,主要包括四方面:受控的域名,控制端程序,被控端程序,以及数据编码方法。受控的域名通常是第二级域名(第二级域名指只有两层或两个域名标签的域名)。DNS信道的基本架构如图1所示。被控端程序通常运行在内部主机上,负责将通信数据封装为对特定域名的请求解析报文。控制端程序将应答数据封装为特定的DNS应答报文。
DNS信道工具的最初目的是利用DNS信道免费使用Wi-Fi访问因特网。但是,这些工具也可用于更加恶意的活动。比如创建远程控制通道,控制被入侵的主机,或者被恶意软件利用。在近几年发生的一些账户数据被盗事件中,有些攻击者就使用了这种方法。另外,测试结果显示DNS信道能够达到110 KB/s的带宽及150 ms的延迟[4]。因此,无论是对企业还是对个人,DNS信道都具有非常大的安全威胁,对它的检测和防范非常重要。
1 利用第二级域名的FQDN个数来检测DNS信道
检测DNS信道的技术或方法有数十种之多,总体上可将它们分为两类:DNS载荷分析和DNS流量分析。在文献[5]中我们对它们进行了总结。这里给出一种DNS信道检测方法,它利用第二级域名的FQDN(指包含主机名在内的整个域名)个数来检测DNS信道(以下简称FQDN个数法)。
许多DNS信道工具通常会在一个DNS报文中传输尽可能多的数据,这意味着DNS信道所使用的域名会比较长。不过,随着对DNS信道检测技术的深入了解,狡猾的攻击者会尝试缩短域名的长度来避免DNS信道被检测出来。缩短域名的长度往往会导致DNS报文数量的增加,特别是在传输大量数据的时候。这些报文中的域名(指包含主机名在内的完整域名,即FQDN)彼此不同并且通常来自同一个特定的第二级域名。因此,通过在DNS报文中寻找FQDN个数较多的第二级域名,就可以发现域名较短的DNS信道。事实上,如果要传输的数据比较多,即使DNS信道的域名比较长,FQDN个数法仍然有效。原因很简单,因为较多的数据需要较多DNS报文来传输。
1.1 实现方法说明
利用端口镜像捕获网络流量,使用相应的工具对流量中的多种协议包括DNS进行解析,然后利用解析后的元数据进行流量分析。流量分析规则包括四个步骤:首先,查询特定时间窗口的DNS数据并保存为xml文件;其次,对xml文件进行清理(比如替换xml中某些与mysql冲突的保留字),为导入数据做准备;然后把xml数据导入到mysql中;最后,使用Python分析导入的数据,计算每个第二级域名的FQDN个数,找出FQDN个数最多的第二级域名。上述过程利用Python和nwmodule库实现。
1.2 测试
我们对一个有近1千个用户的网络环境进行流量捕获,持续2个小时。在此期间,发生了超过80,000个外部DNS查询。另外,在此期间,使用DNScat-B创建一个DNS信道,来传输一个125K的文本文件。传输共花费大约2分钟时间,之后该信道进入轮询模式,并保留了几分钟。
以10分钟作为取样时间窗口,对解析后的元数据进行分析和统计。图2给出了在DNS信道流量(即传输文件)出现期间的10分钟取样窗口内的FQDN分布情况。图2中使用单个字母替代正常的第二级域名,用“CH”替代用于DNS信道的第二级域名。图2显示“CH”的FQDN个数远远超过其他字母。这表明通过统计每个第二级域名的FQDN个数,的确能够检测出某些DNS信道。另外,图2还显示其他字母的FQDN的个数都少于300个,所以,对于10分钟取样窗口,可以把300作为检测DNS信道域的阈值。
以1小时作为取样时间窗口,图3给出了DNS信道流量出现期间的1小时取样窗口内的FQDN分布情况。可以发现,DNS信道“CH”的FQDN个数仅次于“A”的个数。这里的“A”是云安全中的文件信誉服务使用的域,该服务对每一个请求的文件都产生一个FQDN,所以FQDN个数比较多。
以上测试表明,在取样窗口较小的情况下,利用每个第二级域名的FQDN个数很容易识别某些DNS信道。实际上,较小的取样窗口对持续时间短的DNS信道也更加敏感,而较大取样窗口也会导致更长的处理时间。
1.3 不足及完善
并不是只有DNS信道的域名会使用大量的FQDN,用于广告、内容交付和云服务的域名常常也会使用大量FQDN。因此,在某些情况下,FQDN个数法存在着误判的可能,特别是在DNS信道存在时间极短而取样窗口又比较大的情况下。不过,如果把FQDN个数较多的(比如超过200个)知名的域名放到一个白名单中,就可以利用白名单排除一部分FQDN个数较多的合法域名,从而使得即使使用更大的取样窗口,持续时间很短的DNS信道也很容易识别出来。
如果DNS信道利用较少的DNS报文就能完成数据的传输,那么FQDN个数法将无效。此时,需要辅以其他检测方法。比如寻找有效载荷较长的DNS报文。与FQDN个数法一样,寻找有效载荷较长的DNS报文也是一种通用的检测方法。比较有效的做法是寻找域名中主机名较长的DNS报文——比如主机名超过52个字符的DNS报文[6]。原因是许多DNS信道会利用域名最左边的主机名来传输数据。另外,有些DNS信道会利用多个域名标签来传输数据。所以,寻找域名中出现连续多个长域名标签的DNS报文也是一种有效的做法。比如把域名中出现三个连续的、长度介于26到63个字符的域名标签作为一条检测规则。
另外,如果DNS信道使用的受控域名不是第二级域名,比如使用第三级域名作为受控域名,FQDN个数法也将无效。不过,受控域名的层数越多,完整的域名即FQDN能够容纳的通信数据也越少。所以,使用多于二层的受控域名的DNS信道比较少见。即使存在这样的DNS信道,把FQDN个数法中的第二级域名改成第三级域名,它也可以实现对此类DNS信道的检测。
2 结束语
DNS协议主要用于把域名解析成IP地址。因为DNS并不用于一般的数据传输,所以人们往往并不重视对DNS流量的监视。DNS信道是对DNS的滥用,其主要威胁包括两个方面,一是对受害的主机进行控制,二是数据泄露。不能通过简单地禁止DNS报文的方式来消除DNS信道带来的危害,正确的做法是采用有效的DNS信道检测技术将其检测出来,继而拦截非法的DNS报文。本文提出了一种新的DNS信道检测方法——利用第二级域名的FQDN个数来检测DNS信道。该方法与DNS资源记录类型、编码方法等无关,是一种通用的检测方法。本文成功测试了这种方法。测试结果表明,在时间窗口较小的情况下,比如10分钟,该方法很容易识别出某些DNS信道。尽管在某些情况下该方法无法准确识别出DNS信道,但是可以借助白名单及其他检测方法来增强识别能力。需要注意的是,如果狡猾的攻击者有意的降低DNS报文的发送速度,那么就可以避免被FQDN个数法识别出来。对于这种情况,可以进一步结合其他DNS信道检测方法,比如特征匹配法来提高识别率。
参考文献(References):
[1] 王永吉,吴敬征,曾海涛等.隐蔽信道研究[J].软件学报,
2010.21(9):2262-2288
[2] Kaminsky D. Black Ops of DNS[EB/OL].2004 [2013-
11-12].http://www.defcon.org/html/links/dc-archieves/dc-12-archive.html#kaminsky
[3] Merlo A, Papaleo G, Veneziano S, et al. A Comparative
Performance Evaluation of DNS Tunneling Tools[C]. The 4th International Conference(CISIS 2011).Springer Berlin Heidelberg,2011:84-91
[4] Van Leijenhorst, T. On the Viability and Performance of
DNS Tunneling[C]. The 5th International Conference on Information Technology and Applications (ICITA'08). Cairns, Australia,2008:560-566
[5] 杨建强,方磊.DNS隐蔽信道检测研究[J].现代计算机,
2013.10:49-52
[6] Butler P, Xu K. Quantitatively analyzing stealthy
communication channels[C]. Proceedings of the 9th international conference on Applied cryptography and network security(ACNS'11). Springer Berlin Heidelberg,2011:238-254