浙江大学学报(工学版), 2020, 54(9): 1753-1760 doi: 10.3785/j.issn.1008-973X.2020.09.011

计算机技术

基于日志统计特征的DNS隧道检测

王琪,, 谢坤, 马严,, 丛群

Detection of DNS tunnels based on log statistics feature

WANG Qi,, XIE Kun, MA Yan,, CONG Qun

通讯作者: 马严,男,教授. orcid.org/0000-0001-8065-591X. E-mail: mayan@bupt.edu.cn

收稿日期: 2019-09-24  

Received: 2019-09-24  

作者简介 About authors

王琪(1995—),女,硕士生,从事网络管理研究.orcid.org/0000-0003-0052-5360.E-mail:vinchy_wq@qq.cn , E-mail:vinchy_wq@qq.com

摘要

以DNS服务器的日志为数据源,提取出二级域名的熵、子域名个数、缓存命中率等多维日志统计特征, 将日志量化为特征向量集;以特征向量集为数据源,使用随机森林算法进行模型训练,并使用十折交叉验证的方法对模型参数进行调整,对模型进行优化,提高整体检测精度;在不同分类算法下进行对比实验,并将实验结果与已有研究方法进行比较. 实验结果表明,提出的检测方法在召回率达到98.5%的情况下,有不低于90%的准确率,检测精度有所提高,即提出的算法能有效检测DNS隧道.

关键词: DNS隧道 ; 日志分析 ; DNS缓存 ; 随机森林 ; 恶意域名

Abstract

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: DNS tunnel ; log analysis ; DNS cache ; random forest ; malicious domain name

PDF (1001KB) 元数据 多维度评价 相关文章 导出 EndNote| Ris| Bibtex  收藏本文

本文引用格式

王琪, 谢坤, 马严, 丛群. 基于日志统计特征的DNS隧道检测. 浙江大学学报(工学版)[J], 2020, 54(9): 1753-1760 doi:10.3785/j.issn.1008-973X.2020.09.011

WANG Qi, XIE Kun, MA Yan, CONG Qun. Detection of DNS tunnels based on log statistics feature. Journal of Zhejiang University(Engineering Science)[J], 2020, 54(9): 1753-1760 doi:10.3785/j.issn.1008-973X.2020.09.011

随着互联网的发展,网络安全问题日益凸显,企业常面临敏感数据被窃取的威胁. 网络防火墙通常默认允许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隧道检测方法

基于日志统计特征的DNS隧道检测方法的整体流程如图1所示. 首先,部署DNS服务器,采集DNS日志;之后,对拿到的日志数据进行数据预处理;然后,对预处理后的日志进行特征提取;最后,使用随机森林算法训练分类模型,分类模型的训练过程详见第1.3节. 当前分类模型训练完成之后,即可基于此模型,执行实际DNS日志数据的实验与测试. 需要注意的是,对以往恶意软件使用的域名进行分析后得知,恶意软件会使用单一域名进行隧道通信,因此,所提检测方法建立在如下假设之上:DNS隧道通信使用的是特定的单一域名[10].

图 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. 特征构建

从处理后的日志数据中提取本实验使用的DNS日志特征,如表1所示. 表中特征均基于二级域提取,二级域为只有2层或2个域名标签的域名[11]. 假设存在某二级域 $D$,此二级域下的域名共有 $m$个,域名列表为 ${d_D} = \left\{ {{d_1},{d_2}, \cdots ,{d_m}} \right\}$,查询域名在此集合内的日志共有 $n$条,日志列表为 ${\rm{Logfile}}{_D} = \left\{ {{l_1},{l_2}, \cdots ,{l_n}} \right\}$,各特征的详细介绍如下.

表 1   所提检测算法使用的日志特征

Tab.1  Log features used by proposed detection algorithm

参数 含义
$E$ 二级域名的熵
${P_{\rm{t}}}$ A/AAAA资源类型查询占比
${C_{\rm{s}}}$ 二级域下子域名的个数
${P_{\rm{s}}}$ 二级域下特异子域名的个数占比
$L$ 域名长度
${L_{{\rm{mvd}}}}$ 最长元音距
${P_{\rm{c}}}$ 缓存命中率

