DNS隧道流量检测特征分析研究
2022-04-21刘俊延刘林云杨璐铭
丁 峤,刘俊延,刘林云,杨璐铭
(1.陆军工程大学石家庄校区 装备模拟训练中心,河北 石家庄 050003;2.国防科技大学 计算机学院,湖南 长沙 410003)
0 引言
域名系统(Domain Name System,DNS)[1]是Internet上使用的一种重要协议和服务,DNS最常见的用途是将域名映射到IP地址。由于DNS特有的分层系统,域的所有者可以为其域定义权威服务器,这意味着它们可以控制向其域进行DNS查询的主机。DNS隧道对攻击者很有吸引力,被广泛用于传输窃取的信息,因为大多数防火墙不会阻止DNS报文,只要被攻击者的网络需要进行域名解析服务,DNS隧道就可以实现,IDS也不会因此触发警报。近年来,出现了很多开源的DNS隧道工具,如iodine[2],dns2tcp[3]和DNScat2[4]等。在2012年RSA会议上Ed Skoudis明确指出,基于DNS隧道流量攻击是6种最危险的新型网络攻击之一,攻击者已在网络盗窃、网络勒索领域使用了这种技术。许多DNS隧道实用程序并不试图隐藏,因为DNS隧道流量通常没有被有效监控。针对各类杀毒软件、IDS等安全策略对DNS隧道流量难以有效监控的现象,众多学者开始研究DNS隧道流量检测技术。现今,DNS隧道流量检测具体可划分为载荷分析和流量分析两大类[5]。虽然研究者已经提出了许多方法来确定DNS隧道,但仍有一些问题值得进一步关注。基于载荷的检测需要大量不同类别统计特征来保证检测的精度,但检测时间较长,减少类别统计特征又会出现较高的误报率。基于流量检测通常关注DNS流量变化情况,但忽视了DNS报文的波动亦有可能是由Query Flood等攻击引起的,因此DNS隧道往往会牺牲一定的传输效率来规避针对DNS流量的检测。
机器学习技术已被成功应用到语音识别、图像识别等领域,并有很好的效果。但由于无法获取到大数据量的异常样本,目前在网络安全行业能成功应用机器学习的案例较少。在DNS隧道检测场景中,同样存在异常样本数据稀缺问题。针对当前基于载荷、基于流量的DNS隧道检测误报率高的问题,结合基于载荷、基于流量的特征提取方法,将特征提取维度扩展至一个完整的DNS会话,使得选取的特征更具备差异性,以此为基础设计并实现了一个基于特征分析的DNS隧道流量检测系统。系统首先采集不同的开源DNS隧道软件产生的DNS隧道数据,并将采集的DNS隧道流量重组成DNS会话,进而对包含DNS隧道流量和正常DNS流量的数据集结合领域专家知识进行统计分析,详细研究DNS协议报文字段,挖掘出可表征不同DNS隧道流量的特征。再使用多种机器学习模型进行学习训练,结合机器学习评估指标选取最佳分类模型。最后对所选特征进一步筛选,找到可以区分不同DNS隧道流量的最小特征子集。
1 相关工作
DNS载荷分析主要针对DNS数据包中的数据进行分析。Butler等[6]把DNS报文的域名中label部分大于52个字符作为识别DNS隧道的特征之一。Born等[7]引入信息熵的概念来检测DNS隧道域名字母的混乱程度。Qi等[8]用二元语法字频来检测DNS报文中域名字母频率,发现正常的域名满足Zipf定律而DNS隧道的域名遵循的是随机分布。Bilge等[9]把检测域名中最长有意义子串的百分比作为检测恶意域名的重要特征之一,同时分析了DNS报文中的TTL属性,异常的DNS流量TTL值通常比较小,并将此作为特征。DNS流量分析主要是检测网络中的DNS流量变化情况。章思宇等[10]发现隐蔽隧道通信中的DNS流在单位时间回答数据的总字节数与合法请求具有明显的差异。Butler等[11]认为一定时间内IP地址、域名出现的数量可以作为DNS隧道流量的检测标志。Skoudis[12]在2012年RSA会议上指出,DNS的地理位置也是与DNS隧道流量相关的指标,因为大量的DNS流量都是针对不相关的特定位置。但对于在全球缺乏分支机构的组织来说,这种方法可行性较低。罗友强[13]以第一个DNS报文到最后一个DNS报文的时间差作为一次DNS会话时长,并将DNS会话中的数据包总数作为DNS隧道的特征之一。通过引入机器学习方法,Allard等[14]提出了一种使用MLT检测DNS隧道的方法,使用了2个分类器决策树(DT)和随机森林(RF),通过对内部协议进行统计分析来训练加密流,目的是识别DNS隧道流量中数据包的大小。Buczak等[15]研究了不同类型的DNS隧道流量特征组合,并使用射频分类器进行比较,特征包括DNS请求包数量、连续响应时间间隔等。Aiello等[16]通过主成分分析(PCA)和互信息(MI)2种方法研究了DNS隧道的统计特征,目的是检查预警的行为模式,以确定隧道流量特征,并将提取的特征与KNN分类器相结合。在存在DNS隧道的情况下,该方法在流量分析方面表现出了良好的性能。
2 DNS隧道流量检测框架设计
2.1 系统设计目标
基于特征分析的DNS隧道流量检测系统应能有效地检测出隐藏在正常DNS流量中的DNS隧道流量。在特征分析中,特征提取的有效性和特征子集的优化是重要的2个方面。因此实验从2个方面对DNS隧道流量检测系统进行功能验证,一方面验证实验提取的DNS流量特征能否有效反映DNS隧道流量特点,达到较好的分类效果;另一方面验证最优特征子集的检测效果。
2.2 系统架构设计
系统架构由5部分组成。第1个组件是嗅探器模块,采用WinPcap抓取网络流量底层数据包,并过滤DNS数据包。Windows系统为用户提供了一个简易且实用性较强的WinPcap体系结构,该结构分为3部分:一是驱动程序NPF,用于过滤流量包,是该系统的核心模块;二是动态连接库Packet.all,为Windows操作系统提供底层接口;三是独立于系统之外的wpcap.all,提供符合Libpacp接口的更高层函数库[17]。第2个组件是DNS会话重组模块,需要对采集到的DNS流量进行会话重组。该模块首先对DNS报文按照五元组进行分类,形成DNS会话,并利用哈希链表进行存储。具体存储方式为:如果新的DNS报文五元组信息在当前的哈希链表中有记录,则把该报文链接至当前链表后;如果新的DNS报文五元组信息不在当前的哈希链表中,则需生成新的哈希链表。由于DNS会话没有TCP会话中类似“四次握手”明显结束标志,实验规定5 min内如若没有接收到新的报文,则DNS会话关闭。第3个组件是DNS特征提取模块,将DNS会话转换成特征表示。首先使用Joy软件对DNS流量进行解析,Joy是一个分析流量数据工具,用于从实时网络流量或pcap文件中提取数据特征,然后用Json表示这些数据特征。实验在不同DNS报文字段选取了15个特征来表征一个DNS会话,每个特征的含义将在下文具体介绍。第4个组件是DNS机器学习模块,对检测模型进行训练。在这一模块需要根据评估指标对不同机器学习模型进行测试,筛选出适合本实验的机器学习分类模型,并将标记的DNS隧道流量和正常DNS流量特征数据传入作为机器学习模块的输入。第5个组件是特征筛选模块,用于形成最优特征子集。该模块根据实际检测精度对特征进一步筛选,并将筛选出的新的特征子集再次传入机器学习模块,与全特征下模型检测效果做对比。整体框架如图1所示。
图1 DNS隧道流量检测框架
3 特征提取
为了确定反映隧道行为的DNS流量特征,对正常的DNS流量和已被判定为DNS隧道流量的共计10万条数据在包特征、资源记录特征、时间特征、域名特征和判决特征等5大类别进行统计对比,观测各个特征下正常流量和隧道流量的分布情况。DNS隧道流量来自于开源的DNS隧道工具,如iodine,dns2tcp和dnscat2等。最终确定了15个特征作为DNS隧道流量识别特征,特征描述如表1所示。
表1 特征描述
3.1 包特征
3.1.1 DNS数据包总数
DNS隧道会话一般随着隧道生命周期的结束而结束,在整个隧道生命周期内会向外发送心跳报文、传输敏感信息和资源文件[18],所以在DNS隧道会话中DNS报文数量较大。而正常客户端产生的DNS会话随着一次DNS解析任务结束而结束。在随机抽样的1万条DNS会话中,大多数正常的DNS会话中数据包的个数为2,由1个DNS请求报文和1个DNS响应报文组成。
3.1.2 请求包大小和方差
为了将私密数据安全传输到目的地,DNS隧道工具通常会将传递的信息以子域字符串的形式编码,并利用子域名串和权威DNS服务器控制的高级域名构造查询的域名。隧道应用会发出一个解析该域名的请求,权威DNS服务器将接收请求并通过对子域字符串进行解码来获取信息。较长的域名说明承载着更多的秘密信息,这就导致了隧道流量的请求报文大小和方差通常比正常DNS流量要大。
3.2 域名特征
DNS会话域名属性是重要的隧道流量行为判别特征,因为无论隧道工具采用嵌入数据、通信加密(base64,base32编码等)或者其他方式,隧道流量域名的长度、熵值、格式内容均会与正常DNS流量的域名信息有所不同。由于DNS隧道在工作时,会把隐蔽信息封装在请求字段的域名中,为了追求传输效率,在传输过程中会尽可能多地携带私密信息,这就造成DNS隧道流量域名字段中子域名个数较多、域名长度均值较长。正常DNS流量域名通常是以完整单词或者常用词组构成,域名熵值较低。DNS隧道则一般会采用随机字符编码的方法增强隐蔽性,提升抗字符分析能力,这就使得DNS隧道流量域名的混乱程度较高。此外,在研究过程中发现,正常域名易读性较好,子域名构成中数字、辅音字母较少。DNS隧道流量域名数字、辅音字母占比较高。选取包含正常DNS流量和隧道流量在内的1万条DNS会话,观测二者不同特征下域名特征对比情况。域名特征对比如表2所示。从表2可以看出,正常DNS流量和DNS隧道流量的子域名个数、子域名熵值、辅音频率、数字频率、长度均值存在显著差异,将上述5个特征作为域名标识特征。
表2 域名特征对比
3.3 资源记录特征
资源记录类型为用户提供与查询的域名相关联的特定类型的信息。有许多类型的标准资源记录。在选用的DNS数据中,A记录占比30%~35%,CNAME记录占比30%~40%,NS记录占比7%~10%,而像TXT,NS记录占比则小于1%。统计结果表明,常见的记录类型占正常DNS流量的大部分。相反,DNS隧道工具更喜欢使用不常见的记录类型来封装信息。资源记录字段长度通常与选用的资源类型相关。选用是否为常用资源类型、资源记录字段长度2个特征标识资源记录的信息。
3.4 时间类特征
时间间隔是指单次DNS查询报文和响应报文的间隔时间。正常的DNS流量查询报文和响应报文的间隔时间较短,因为在访问常见的域名地址时本地DNS服务器可以从本地缓存中迅速找到域名解析记录。而若是访问构造的域名信息,本地DNS服务器由于在本地缓存中找不到该域名的解析记录,只能求助根域名服务器进行迭代查询,致使DNS查询报文和响应报文的间隔时间较长。在此过程中,域名解析记录在DNS服务器上的“生存时间”就是TTL值,倘若在TTL值失效之前,本地DNS服务器再次收到对同一域名的解析请求,本地DNS服务器就会用已经缓存的记录信息进行回应。有部分研究人员发现,通信双方在使用DNS隧道进行通信时,为使DNS隧道时间延长以便于传递更多数据,攻击者会设置较小的TTL值。因此,选用时间间隔和TTL的均值来表征时间类特征。
3.5 判决类特征
除了上述定义的特征,本文加入3个判决类特征进行辅助判别,分别为有效载荷部分是否加密、会话中的UDP报文是否有空隙、DNS头部ID字段的值是否随机。
DNS报文中除去DNS报文头部还有3部分:查询问题字段、回答、授权和额外信息字段的内容,这3部分内容共同构成了DNS会话报文的有效载荷[19]。DNS协议是一种明文传输协议。而DNS隧道流量在工作中通常将需要传递的隐蔽信息封装在DNS报文的有效载荷中,并采用加密算法对隐蔽数据做加密处理,所以将DNS报文中有效载荷部分是否加密作为一个识别特征。
DNS协议通常使用UDP报文传输。由于DNS隧道采用中继模式时,受控端会一直向DNS服务器发送心跳包保持连接,这通常导致DNS协议字段格式损坏,使报文完整性缺失,故将会话中的UDP报文是否有空隙作为一个识别特征。
DNS头部ID是DNS报文的标识,对于请求和应答报文,此字段相同,通过它可以区分DNS应答报文是哪个请求的响应。对于正常的DNS流量,Transaction ID是随机生成的,而对于DNS隧道流量,由于其数据包较多,每个报文的Transaction ID可能会呈现出一定规律性,因此将Transaction ID是否随机作为识别特征。
4 实验测试与分析
4.1 实验环境搭建
DNS隧道流量检测实验环境如图2所示。DNS隧道流量检测系统安装在防火墙的内部,通过交换机连接镜像流量端口检测隐藏在正常DNS流量中的DNS隧道流量。在实验搭建的局域网测试环境中,15台机器中有4台安装了DNS隧道流量,DNS隧道流量分别由dns2tcp,dnscat2,iodine,OzymanDNS四种隧道软件搭建。实验在会话重组模块选取8 000个正常的DNS流量和2 000个DNS隧道流量会话作为训练样本,2 000个DNS隧道流量样本中四种不同类型隧道软件生成的流量各500个。
图2 DNS隧道流量检测实验环境
4.2 分类模型比较
在机器学习模块中实验选取了Accuracy,Precision,Recall,F1-score,AUC等5个机器学习指标比较了NaviBayes,J48,Simple Logistic,KNN,MultilayerPerception(MLP),XGboost 6种分类器的分类效果,并在时间复杂度上对6种分类器进行比较如图3所示。流量的类别编号为0:normal,1:dns2tcp,2:dnscat2,3:iodine,4:OzymanDNS。
(a)不同模型准确率检测
在总体识别精度和误报率上,MLP,Simple Logistic,XGboost三种分类模型明显更优,而在三者的时间复杂度上,XGboost相对更低。由于DNS隧道流量检测系统需要兼顾检测精度和时间,最终选用XGboost作为机器学习模块的分类模型。
XGboost在检测精度和时间复杂度上的优势证明了此模型更适用于DNS隧道流量检测。在检测精度方面,XGboost对损失函数进行二阶泰勒展开,并在代价函数里加入了正则项。正则项里包含了树的叶子节点个数、每个叶子节点上输出的权重得分的平方和。加入的正则项降低了模型的方差,防止过拟合,提升了模型的检测精度与鲁棒性;在时间复杂度方面,XGboost在训练前预先对数据排序并保存为块(Block)结构,在后面的迭代中重复地使用此结构,显著减少了计算量。此外,在进行树节点分裂时,Block结构可以将各个特征的增益计算过程并行展开,进一步降低了模型的时间复杂度。
4.3 特征筛选
为了验证15个特征中是否存在冗余特征,以获取最小特征子集表征DNS隧道流量检测模型,实验选用XGboost对每个特征进行重要性排序,XGboost根据结构分数的增益情况计算出选择哪个特征作为分割点,而某个特征的重要性就是它在所有树中出现的次数之和。特征重要性评分如图4所示,在15个特征中,域名熵值、域名辅音频率、域名长度均值、域名数字频率、TTL均值、包总数、请求包大小、平均时间间隔拥有更强的重要性。
图4 特征重要性评分
为了获取最小特征子集,实验首先设置了一个空集,以前向搜索的方式按照特征重要性程度依次往空集中加入新的特征,筛选的条件是分类精度始终维持在95%以上。图5展示了分类精度与特征数量的相关性,可以直观地看到当n=6时,分类精度首先满足阈值要求,并随着后续新的特征的加入,精度无明显提升。对照特征重要性(图4),最小特征子集确定为域名熵值、域名辅音频率、域名长度均值、域名数字频率、TTL均值和包总数。
图5 特征阈值筛选
实验将选取的6特征的最小特征子集与全部15个特征在相同训练集、测试集下进行分类效果对比。图6、图7分别为全特征(15特征)与最小特征子集(6特征)的分类模型混淆矩阵对比图,可以看出分类效果下降并不明显。
图7 分类模型混淆矩阵(6特征)
实验进一步观测2个特征集合在完成DNS隧道流量检测过程中时间复杂度对比情况。从图8可以清晰地看出,最优特征子集检测模型比全特征检测模型在时间复杂度上有了显著提升。
图8 时间复杂度对比
5 结束语
为了更有效地识别DNS隧道攻击,本文对DNS隧道流量检测特征进行分析研究,找出能够刻画DNS隧道行为的特征。通过观测正常流量与隧道流量的统计分布、扩展时间维度至一个完整的DNS会话等方法,实验共提取出5大类共15个特征标记一条完整的DNS会话。以提取出的特征为基础模型,设计并实现了DNS隧道流量检测系统,实验结果表明,该系统能够有效地检测出不同DNS隧道软件下产生的隧道流量,且具有较小的误报率和漏报率。通过特征筛选可以进一步降低特征子集的冗余度,发现最优特征子集,最优特征子集可以更好地平衡检测精度和时间复杂度之间的关系。