基于DoH流量的DGA识别方法
2022-01-09张千帆郭晓军周鹏举
张千帆,郭晓军,周鹏举
(西藏民族大学 信息工程学院,陕西 咸阳 712000)
0 引 言
近日,腾讯安全应急响应中心报道了一款专门针对容器虚拟化服务的僵尸网络:BORG僵尸网络,证实该攻击者在入侵内网后开始对内网中其他机器进行探测和入侵,并批量控制这些机器[1]。由此可见,未来僵尸网络的研究与检测工作仍然严峻。僵尸网络作为一个高度可控的网络攻击平台已对互联网安全造成了极大的威胁[2]。
现有研究表明,使用DGA算法已成为僵尸网络逃避检测的主流方法之一,如Cryptolocker[3]、Hesperbot[4]、Ramnit[5]等。目前针对DGA域名的识别方法有:逆向工程技术[6-8],即根据DGA表征或DNS行为找到DGA背后的家族和变种。Yadav S.等人[9]则通过测量了同一IP下域名的K-L距离、编辑距离和Jaccard系数,根据差异构建分类器,提出了基于域名距离度量的检测方法。Zhao H等人[10]利用N-Gram模型,将二级域名和三级域名字符串的长度分成3、4、5、6和7,根据域名权重和阈值进行判断。Zhang Y等人[11]结合CNN和BLSTM的混合深度神经网络来提取域名的语义特征和上下文依赖特征。Hao S等人[12]分析合法域名与恶意域名注册时3大类共22种行为特征,根据CPM(凸多面体机)算法学习后进行检测,对是否存在恶意域名进行预判。Vissers T等人[13]对10 000个域名服务器域的配置问题和硬件错误进行分析,找出了现有滥用和脆弱的域名服务器。
但上述方法大多数是面向DGA算法所产生明文形式流量的检测方法,僵尸网络控制者为逃避检测,极有可能对DGA算法产生的流量进行加密传输,例如使用DoH加密协议[14]。因此,该文利用doh-proxy代理方式[15],将DGA算法产生的流量进行加密传输,并分析DoH网络中请求传输特征和加密DGA流量特征,最终根据DoH流量数据包的长度和时序信息等特征进行识别。由此构建基于KNN算法的加密DGA流量识别方法DGA-DoH(DGA identification method based on DoH traffic)。
首先,阐述了DoH加密协议工作机制,验证了DGA流量利用DoH协议建立命令控制服务传输的可能性并详细描述了DoH网络中恶意流量与正常流量的差异性;其次,主要结合特征工程和KNN机器学习算法设计了一种在DoH网络中识别DGA流量的分类模型;再次,利用实验验证了模型的识别能力并通过比较不同模型参数,优化了模型的检测率,增加了模型的泛化能力;最后,对全文内容进行总结。
1 DGA-DoH特征分析
1.1 DoH加密协议
DoH加密协议是一种通过HTTPS运行加密DNS的方法,DNS交互信息采用Base32/Base64等编码方式进行传输,这种协议可以在其他加密机制可能被阻止时自由地穿越防火墙[16]。DoH网络数据查询流程见图1,工作站通过TLS/TCP 443端口将数据传送给内部Web代理服务器,Web代理服务器接受数据并通过防火墙传输给公共DoH服务器,公共DoH服务器通过TCP 443端口返回应答,同时公共DoH服务器受域名的权威名称服务器组件UDP 53端口监听。
图1 DoH网络数据请求流程
该文采用doh-proxy代理方式[15],创建DoH网络环境。在HTTPS网络中发送Web请求后,用Wireshark软件抓取底层网关流量,结果如图2所示;同理用Wireshark软件记录DoH网络中数据请求过程,结果如图3所示。结果对比可得到,在图2基于HTTPS的Web请求过程中包含图中方框中的DNS报文解析过程,而图3中的DoH网络数据请求过程中因DoH协议加密传输的特性,传输过程中不再包含DNS报文解析过程。
图2 基于HTTPS的Web请求过程
图3 DoH数据请求过程
这种数据传输方式无疑为DGA流量逃脱检测提供了便利。现有加密传输工具所采用的编码方式各有异同,考虑DoH协议对数据编码方式及加密特性,对数据包解密后分析难度较大,同时为了保护数据包的完整性及用户的隐私性,该文不采用解密流量的方法[17]识别加密的DGA流量。
经分析建立命令控制服务所产生的HTTP报文内容、HTTP流量及对应的TCP流量等信息后,该文将根据DoH流量数据包的长度和时序信息等特征识别加密的DGA流量。
1.2 DGA-DoH特征分析
由于网络流特征分布会随时间和网络变化而变化,单一特征选择方法在给定数据集获得的特征子集无法在未来长时间维持稳定的分类精度[18]。因此,在已得到加密流量数据包中对所有流量进行分析。经分析与研究流量数据包中高维数据后,为减少建立与优化模型的时间等成本,仅选择表1中的三个最优特征子集,包括Init_win_bytes(C->S)7th packet、Init_win_bytes(S->C)7th packet、Data_xmit_time,真实域名流量和DGA流量在该特征子集中存在明显差异。
表1 数据集的特征子集
从已收集的真实域名集与DGA域名集生成的流量数据包中各随机选取200个数据包,特征对比结果如图4所示。
图4(a)表示F1特征对比,DGA流量域名因有随机性、名称长度较长等特征,客户端发送给服务器端的第七个包的数据包的大小明显大于良性流量。图4(b)表示F2特征对比,因DGA算法生成的域名多数为无效域名,服务器难以解析,所以服务器端返回的第七个包的数据包大小明显小于良性流量数据包[19]。图4(c)表示F3特征对比,DGA流量查询时间明显长于良性流量查询时间。
(a) F1:Init_win_bytes(C->S)7th packet (b)F2:Init_win_bytes(S->C)7th packet (c)F3:Data_xmit_time
该文从初始pacpng数据包等高维数据中选择包含数据包长度、传输时间等最优特征子集,提高了分类模型的鲁棒性,减少了模型的生成和分类时间等成本,从而生成的模型具有更高分类效率和泛化能力。
2 基于KNN的DGA-DoH识别方法
2.1 算法总体设计
目前,基于DGA域名的检测方法已趋于成熟,但这些方法无法识别加密后流量,因此该文提出基于KNN模型的DGA-DoH识别方法,分类框图如图5所示,由DoH流量收集、特征分析、KNN分类器部分组成。通过特征工程和机器学习紧密结合的办法解决加密恶意流量分类中的分析与检测精度不足的问题。
图5 DGA-DoH流量分类框图
(1)DoH流量收集。该文采用了doh-proxy代理[15],用于实现通过HTTP发送DNS查询并获得DNS响应时使用HTTPS的URI[14]。对已收集的所有域名进行查询,得到域名数据集中每个域名在DoH网络中的流量,生成DoH数据集,并做好筛选标注及分类。为保证实验数据真实性,随机选择部分数据为实验数据。
(2)特征工程。观察和分析命令控制服务传输过程所产生的HTTP报文内容、HTTP流量及对应的TCP流量后,根据图4中恶意流量与真实域名流量特征分析对比结果,该文选取DoH数据集中数据包的长度和时序信息等特征数据。
(3)训练模型。选取数据集中90%数据包为训练集,并根据提取特征进行训练。
(4)KNN分类器。选取数据集中剩余10%的数据包为分类对象,对生成的分类器进行验证。
(5)模型评估。对完成分类的数据包进行检测,调整分类模型的参数,得到最优分类模型。
2.2 DGA-DoH数据获取
该文通过doh-proxy代理方式搭建DoH网络[15],流量传递方式如图6所示。DoH网络中主要包括DoH客户端、Web服务器、DoH中转服务器、DoH服务器等部件。该文通过在不同主机分别安装DoH客户端和DoH中转服务器,在查询过程中使用Wireshark软件从客户端网关监测。DoH流量采用加密方式进行传输,因此根据DoH中转服务器IP地址对流量进行过滤,抓取客户端与中转服务器端之间的流量数据。
图6 DoH网络流量传输
将截取的流量数据进行保存,并使用Wireshark的命令行版本及Linux命令行等工具对生成的pcapng文件进行解析,提取数据包中源IP、目标IP、数据包长度及传输时间等特征信息,获得所需的DGA-DoH数据包。
基于以上方法,保证了抓取数据是完成了DoH请求所产生的完整流量,增加了实验数据的真实性,有效降低了因噪声带来的实验误差。
2.3 基于KNN的DGA-DoH识别方法
2.3.1 数据预处理
选取表1中数据集的特征子集作为本次实验的数据集。将真实域名流量和DGA域名流量分类整理。对DGA-DoH流量识别,采用KNN算法对加密流量进行分类,对数据集中流量标签进行二值化处理,处理后标签只有0和1两种标签类型[20]。待处理的数据格式调整为分类器输入格式,并将数据分成特征向量和对应的分类标签向量两部分。
根据图4部分特征数值对比可知,表1中F1、F2、F3三种特征的权重没有较大差异。因此该文采用数值归一化方法将任意取值范围的特征值归一化的相关公式为:
其中,Min和Max分别是数据集中的最小特征值和最大特征值。
数据处理后的格式如表2所示。
表2 数据归一化后的格式
2.3.2 KNN分类器
在训练集中,将数据标记成DGA流量或真实域名流量,输入测试集中未知流量后,将测试数据与训练数据集中对应的特征数据进行比较,提取训练样本集中最相似数据的分类标签,作为未知流量的分类[21]。
随机选取数据集中90%的数据为训练数据集,根据欧氏距离公式在二维实数向量空间中计算当前点与已知类别点之间的距离。
将当前点与已知类别点的距离按从小到大排列,选取前K个点的类别,计算类别次数,返回次数最多的类别为当前点的类别。
3 实验验证
3.1 实验数据集
实验数据为DoH流量数据包,为保证含有更多种类的DGA家族,提高分类模型验证效果,DGA域名集利用Python实现的DGA生成算法[22];由于DGA域名通常具有生存周期低、访问量低等特点,难以在Alexa网站排名中处于Top位,因此真实域名采用的是Alexa前100万条域名[23]。将已收集的域名经查询、处理、解析后得到实验所需DoH流量数据集。表3包括DoH流量数据集中的域名种类、数据包数量等信息,数据集的90% DoH流量用于训练模型,剩余10% DoH流量用于测试生成的分类器。
表3 数据集
3.2 实验环境
该文基于doh-proxy[15]工具构建DoH网络环境,提取数据包特征后生成DGA-DoH数据包。将已收集的数据包分类标注后,采用Python语言编写KNN分类模型,具体实验环境如表4所示。
表4 实验环境
3.3 结果与分析
为了评估模型的准确率,该文参考了模型的交叉熵,交叉熵用于度量某一域名真实标签与模型分类后标签分布间的差异性信息,已知交叉熵越大,模型分类结果与真实标签越接近。随机选择数据集中90%数据作为训练样本来训练分类器,使用剩下的10%数据为实验的测试数据,检测分类器的准确率。
已知目前检测DGA流量的方法对DGA-DoH模型不具有参考价值,因此该文仅对比当前模型的检测精度,选取最优模型。为了优化模型,比较不同K值时模型的准确率和交叉熵,结果如表5所示。由表5可知,随K值的增加,模型的准确率及交叉熵呈递减趋势。因此选取与当前点距离较近的前2个点的类别(即K值为2),返回较多点的类别为未知流量的类别,此时分类器的准确率为79%,最大交叉熵为9.047。
表5 模型的交叉熵与准确率
4 结束语
该文围绕僵尸网络在新型DoH协议中工作机制的问题,对其构建方式及检测技术进行了相关研究,观察和分析了命令控制服务传输过程所产生的HTTP报文内容、HTTP流量及对应的TCP流量,提取相应的特征,利用KNN算法对训练数据进行学习后创建分类器并采用验证数据进行验证。
通过实验分析总结了DoH协议中DGA流量特征,在未来的工作中,会继续观察DNSCrypt、DoT等DNS加密协议中恶意流量特征,提高检测精度,为DoH、DoT等加密DNS协议网络安全提供更多的保障。