新窗口打开| 下载CSV


1.2.1. 二级域名的熵

设待计算的域名 ${d_i}$中共有 $k$种字符,各字符频率为 ${P_d} = \left\{ {{p_1},{p_2}, \cdots ,{p_k}} \right\}$,由信息论可知,此域名的熵可通过下式进行计算:

$H\left( {{d_i}} \right) = - \mathop \sum \limits_{i = 1}^k {p_i} \log\; \left( {{p_i}} \right).$

则该二级域的熵值计算公式如下:

$E\left( D \right) = \frac{{\rm{1}}}{m}\sum\limits_{i = 1}^m {H({d_i})} .$

熵用来描述对象的无序程度,DNS隧道是信息加密后生成的,因此与正常域名的熵相比,其域名的熵明显增大.

1.2.2. A/AAAA资源类型查询占比

对于某一条日志 ${l_n}$和二级域D,其查询类型为 ${\rm{atype}}\;({l_i})$,当日志查询类型为A或AAAA时, ${\rm{atype}}\;({l_i})$的值为1;反之为0. A/AAAA查询类型占比为 ${P_{\rm{t}}}\;(D)$

${P_{\rm{t}}}(D) = \frac{{\rm{1}}}{n}\sum\limits_{i = 1}^n {{\rm{atype}}\;({l_i})} .$

根据文献[12]中所述,99.4%的DNS查询使用的记录类型都为A、AAAA、PTR,然而DNS隧道通信通常会使用TXT、SRV记录,因此DNS隧道域名的 ${P_{\rm{t}}}$值较正常域名会明显降低.

1.2.3. 二级域下子域名的个数

对于某二级域D,有

${C_{\rm{s}}}(D) = {\rm{count}}\;\left( {{\rm{unique}}\;\left( {{d_D}} \right)} \right).$

式中: ${\rm{unique}}\left( {{d_D}} \right)$为去重后的域名集合,count (unique(dD))为去重后的域名集合的个数.

正常流量中的域名一般都是固定的,为了提高查询速度,DNS服务器提供了缓存机制[13],每次查询前先在缓存中查找结果,若当前查询记录在缓存中不存在,再去递归服务器中查找相应记录. DNS隧道流量将每次通信的信息放在域名中,因此与正常域名相比,隧道域名的子域名个数明显增多.

1.2.4. 二级域下独特查询占比

此特征由 ${C_{\rm{s}}}$演化而来,某二级域D下共有n条日志,为 ${\rm{Logfil}}{\rm{e}}{ _D} = \left\{ {{l_1},{l_2}, \cdots ,{l_n}} \right\}$,则该二级域下独特查询占比为 ${P_{\rm{s}}}$,有

${P_{\rm{s}}}(D) = \frac{{{C_{\rm{s}}}(D)}}{n}.$

若该二级域为DNS隧道用来通信的域,则定会发送大量不重复的查询请求,因此隧道域的 ${P_{\rm{s}}}$比例高于正常二级域的 ${P_{\rm{s}}}$.

1.2.5. 域名长度

对于某二级域D,定义该二级域的域名长度为

$L(D) = \frac{{\rm{1}}}{m}\sum\limits_{i = 1}^m {{\rm{len}}\;({d_i})} .$

式中: ${\rm{len}}\;({d_i})$为子域名 ${d_i}$的长度减去二级域D的长度后的剩余长度. 例如:某域名 ${d_i}$为www.baidu.com,其二级域为baidu.com,则此域名的长度 ${\rm{len}}\;({d_i})$为11−8=3. DNS隧道域名要携带加密信息进行隧道通信,与正常域名相比,DNS隧道的域名长度更长.

1.2.6. 最长元音距

若待检测的域名是 ${d_i}$,元音字符集合为 $\left\{ {{\rm{'a','e','i','o','u'}}} \right\}$,在 ${d_i}$中统计各个元音字符的距离. 元音距离的定义如下:对于 ${d_i}$除去二级域后剩余部分中的某个元音字符,若该字符后驱无元音,则其元音距离为该字符距离字符串末尾的距离;若该字符后驱有元音,则其元音距离为2个元音字符的距离. 得到待检测域名 ${d_i}$中的元音距离集合为 ${L_{\rm{v}}}({d_i}) = \left\{ {{l_{{\rm{v}}1}},{l_{{\rm{v}}2}}, \cdots ,{l_{{\rm{v}}k}}} \right\}$,则其归属的二级域的元音距为

