基于日志统计特征的DNS隧道检测
Detection of DNS tunnels based on log statistics feature
通讯作者:
收稿日期: 2019-09-24
Received: 2019-09-24
作者简介 About authors
王琪(1995—),女,硕士生,从事网络管理研究.orcid.org/0000-0003-0052-5360.E-mail:
以DNS服务器的日志为数据源,提取出二级域名的熵、子域名个数、缓存命中率等多维日志统计特征, 将日志量化为特征向量集;以特征向量集为数据源,使用随机森林算法进行模型训练,并使用十折交叉验证的方法对模型参数进行调整,对模型进行优化,提高整体检测精度;在不同分类算法下进行对比实验,并将实验结果与已有研究方法进行比较. 实验结果表明,提出的检测方法在召回率达到98.5%的情况下,有不低于90%的准确率,检测精度有所提高,即提出的算法能有效检测DNS隧道.
关键词:
The log of DNS server was used as the data source to extract the multi-dimensional statistical characteristics of the secondary domain name, such as the entropy of the domain, the number of sub domain names, and the cache hit rate. The logs were quantized as feature vector set, which was used as data source. The random forest algorithm was used for model training, the model parameters were adjusted by the method of ten fold cross validation, and the model was optimized to improve the overall detection accuracy. Finally, comparative experiments were made under different classification algorithms, and compared with the existing research methods. The experimental results show that the proposed detection method had an accuracy rate of not less than 90% when the recall rate was 98.5%, and the detection accuracy was improved. Thus, the proposed algorithm can effectively detect DNS tunnel.
Keywords:
本文引用格式
王琪, 谢坤, 马严, 丛群.
WANG Qi, XIE Kun, MA Yan, CONG Qun.
随着互联网的发展,网络安全问题日益凸显,企业常面临敏感数据被窃取的威胁. 网络防火墙通常默认允许DNS流量通过,且不会对DNS数据包进行深入检查,因此,DNS隧道技术常被攻击者用来窃取信息[1],DNS隧道的防护缺欠极易给企业带来不可估量的损失[2]. 近年来,通过DNS隧道进行攻击的事件频发. APT组织从2014年起,对伊朗政府和电信部门都发起过攻击[3],2019年,此组织的一部分攻击工具泄露,其中就存在DNS隧道. 2017年8月发生的XshellGhost事件中,NetSarang旗下多款软件被植入了高级后门,DNS隧道是其通信方式之一,直接导致使用其软件的用户成为被远程控制的受害者[4]. 因此,针对DNS隧道检测方法的研究对维护当前网络环境的安全有重要意义和价值.
根据所采取的特征,现有检测方法主要分2种. 一种是基于载荷的特征,包括请求响应大小,域名的特点分析(如:含有的字符频率、域名长度、信息熵、N-gram)和记录类型等. 使用此类特征进行隧道检测的缺陷在于对部分域名(如:URL编码的域名)会产生误报,并且DNS隧道软件可以控制生成域名的长度、字符频率等特征,使其不再具备参考价值. 另一种是基于网络流量的特征,主要针对DNS流量,如:单个会话中上行的大稀数据包占比等. 此类特征的缺陷在于现有的DNS隧道构建软件(如:Dnscat2)也可以对查询请求的发送速率等指标进行控制.
目前,已有很多针对DNS隧道检测方法的研究. Ahmed等[2]通过提取完全限定域名(fully qualified domain name, FQDN)字符数、域名中大写字母与数字的数量等特征来构造检测方法. 谷传征[5]通过提取DNS数据包中DNS请求的域名长度、请求类型等数据,对数据包特征进行实时采集,利用阈值来检测DNS隧道. Yu等[6]通过提取DNS数据包载荷中域名熵、域名的N-gram值、编码情况等特征,提出了一种基于行为的DNS隧道检测方法. Liu等[7]通过提取数据包载荷与网络流量两方面特征(包括数据包的大小、请求时间间隔、子域熵等),利用决策树构建检测模型. Lin等[8]构建了一个包括过滤域名生成算法 (domain generate algorithm, DGA)以及多种隧道检测算法的复合隧道检测模型,用于检测多种协议的隧道. 罗有强等[9]利用五元组标识DNS会话,从会话角度提取特征来检测DNS隧道.
通过分析现有文献的DNS隧道检测方法可知,已有方法在达到较高准确率的情况下仍有较高的误报率,并且大部分方法都使用DNS数据包进行检测. 当前方法的不足之处主要有以下2点:一方面,通过解析数据包来提取特征数据增加了计算量;另一方面,大多忽视了部分可以从日志中提取的特征. 目前,仅有Nadler等[10]的研究通过的研究通过分析DNS日志来提取子域名个数等特征,进行DNS隧道检测,但其检测精度仍有进一步提升inebreak/>的空间.
本文基于已有的研究方法,以DNS服务器查询日志为数据源,挖掘以缓存命中率为主的统计特征,构建一种能够保证准确率且误报率更低的DNS隧道检测方法. 首先,通过修改DNS服务器源码,将DNS请求查询的缓存命中情况暴露于DNS服务器日志中;其次,采集DNS服务器日志作为原始数据,从日志中提取缓存命中率等特征,将每条日志表示为7维向量;然后,以向量化后的日志为数据源,使用随机森林算法训练DNS隧道检测模型,并使用交叉验证法对模型参数进行调节,提高模型的检测精度;最后,为了证明提出算法的有效性,选取代表性算法进行对比实验.
1. 基于日志统计特征的DNS隧道检测方法
图 1
图 1 基于日志统计特征DNS隧道检测方法流程图
Fig.1 Flow chart of DNS tunnel detection method based on log statistical characteristics
1.1. 数据采集与预处理
根据特征构建(详见第1.2节)需要,对DNS服务器源码进行修改,在日志中暴露DNS请求的缓存命中情况,共实现2种DNS服务器的源码修改,分别为BIND与CoreDNS. BIND是当前广泛使用的开源DNS服务器,因此最终采用BIND作为DNS服务器,将源码修改后的BIND部署在实验环境中. 采集此DNS服务器产生的日志,并对日志进行预处理,包括填补缺失值、日志信息提取等.
1.2. 特征构建
表 1 所提检测算法使用的日志特征
Tab.1
参数 | 含义 |
| 二级域名的熵 |
| A/AAAA资源类型查询占比 |
| 二级域下子域名的个数 |
| 二级域下特异子域名的个数占比 |
| 域名长度 |
| 最长元音距 |
| 缓存命中率 |
1.2.1. 二级域名的熵
设待计算的域名
则该二级域的熵值计算公式如下:
熵用来描述对象的无序程度,DNS隧道是信息加密后生成的,因此与正常域名的熵相比,其域名的熵明显增大.
1.2.2. A/AAAA资源类型查询占比
对于某一条日志
根据文献[12]中所述,99.4%的DNS查询使用的记录类型都为A、AAAA、PTR,然而DNS隧道通信通常会使用TXT、SRV记录,因此DNS隧道域名的
1.2.3. 二级域下子域名的个数
对于某二级域D,有
式中:
正常流量中的域名一般都是固定的,为了提高查询速度,DNS服务器提供了缓存机制[13],每次查询前先在缓存中查找结果,若当前查询记录在缓存中不存在,再去递归服务器中查找相应记录. DNS隧道流量将每次通信的信息放在域名中,因此与正常域名相比,隧道域名的子域名个数明显增多.
1.2.4. 二级域下独特查询占比
此特征由
若该二级域为DNS隧道用来通信的域,则定会发送大量不重复的查询请求,因此隧道域的
1.2.5. 域名长度
对于某二级域D,定义该二级域的域名长度为
式中:
1.2.6. 最长元音距
若待检测的域名是
例如:域名
1.2.7. 缓存命中率
命中缓存次数的定义如下:由于DNS的缓存机制,每次发起查询时会先在DNS服务器中的缓存进行查询,若该次查询是从缓存中得到的结果,则视为命中缓存一次. 假设某二级域D在时间t内共有
DNS服务有缓存机制,DNS查询时的返回数据中包含生存时间 (time to live,TTL)值,表示本次查询记录在缓存中的可存在时间. 正常的域名由于要提高DNS查询速度,会设置一个较高的TTL,且查询域名一般情况下不会改变,缓存命中率较高. 对于DNS隧道,一方面其通信方式决定了每次用于通信的域名都是不同的,因此会很少命中缓存;另一方面,经过本实验中的抓包分析,可知DNS隧道数据包中的TTL值都很小,因此,即使DNS服务器设置强制缓存,隧道域名下的缓存命中率也极低.
1.3. 基于随机森林的检测模型
基于第1.2节DNS隧道的7个特征,将每条DNS查询日志表示为如下三元组
图 2
本实验使用的随机森林中决策树的特征选择指标是信息增益(详见第1.3.1节). 起初使用默认参数进行模型训练,之后对模型中的每个参数进行网格化搜索,通过交叉验证法确定最后的模型参数(详见第1.3.1节).
1.3.1. 信息增益算法[10]
随机森林算法利用了集成学习的思想,是一个包含多棵分类与回归树 (classification and regression tree,CART)的分类器. 决策树通过计算各个特征的信息增益来决定各个特征的选取顺序. 假设当前待分类的样本S有M个类别标签:
对于某一个特征来说,假如其为离散,有
在给定条件下,属于类别K的条件熵如下式所示:
若特征值
对于基准值
条件熵为
最终特征
1.3.2. 基于随机森林的分类模型
假设原始训练集的大小为
假设当前随机森林由上述
随机森林的输出结果取决策树输出集合的众数,
1.3.3. DNS隧道检测模型的评估
本文提出的DNS隧道检测问题为二分类问题,可使用如表2所示的混淆矩阵来描述检测模型的效果.
在混淆矩阵上可得到模型准确率
采用分类算法可以得出每个输入的数据为正例的概率. 设定一个阈值
图 3
图 3 接受者操作特征(ROC)曲线图例
Fig.3 Receiver operating characteristic (ROC) curve sample
1.3.4. 基于随机森林的DNS隧道检测模型训练算法
本文的DNS隧道检测模型训练算法步骤如下.
输入:样本集
输出:DNS隧道检测模型
1. 初始化参数
2. 读入样本集Q
3. 将实验样本Q使用分层抽样的方法,分别将正负样本,随机分成十等份
4. 在实验样本集Q上训练运行随机森林算法创建模型
5. 通过交叉验证法调整随机森林模型参数,需要调整参数集合P有决策树个数,随机森林划分时考虑的最大特征数,决策树最大深度
6. FOR p IN params:
7. 给参数p设置网格搜索范围range
8. FOR p_value IN range
9. 在当前参数的设定取值范围内给模型参数赋值,使用划分好的交叉验证集合中的训练集进行训练,再用对应测试集对模型进行测试,采取十折交叉验证的方式对模型参数进行调整,将这 δ 的平均值作为本次验证后的模型评分.
10. END FOR
11. 取
12. END FOR
13. 得到模型的最佳参数
14. 输出训练好的DNS隧道检测模型
2. 实验过程及分析
首先,本实验对目前使用范围较广的2种DNS服务器源码进行修改,从而获取DNS查询的缓存命中情况,实验环境为某公司的网络环境,使用的DNS服务器是BIND;其次,对DNS服务器产生的日志进行分析,提取第1.2节中所列出的7个特征,得到特征向量集之后使用随机森林模型对其进行训练,从而得到DNS隧道检测模型;最后,将提出的方法与多种代表性算法进行对比实验.
2.1. 实验环境
本研究采用的实验测试机搭载64位Windows10操作系统和Anaconda 4.5.11集成Python环境,配有Intel (R) Core(TM) I5-3470 @3.20 GHz 3.60 GHz处理器,4 G内存. 实验数据从某公司DNS服务器采集,DNS服务器版本为BIND9.11,CoreDNS 1.5.0. 使用的DNS隧道软件有3种:Iodine v0.7.0、Dnscat2、Dns2tcp v0.5.2.
2.2. 实验数据集
本研究采用的数据集由以下4个部分构成:某公司DNS服务器上采集到样本共12971条;使用Iodine、Dns2tcp和Dnscat2 这3种隧道工具分别产生72、24、48条数据样本.
首先从某公司DNS服务器采集一天之内8个时间段的访问日志,经人工检查全部为正常访问日志,取某一客户端对同一个二级域名访问次数最多的样本进行实验. 分别取3种DNS隧道软件在空闲与繁忙2种状态下的日志,任意截取6个时间段,并且使用其所能支持的查询记录进行数据收集,共产生24种DNS隧道日志,共收集到144个隧道样本. 本实验实现了CoreDns与BIND 这2种DNS服务器的缓存命中率采集. 为了获取DNS缓存命中率,修改2种软件的源码,在其输出日志中添加
2.3. 关键特征验证
对获取的数据提取特征后,将其向量化成7维向量,保存为“.csv”格式,用来训练模型.
在本实验提取的特征中,最长元音距
图 4
图 4 正常流量与隧道流量的最长元音距分布
Fig.4 Distribution of longest vowel distance between normal flow and tunnel flow
图 5
图 5 正常流量与隧道流量的缓存命中率分布
Fig.5 Cache hit ratio distribution of normal traffic and tunnel traffic
2.4. DNS流量分类试验
本实验使用sklearn中的随机森林算法进行实验,初始化随机森林中的参数,选择该工具的默认参数,并对参数进行网格化搜索,以优化模型,最后使用十折交叉验证方法验证模型精度,使用
为了评估本模型对DNS隧道的检测效果,分别针对不同的分类模型和以往的检测方法设计对比实验.
表 3 不同分类算法的实验结果对比
Tab.3
分类算法 | | | |
Logistic回归 | 0.902 | 80.7 | 95.4 |
朴素贝叶斯 | 0.818 | 72.7 | 90.1 |
SVM | 0.951 | 93.6 | 97.2 |
随机森林 | 0.991 | 95.2 | 98.5 |
表 4 不同特征维度下的实验结果对比
Tab.4
方法名称 | | |
本文方法 | 95.2 | 98.5 |
对比实验 | 88.1 | 97.9 |
图 6
图 6 不同特征维度下的十折叉验证模型评分对比
Fig.6 Comparison of ten cross-validation model scores under different feature dimensions
3. 结 语
本文从DNS服务器角度出发,提出了一种基于日志统计特征的DNS隧道检测方法,引入缓存命中率等多维统计特征,并基于随机森林算法完成了DNS隧道检测模型的训练. 本文方法在召回率为98.5%的情况下,有不低于90%的准确率,并且由对比实验结果可知,提出的DNS隧道检测方法整体精度有所提高,能有效检测出DNS隧道.
未来研究工作拟从以下两方面展开:1)从日志中挖掘出更多特征用以检测DNS隧道;2)以提出的模型为基础,设计并开发一套完整的DNS隧道检测系统.
参考文献
软件供应链安全风险管控, 任重而道远
[J].DOI:10.3969/j.issn.1674-7844.2018.11.025 [本文引用: 1]
Software supply chain security risk management and control, there is a long way to go
[J].DOI:10.3969/j.issn.1674-7844.2018.11.025 [本文引用: 1]
基于通信行为分析的DNS隧道木马检测方法
[J].
DNS tunnel detection method based on communication behavior analysis
[J].
Detection of malicious and low throughput data exfiltration over the DNS protocol
[J].
基于第二级域名的FQDN个数的DNS隐蔽信道检测
[J].
Using FQDN number of the second-level domain name to detect DNS-based covert channels
[J].
Behavior-based tracking: exploiting characteristic patterns in DNS traffic
[J].
Botnet detection based on machine learning techniques using DNS query data
[J].DOI:10.3390/fi10050043 [本文引用: 1]
A Survey on dynamic mobile malware detection
[J].DOI:10.1007/s11219-017-9368-4 [本文引用: 1]
DNS tunneling detection method based on multilabel support vector machine
[J].
/
〈 |
|
〉 |