${L_{\rm{mvd}}}(D) = \frac{{\rm{1}}}{m}\sum\limits_{i = 1}^m {\max \left[ {{L_{\rm{v}}}({d_i})} \right]} .$

例如:域名 $d = '{\rm{selected}}{\rm{.hicloud}}{\rm{.com}}'$,其元音距离集合为 ${L_{\rm{v}}}(d) = \left\{ {1,2,1} \right\}$,则此域名的元音距为 $\max ({L_{\rm{v}}}(d)) = 2$. 文献[14]将元音距用于检测不断变化前缀域名攻击,并且此前也有使用域名中的元音字符比例来评判域名可读性的相关研究[15-16],可读性即域名易于发音的程度. 英文单词的发音特征与音节相关,因此本文使用元音距离来表示发音节奏. 隧道域名一般通过加密生成,随机性强,不注重发音[17],而正常域名通常要保证发音节奏,因此正常域名的元音距离小于隧道域名.

1.2.7. 缓存命中率

命中缓存次数的定义如下:由于DNS的缓存机制,每次发起查询时会先在DNS服务器中的缓存进行查询,若该次查询是从缓存中得到的结果,则视为命中缓存一次. 假设某二级域D在时间t内共有 ${n_{\rm{c}}}$次查询命中缓存,则该二级域的缓存命中率为

${P_{\rm{c}}}(D) = \frac{{{n_{\rm{c}}}}}{n}.$

DNS服务有缓存机制,DNS查询时的返回数据中包含生存时间 (time to live,TTL)值,表示本次查询记录在缓存中的可存在时间. 正常的域名由于要提高DNS查询速度,会设置一个较高的TTL,且查询域名一般情况下不会改变,缓存命中率较高. 对于DNS隧道,一方面其通信方式决定了每次用于通信的域名都是不同的,因此会很少命中缓存;另一方面,经过本实验中的抓包分析,可知DNS隧道数据包中的TTL值都很小,因此,即使DNS服务器设置强制缓存,隧道域名下的缓存命中率也极低.

1.3. 基于随机森林的检测模型

基于第1.2节DNS隧道的7个特征,将每条DNS查询日志表示为如下三元组 $\left( {Q,T,C} \right)$,其中, $Q$为查询域名, $T$为查询类型, $C$为发出查询的客户端IP. 经过特征提取之后,每个二级域对应的特征向量如下: $[E,{P_{\rm{t}}},{C_{\rm{s}}},{P_{\rm{s}}},L,{L_{\rm{mvd}}},{P_{\rm{v}}}]$. 结合对以往方法的调研与分析,采用随机森林算法作为DNS隧道检测方法的分类模型[18-19]. DNS隧道检测实际上是一个二分类问题,即将数据分为隧道数据与正常数据. 随机森林算法利用多棵决策树对数据进行训练和预测,模型训练的整体流程如图2所示. 首先,将输入的数据放到每棵决策树上;然后,对数据特征进行分类,并对每个特征进行评分;最终集成所有的分类投票结果,将投票次数最多的类别指定为最终的输出.

图 2

图 2   DNS隧道检测模型训练流程

Fig.2   DNS tunnel detection model train flow


本实验使用的随机森林中决策树的特征选择指标是信息增益(详见第1.3.1节). 起初使用默认参数进行模型训练,之后对模型中的每个参数进行网格化搜索,通过交叉验证法确定最后的模型参数(详见第1.3.1节).

1.3.1. 信息增益算法[10]

随机森林算法利用了集成学习的思想,是一个包含多棵分类与回归树 (classification and regression tree,CART)的分类器. 决策树通过计算各个特征的信息增益来决定各个特征的选取顺序. 假设当前待分类的样本SM个类别标签: $K = \left\{ {{K_1},{K_2}, \cdots ,{K_M}} \right\}$,每个样本有N个特征: $T = \left\{ {{T_1},{T_2}, \cdots ,{T_N}} \right\}$. 由信息论可知,信息熵表示数据的无序程度,则类别K的信息熵为

$H\left( K \right) = - \mathop \sum \limits_{i = 1}^M p\left( {{K_i}} \right) \log\; \left( {p\left( {{K_i}} \right)} \right).$

对于某一个特征来说,假如其为离散,有 $z$个值,即 ${T_i} = \left\{ {{T_{i1}},{T_{i2}}, \cdots ,{T_{iz}}} \right\}$;信息增益(information gain,IG)是由信息熵得来的,表示已知特征 ${T_i}$的信息,使得K类数据的不确定性减少的程度,则其信息增益如下式所示:

${\rm{IG}}\left( {K|{T_i}} \right) = H\left( K \right) - H\left( {K|{T_i}} \right).$

在给定条件下,属于类别K的条件熵如下式所示:

$H\left( {K|{T_i}} \right) = - \mathop \sum \limits_x^M \mathop \sum \limits_j^z p\left( {{K_x},{T_{ij}}} \right)\log p\left( {{K_x},{T_{ij}}} \right).$

若特征值 ${T_i}$是连续的,则可以对连续特征值进行离散化处理,找到增益最大的那一种分类,其中一种离散化方法是使用二分法. 假设当前样本集里的特征值 ${T_i}$是连续的,共有 $z$ 个值, ${T_i} = $ $\left\{ {{T_{i1}},{T_{i2}}, \cdots ,{T_{iz}}} \right\}$. 取基准值 $\alpha $,可以使用如下条件将样本数据划分为两部分:一部分样本的特征 ${T_i} \leqslant \alpha $,另一部分 ${T_i} > \alpha $. 对于特征 ${T_i}$,可以有 $z - 1$个基准值,如下式所示:

${\alpha _k} = \left\{ {\frac{{\rm{1}}}{2}\left( {{T_{ik}} + {T_{i(k + 1)}}} \right)|1 \leqslant k \leqslant z} \right\}.$

对于基准值 ${\alpha _k}$,当前大于 ${\alpha _k}$的个数为 $\left| {S_{{T_i}}^{{\alpha _k} + }} \right|$,小于 ${\alpha _k}$的个数为 $\left| {S_{{T_i}}^{{\alpha _k} - }} \right|$,当前的信息增益为

${\rm{I}}{\rm{G}}_{{{\alpha _k}}}\left( {K|{T_i}} \right) = H\left( K \right) - {H_{{\alpha _k}}}\left( {K|{T_i}} \right).$

条件熵为

${H_{{\alpha _k}}}\left( {K|{T_i}} \right) = - \sum\limits_{\theta \in \left\{ {{\alpha _k} - ,{\alpha _k} + } \right\}} {\frac{{\left| {S_{{T_i}}^\theta } \right|}}{{\left| S \right|}}\sum\limits_{x = 1}^M {\left[ {p\left( {{K_x},{T_i}} \right)\log p\left( {{K_x},{T_i}} \right)} \right]} } .$

最终特征 ${T_i}$的信息增益为每个二分类下信息增益的最大值:

${\rm{IG}}\left( {K|{T_i}} \right) = {\rm{max}}\;\left( {{H_{{\alpha _k}}}\left( {K|{T_i}} \right)} \right);1 \leqslant k \leqslant z.$

1.3.2. 基于随机森林的分类模型

假设原始训练集的大小为 $X$,每个样本的特征维度为 $Y$,对于每一棵决策树:首先,使用Bootstrap Sample(有放回抽样)方法进行采样,对原始训练集进行X次随机有放回的数据选取,构成新的训练集;其次,选取常数 $y < Y$,在每一步抽样过程中,只随机地选取 $y$个特征构成新的特征向量,在每一个结点进行分裂生长时,使用第1.3.1节中所述的信息增益算法选取一个特征;然后,在新生的树结点上使用剩下的 $y - 1$个特征继续采用信息增益算法进行分裂生长,直到特征取完,到达叶子结点,停止此过程.

假设当前随机森林由上述 $\beta $棵决策树构成,当前输入样本为 $Q = \left( {{q_1},{q_2}, \cdots ,{q_X}} \right)$,每一棵决策树都会输出相应的结果,则决策树的输出集合为 $A = \left( {{a_1},{a_2}, \cdots ,{a_\beta }} \right)$,对于 ${a_i}$有2种取值情况:当前输入为隧道流量时, ${a_i}$取值为0;当前输入为正常流量时, ${a_i}$取值为1. 因此,对于每个样本 ${q_i}$$\beta $棵决策树的投票结果为

$V\left( {{q_i}} \right) = \mathop \sum \nolimits_{j = 1}^\beta {a_j}.$

随机森林的输出结果取决策树输出集合的众数, ${{V\left( {{q_i}} \right)} / \beta } > 0.5$表明当前输入被判断为隧道流量, ${{V\left( {{q_i}} \right)} / \beta } \leqslant 0.5$表明当前输入被判断为正常流量,则输出结果为

$R\left( {{q_i}} \right) = \left\{ {\begin{array}{*{20}{c}} {1,\; {{V\left( {{q_i}} \right)} / \beta } > 0.5}; \\ {0,\;{{ V\left( {{q_i}} \right)} / \beta } \leqslant 0.5}. \end{array}} \right.$

1.3.3. DNS隧道检测模型的评估

本文提出的DNS隧道检测问题为二分类问题,可使用如表2所示的混淆矩阵来描述检测模型的效果.

表 2   混淆矩阵

Tab.2  Confusion matrix

混淆矩阵 预测值
正类 负类
实际值 正类 TP FN
负类 FP TN

新窗口打开| 下载CSV


在混淆矩阵上可得到模型准确率 ${R_{\rm{pre}}}$,召回率 ${R_{\rm{re}}}$,真正例率 ${R_{\rm{TP}}}$,假正例率 ${R_{\rm{FP}}}$,分别如下所示:

${R_{\rm{pre}}}{\rm{ = }}\frac{{\rm{TP}}}{{\rm{TP} + \rm{FP}}},$

${R_{\rm{re}}}{\rm{ = }}\frac{\rm{TP}}{\rm{TP} + {\rm{FN}}},$

${R_{\rm{TP}}}{\rm{ = }}\frac{\rm{TP}}{\rm{TP} + {\rm{FN}}},$

${R_{\rm{TP}}}{\rm{ = }}\frac{\rm{TP}}{\rm{TP} + {\rm{FN}}}.$

采用分类算法可以得出每个输入的数据为正例的概率. 设定一个阈值 $t$,规定输入数据为正例的概率大于等于 $t$时判断该数据为正例,反之为负例,则对于每个阈值可以对应计算出一组 $({R_{\rm{TP}}}, {R_{\rm{FP}}})$,将其在二维坐标系中绘制对应坐标点,可得到该模型的接收者操作特征 (receiver operating characteristic,ROC)曲线,如图3所示. 定义ROC曲线对应的线下面积[20](即图3中阴影部分面积)为 ${\delta }$. 由ROC曲线定义可知,曲线越靠近右上角,即 ${\delta }$越大,模型分类效果越好. 因此,本研究使用 ${\delta }$来评价模型的好坏.

图 3

图 3   接受者操作特征(ROC)曲线图例

Fig.3   Receiver operating characteristic (ROC) curve sample


1.3.4. 基于随机森林的DNS隧道检测模型训练算法

本文的DNS隧道检测模型训练算法步骤如下.

输入:样本集 $Q = \left( {{q_1},{q_2}, \cdots ,{q_X}} \right)$,每个样本为 $k$维向量( $k = 7$),使用默认参数.

输出: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. 取 ${\delta }$最高时参数的取值作为对应参数 p 的最佳取值

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种软件的源码,在其输出日志中添加 ${\rm{hitcache}}$字段,当其值为1时,表示当前查询命中了缓存;当其值为0时,表示当前查询未命中缓存.

2.3. 关键特征验证

对获取的数据提取特征后,将其向量化成7维向量,保存为“.csv”格式,用来训练模型.

在本实验提取的特征中,最长元音距 ${L_{\rm{mvd}}}$与缓存命中率 ${P_{\rm{c}}}$未在以往研究中出现过,因此本研究针对这2个特征进行实验测试并统计数据,以验证其有效性. 如图4所示为本研究实验数据集的 ${L_{\rm{mvd}}}$概率分布图,横坐标为 ${L_{\rm{mvd}}}$的范围,纵坐标为 ${L_{\rm{mvd}}}$的值落在该范围内的日志的比例,设为θ;如图5所示为本文实验数据集的 ${P_{\rm{c}}}$的分布情况,横坐标为 ${P_{\rm{c}}}$的范围,纵坐标为 ${P_{\rm{c}}}$的值落在该范围内的日志的比例,设为ρ;并且,在本实验数据中,Iodine、Dnscat2和Dns2tcp 3种隧道工具产生的隧道域名的平均 ${L_{\rm{mvd}}}$分别为74.5、18.41、13.25,3种隧道域名的 ${P_{\rm{c}}}$都为0. 可见,正常流量与隧道流量的 ${L_{\rm{mvd}}}$${P_{\rm{c}}}$特征有明显差距.

图 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中的随机森林算法进行实验,初始化随机森林中的参数,选择该工具的默认参数,并对参数进行网格化搜索,以优化模型,最后使用十折交叉验证方法验证模型精度,使用 ${\delta }$对模型进行评估,使用实验的 ${\delta }$均值作为模型最终评分,则目前模型评分为0.991.

为了评估本模型对DNS隧道的检测效果,分别针对不同的分类模型和以往的检测方法设计对比实验.

本文选取常用的Logistic回归、朴素贝叶斯分类算法以及支持向量机(SVM)算法[8, 21]进行对比实验,实验结果如表3所示. 由对比实验结果可知,本文选取的随机森林方法在 ${\delta }$、准确率以及召回率方面表现均更好.

表 3   不同分类算法的实验结果对比

Tab.3  Comparison of experimental results by different classification algorithms

分类算法 ${\delta }$ ${R_{\rm{pre} }}$/% ${R_{\rm{re}}}$/%
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

新窗口打开| 下载CSV


选取文献[10],中的方法使用的特征以及本文使用的特征,分别使用随机森林算法对DNS隧道检测情况进行对比. 使用 ${\delta }$、准确率 ${R_{{\rm{pre}}}}$、召回率 ${R_{{\rm{re}}}}$,对2种方法的效果进行对比,十折交叉验证结果分别如图6表4所示,图6N为试验次数,准确率与召回率对比如表4所示. 由对比结果可知,本文提出的DNS隧道检测模型评分更高,准确率也更高,新引入的特征可减少对正常域名的误报.

表 4   不同特征维度下的实验结果对比

Tab.4  Comparison of experimental results under different feature dimensions

方法名称 ${R_{{\rm{pre}}} }$/% ${R_{\rm{re}} }$/%
本文方法 95.2 98.5
对比实验 88.1 97.9

新窗口打开| 下载CSV


图 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隧道检测系统.

参考文献

DIETRICH C J, ROSSOW C, FREILING F C, et al. On botnets that use DNS for command and control [C] // 2011 Seventh European Conference on Computer Network Defense. Washington: IEEE, 2011: 9-16.

[本文引用: 1]

AHMED J, GHARAKHEILI H H, RAZA Q, et al. Real-time detection of DNS exfiltration and tunneling from enterprise networks [C] // 2019 IFIP/IEEE International Symposium on Integrated Network Management. Washington: IEEE, 2019: 649-653.

[本文引用: 2]

SPATARO J G. Iranian cyber espionage [D]. Utica: College of America, 2019.

[本文引用: 1]

杭特

软件供应链安全风险管控, 任重而道远

[J]. 中国信息安全, 2018, 107 (11): 61- 63

DOI:10.3969/j.issn.1674-7844.2018.11.025      [本文引用: 1]

HANG Te

Software supply chain security risk management and control, there is a long way to go

[J]. China Information Security, 2018, 107 (11): 61- 63

DOI:10.3969/j.issn.1674-7844.2018.11.025      [本文引用: 1]

谷传征. DNS协议隐蔽信道的构建和检测技术研究[D]. 上海: 上海交通大学. 2012.

[本文引用: 1]

GU Chuan-zheng. Research on the construction and detection technology of covert channel based on DNS protocol[D]. Shanghai: Shanghai Jiao Tong University. 2012.

[本文引用: 1]

YU B, SMITH L, THREEFOOT M, et al. Behavior analysis based DNS tunneling detection and classification with big data technologies [C] // In Proceeding of the International Conference on Internet of Things and Big Data, Rome: SCITEPRESS, 2016: 284-290.

[本文引用: 1]

LIU J, LI S, ZHANG Y, et al. Detecting DNS tunnel through binary-classification based on behavior features [C] // 2017 16th IEEE International Conference on Trust, Security and Privacy in Computing and Communications. Sydney: IEEE, 2017: 339-346.

[本文引用: 1]

LIN H, LIU G, YAN Z. Detection of application-layer tunnels with rules and machine learing [C] // International Conference on Security, Privacy and Anonymity in Computation, Communication and Storage. Atlanta: SPACCS, 2019: 441-455.

[本文引用: 2]

罗友强, 刘胜利, 颜猛, 等

基于通信行为分析的DNS隧道木马检测方法

[J]. 浙江大学学报: 工学版, 2017, 51 (9): 1780- 1787

[本文引用: 1]

LUO You-qiang LIU Sheng-li, YAN Meng

DNS tunnel detection method based on communication behavior analysis

[J]. Journal of Zhejiang University: Engineering Science, 2017, 51 (9): 1780- 1787

[本文引用: 1]

NADLER A, AMINOV A, SHABTAI A

Detection of malicious and low throughput data exfiltration over the DNS protocol

[J]. Computers and Security, 2019, (80): 36- 53

[本文引用: 4]

杨建强, 姜洪溪

基于第二级域名的FQDN个数的DNS隐蔽信道检测

[J]. 计算机时代, 2016, (2): 53- 55

[本文引用: 1]

YANG Jian-qiang, JIANG Hong-xi

Using FQDN number of the second-level domain name to detect DNS-based covert channels

[J]. Computer Era, 2016, (2): 53- 55

[本文引用: 1]

HERRMANN D, BANSE C, FEDERRATH H

Behavior-based tracking: exploiting characteristic patterns in DNS traffic

[J]. Computers and Security, 2013, (39): 17- 33

[本文引用: 1]

PAUL A, LIU C. Dns and Bind, Fifth Edition[M]. Beijing: Beijing Posts and Telecom Press, 2014.

[本文引用: 1]

云解析小二. 阿里DNS: 一种不断变化前缀域名攻击检测方法[EB/OL]. (2018-11-12)[2019-7-30]. https://yq.aliyun.com/articles/672435, 2018-11-12.

[本文引用: 1]

赵越. 基于DNS流量特征的僵尸网络检测方法研究 [D]. 天津大学. 2015.

[本文引用: 1]

ZHAO Yue. A study on botnet detection method based on DNS flow characteristics [D]. Tianjin: Tianjin University, 2015.

[本文引用: 1]

SPOOREN J, PREUVENEERS D, DESMET L, et al. Detection of algorithmically generated domain names used by botnets: a dual arms race [C] // Proceedings of the 34th ACM/SIGAPP Symposium on Applied Computing. New York: ACM, 2019: 1916–1923.

[本文引用: 1]

CROTTI M, DUSI M, GRINGOLI F, et al. Detecting HTTP tunnels with statistical mechanisms [C] // IEEE International Conference on Communication. Glasgow: IEEE, 2007: 6162-6168.

[本文引用: 1]

HOANG X D, NGUYEN Q C

Botnet detection based on machine learning techniques using DNS query data

[J]. Future Internet, 2018, 10 (5): 43

DOI:10.3390/fi10050043      [本文引用: 1]

徐琨. DNS隐蔽通道检测技术研究 [D]. 成都: 西南交通大学, 2017.

[本文引用: 1]

XU Kun. Research on DNS covert channel detection technology [D]. Chengdu: Souchwest Jiaotong University, 2017.

[本文引用: 1]

YAN P, YAN Z

A Survey on dynamic mobile malware detection

[J]. Software Quality Journal, 2018, 26 (3): 891- 919

DOI:10.1007/s11219-017-9368-4      [本文引用: 1]

AHMED A, HALEH A

DNS tunneling detection method based on multilabel support vector machine

[J]. Security and Communication Networks, 2018,

[本文引用: 1]

/