2. 北京物资学院 信息学院, 北京 101149
2. School of Information, Beijing Wuzi University, Beijing 101149, China
当前, 以信息技术为代表的新一轮科技与产业革命正在兴起, 随着互联网模式的不断创新以及线上线下服务融合的快速发展, 截止2017年12月, 我国网民规模达7.72亿, 普及率为55.8%, 并继续保持平稳增长趋势。与此同时, 以网络钓鱼和僵尸网络为代表的恶意域名攻击以灵活多变的形式不断出现, 中国互联网络信息中心(CNNIC)对各行业域名安全状况进行分析, 结果表明, 我国80%以上的域名解析服务存在安全风险。随着全球域名体系注册量、查询量以及系统部署规模的持续增长, 针对域名系统的DDOS攻击规模和攻击技术复杂度也在显著提升[1]。因此, 对域名安全检测方面进行研究成为信息安全领域广泛关注的热点之一。
近年来, 已有较多学者通过机器学习方法对恶意域名进行有效检测, 主要包括支持向量机(Support Vector Machine, SVM)、随机森林(Random Forest, RF)和聚类等方法[2]。机器学习可通过分析善恶域名在网络行为特性与自身特性方面存在的差异, 利用各种高效算法来实现域名分类[3-5]。但是, 随着当今信息量和访问量的快速增长, 域名在DNS通信中的日志记录量也在持续提升, 需要通过大数据的高效统计分析技术来提升海量通信记录的分析速度, 这将导致传统检测算法在数据计算与响应速度2个方面受到极大限制[6]。此外, 在利用机器学习检测恶意域名时, 分类模型大都选择RF分类器, 尽管RF分类器不易发生过拟合现象, 且在每次划分时只考虑很少的属性, 速度比Bagging和Boosting分类器更快, 但其难以处理某些噪声较大的分类和回归问题。同时, 根据实际需要对多个不同级别的属性进行划分时, 会使RF模型的建模结果产生较大的误差, 导致属性权值不具有可信度[7]。
恶意域名通常通过域名解析系统来实现攻击, 因此, 当黑客们通过恶意域名进行破坏活动时, 相应的善恶域名数据及其特征行为模式会被记录到DNS服务器的日志中。本文通过分析DNS服务器中海量的域名日志解析记录及其相应特征, 利用隐马尔可夫模型(Hidden Markov Model, HMM)及Spark大数据处理平台[8-10], 结合域名的自身特性、时间性(包括TTL平均值、域名生存期等)、对应IP的特征以及相关域名集, 得到恶意域名特定的行为方式, 在此基础上, 对其进行检测与分类。
1 相关工作HMM在语音识别、机器学习等领域得到广泛应用[11], 其是马尔可夫模型的延伸与扩展。HMM在任一时刻的状态不可见, 观察者无法通过一个状态序列推测转移概率等相关参数, 但可通过HMM在每个时刻的观测值来对隐含状态进行预测, 且该时刻的观测值仅与其隐含状态有关[12-14]。
1.1 隐马尔可夫模型概述在通常情况下, HMM的形式可表示为[15]:
$ \lambda = \left( {\pi ,\mathit{\boldsymbol{A}},\mathit{\boldsymbol{B}}} \right) $ |
各元素定义为:
1) π表示初始状态的概率分布, π={π1, π2, …, πN}, πi=P(Q1=Si)(1≤i≤N)表示模型在初始状态Q1时取Si状态的概率。
2) A表示状态之间的转移矩阵, A=[aij]N×N, aij=P(Qt+1=Sj|Qt=Si)(1≤i, j≤N)表示在时刻t、状态Si的条件下时刻t+1转移到状态Sj的概率。
3) B表示观测概率矩阵, B=[bjk]M×N, bjk=P(Ot=Vk|Qt=Sj)(1≤j≤N, 1≤k≤M)表示在状态Sj出现时观测值Vk的概率。
在HMM中, 初始概率和状态转移概率决定状态序列, 观测概率矩阵决定模型的观测序列, 因此, HMM可简记为λ=(π, A, B)。
1.2 隐马尔可夫模型中的基本问题HMM涉及3个基本问题[15]:
1) 评估问题:已知观测序列O={O1, O2, …, OT}及模型λ=(π, A, B), 计算P(O|λ), 即给定一个模型的观测序列, 计算某个特定的输出序列的概率。解决评估问题主要采用前向算法和后向算法。
(1) 前向算法
输入 HMM模型λ, 观测序列O
输出 观测序列概率P(O|λ)
1.初始化
$ {{\rm{ \mathsf{ α} }}_1}\left( {\rm{i}} \right) = {{\rm{ \mathsf{ π} }}_{\rm{i}}}{{\rm{b}}_{\rm{i}}}\left( {{{\rm{o}}_1}} \right),{\rm{i}} = 1,2, \cdots ,{\rm{N}} $ |
2.对t=1, 2, …, T-1, 有:
$ {{\rm{ \mathsf{ α} }}_{{\rm{t + 1}}}}\left( {\rm{i}} \right) = \left[ {\sum\limits_{{\rm{j = 1}}}^{\rm{N}} {{{\rm{ \mathsf{ α} }}_{\rm{t}}}\left( {\rm{j}} \right){{\rm{ \mathsf{ α} }}_{{\rm{ji}}}}} } \right]{{\rm{b}}_{\rm{i}}}\left( {{{\rm{o}}_{{\rm{t + 1}}}}} \right),{\rm{i}} = 1,2, \cdots ,{\rm{N}} $ |
3.终止
$ {\rm{P}}\left( {{\rm{O}}\left| {\rm{ \mathsf{ λ} }} \right.} \right) = \sum\limits_{{\rm{i = 1}}}^{\rm{N}} {{{\rm{ \mathsf{ α} }}_{\rm{T}}}\left( {\rm{i}} \right)} $ |
前向算法的步骤1初始化前向概率, 包括初始时刻的状态i1=qi和观测o1的联合概率; 步骤2是前向概率的递推公式, 计算到t+1时刻观测序列为o1, o2, …, ot, ot+1且在t+1时刻模型处于状态qi的前向概率; 步骤3给出P(O|λ)的计算公式。
(2) 后向算法
输入 HMM模型λ, 观测序列O
输出 观测序列概率P(O|λ)
1.βt(i)=1, i=1, 2, …, N
2.对t=T-1, T-2, …, 1, 有:
$ {{\rm{ \mathsf{ β} }}_{\rm{t}}}\left( {\rm{i}} \right) = \sum\limits_{{\rm{j = 1}}}^{\rm{N}} {{{\rm{ \mathsf{ α} }}_{{\rm{ij}}}}{{\rm{b}}_{\rm{j}}}\left( {{{\rm{o}}_{{\rm{t + 1}}}}} \right){{\rm{ \mathsf{ β} }}_{{\rm{t + 1}}}}\left( {\rm{j}} \right)} ,{\rm{i}} = 1,2, \cdots ,{\rm{N}} $ |
3.
步骤1初始化后向概率, 即对模型最终时刻的所有状态qi规定βT(i)=1;步骤2对后向概率的计算公式进行递推, 即在t时刻状态qi条件下计算t+1之后模型观测序列为ot+1, ot+2, …, oT的后向概率βt(i), 只需计算t+1时刻所有可能的N个状态qj的转移概率和在此状态下的ot+1的概率, 再考虑状态qj之后的观测序列的后向概率; 步骤3求 P(O|λ), 其思路与步骤2一致, 只是用初始概率πi代替转移概率。
2) 解码问题, 即在给定观测序列O={O1, O2, …, OT}和模型λ=(π, A, B)的情况下, 选择一个对应的状态S={S1, S2, …, SN}, 使得由S生成观测序列O的概率最大。
概率统计模型中最常用的标准是最大似然标准, 即在给定模型和某个特定输出序列的情况下, 选择概率最大的一个输出序列, 此时常用算法为Viterbi算法, 其是应用较广的动态规划算法[16-17], 可利用动态规划的特性来求解相关概率的最大路径问题。其中, 一条路径对应模型中的一个状态序列。Viterbi算法的思路为:从t=1时刻开始, 不断向后递推, 每次递推下一步时保留前一步所有选择的最大概率, 在递推完成之后, 利用回溯法从终点逐步倒退到起始点, 即可得到所求模型的最佳状态路径。Viterbi算法描述如下:
输入 模型参数λ=(π, A, B), 观测序列O=(o1, o2, …, oT)
输出 最优隐状态路径I*=(i1*, i2*, …, iT*)
1.初始化
$ {{\rm{ \mathsf{ δ} }} _1}\left( \text{i} \right) = {{\rm{ \mathsf{ π} }}_{\rm{i}}}{{\rm{b}}_{\rm{i}}}\left( {{{\rm{o}}_1}} \right),{\rm{i}} = 1,2, \cdots ,{\rm{N}} $ |
$ {{\rm{ \mathsf{ ψ} }}_1}\left( \text{i} \right) = 0,{\rm{i}} = 1,2, \cdots ,{\rm{N}} $ |
2.递推
对t=2, 3, …, T:
3.终止
$ {{\rm{P}}^ * } = \mathop {\max }\limits_{{\rm{1}} \le {\rm{i}} \le {\rm{N}}} \left[ {{{\rm{ \mathsf{ δ} }}_{\rm{T}}}\left( {\rm{i}} \right)} \right] $ |
$ {\rm{i}}_{\rm{T}}^ * = \mathop {\text{argmax} }\limits_{{\rm{1}} \le {\rm{j}} \le {\rm{N}}} \left[ {{{\rm{ \mathsf{ δ} }}_{\rm{T}}}\left( {\rm{i}} \right)} \right] $ |
4.回溯最优路径
对t= T-1, T-2, …, 1:
$ {\rm{i}}_{\rm{t}}^ * = {{\rm{ \mathsf{ ψ} }}_{{\rm{t + 1}}}}\left( {{\rm{i}}_{{\rm{t + 1}}}^ * } \right) $ |
求得最优路径I*=(i1*, i2*, …, iT*)
3) 学习问题。对给定的观测序列O={O1, O2, …, OT}, 估计HMM模型的参数λ=(π, A, B), 使得 P(O|λ)最大。该问题通过不断地输入观测序列, 应用迭代法对模型参数进行调整与改进, 继而使模型达到期望效果, 常用算法为Baum-Welch算法。Baum-Welch是典型无监督学习HMM的方法, 其利用期望极大(Expectation Maximization, EM)算法思想[18-19], 通过反复迭代达到局部极大值, 最后得出HMM的估计参数λ=(π, A, B)。
Baum-Welch算法步骤如下:
(1) 随机设置初始模型M0。
(2) 基于M0以及观测序列O, 训练新模型M*。
(3) 若满足设定条件(如‖M*-M0‖<ε), 表明训练已达到预期效果, 算法结束。
(4) 否则, 令M0=M*, 继续执行第2步。
给定模型λ=(π, A, B), 生成观测序列O的概率如下:
$ P\left( {O\left| \lambda \right.} \right) = \sum\limits_S {P\left( {O\left| {S,\lambda } \right.} \right)P\left( {S\left| \lambda \right.} \right)} $ |
Baum-Welch算法的目标是找到使得观测序列O概率最大的模型:
$ {\lambda ^ * } = \mathop {\arg \max }\limits_\lambda P\left( {O\left| \lambda \right.} \right) $ |
针对上述最大化问题, 得到全局最优解比较困难, 但可通过EM算法得到局部最优解。EM算法步骤如下:
(1) 确定由观测序列O和状态数据S所构成的对数似然函数:
$ \lg P\left( {O,S\left| \lambda \right.} \right) $ |
(2) E步, 求Q函数:
$ Q\left( {\lambda ,{\lambda ^ * }} \right) = \sum\limits_S {P\left( {S\left| {O,\lambda } \right.} \right)\lg P\left( {O,S\left| {{\lambda ^ * }} \right.} \right)} $ |
(3) M步, 最大化Q函数以求解最新的模型参数:
$ \bar \lambda = \mathop {\arg \max }\limits_{{\lambda ^ * }} Q\left( {\lambda ,{\lambda ^ * }} \right) $ |
先对λ=(π, A, B)设置初值λ0=(π0, A0, B0), 通过求解max Q(λ0, λ*), 得到参数新的估计值λ1, 再利用λ1求解max Q(λ1, λ*), 得到新估值λ2。反复迭代, 直到所求参数值变化足够小。上述过程描述如下:
$ \begin{array}{l} {\lambda _0}\mathop \to \limits^{\mathop {\max }\limits_{{\lambda ^ * }} Q\left( {{\lambda _0},{\lambda ^ * }} \right)} {\lambda _1}\mathop \to \limits^{\mathop {\max }\limits_{{\lambda ^ * }} Q\left( {{\lambda _1},{\lambda ^ * }} \right)} {\lambda _2}\\ \;\;\;\;\mathop \to \limits^{\mathop {\max }\limits_{{\lambda ^ * }} Q\left( {{\lambda _2},{\lambda ^ * }} \right)} {\lambda _3} \cdots \end{array} $ |
根据域名恶意程度的不同, 从海量DNS日志中提取出的域名在不同时间序列中具有不同的属性特征, 且这些域名状态不可观测。从海量DNS日志中提取出的相关域名属性, 如域名的自身特性、时间性、对应IP的特征以及相关域名集等, 可通过观察进行量化统计, 且域名在不同时间序列中的可观测变量特征由域名所隐藏的恶意危害强度所决定, 这种域名的恶意危害强度又由其所处的状态决定, 因此, 模型构建需要应用双重映射过程[20]。
用作域名识别的观测变量应该具备区别善恶域名的能力, 即在域名检测过程中, 针对不存在恶意域名和存在恶意域名的情况, 这些观测变量的值将存在很大差异。本文通过分析DNS日志记录中域名的相关特征信息, 提取出5个类别中的12个特征属性值, 详细信息如表 1所示。
![]() |
下载CSV 表 1 域名特征说明 |
一种有效的恶意域名检测方法即对海量DNS日志的域名属性特征进行监控, 获取该域名的自身特性、时间性、对应IP特征以及相关域名集等, 分析这些海量的域名历史数据得出不同域名在特定时间序列中的HMM模型初始化参数, 然后通过HMM模型中的Baum-Welch算法进行反复迭代并训练出最优的模型参数, 在此基础上, 通过Viterbi算法检测出相应属性特征下域名最可能的恶意隐藏状态行为。基于HMM的恶意域名检测系统总体框架如图 1所示。
![]() |
Download:
|
图 1 恶意域名检测系统总体架构 |
在域名检测系统中, 构建HMM最重要的步骤是确定三元组λ=(π, A, B)中各元素之间的映射关系, 即模型中初始概率、转移概率和混淆矩阵最合适的数据组合。由于无法直接观测到域名在不同时间序列中的状态, 因此本文将域名的状态作为HMM的隐状态, 这些隐状态包括善意域名和恶意域名, 根据恶意域名的不同类型又可划分为N个隐状态, 观测变量的选取即从DNS日志中提取出5大类共12个属性特征。其中, 初始概率、转移概率和混淆矩阵可通过分析DNS日志的历史记录并根据域名之间的实际分布情况进行参数初始化。
2.3 基于HMM的恶意域名识别系统 2.3.1 系统特征值提取为实现本文系统, 需从域名的自身特性、时间性、对应IP特征和相关域名集中提取出12个特征值。为加快提取速度, 利用Spark大数据处理平台中Transfromation算子的懒加载机制来避免产生中间数据, 在Action操作时才进行特征提取。特征数据提取过程如图 2所示。
![]() |
Download:
|
图 2 特征数据提取过程 |
首先, Spark从hdfs文件系统中读取相关的域名数据, 并在内存中将其表示为DataCollectionRDD; 然后, 使用Map算子提取出域名与TTL值、IP地址、访问时间、NS记录的组合对, 再通过reduceByKey算子将相同域名的TTL值、IP地址、访问时间、NS记录进行聚合, 并根据域名计算出数据所占的百分比, 从聚合到的TTL值中计算出TTL均值、TTL变化数和TTL标准差3个特征值, 从聚合到的访问时间中得到域名生存期, 从聚合到的IP地址中计算出域名对应的IP个数、域名对应国家数、域名对应IP的差异性3个特征值, 从聚合到的NS记录特征中计算出域名服务器变化次数、域名服务器平均变化时长; 最终, 得到12个特征值并形成样本集, 存入hdfs文件系统中。
2.3.2 DNS数据流实时获取本文采用建立在Spark上的实时计算框架Spark Streaming, 从DNS日志中获取实时的数据流。Spark Streaming的处理机制是将持续不断输入的数据流根据一定的时间间隔拆分成多个批处理作业[21], 然后通过Spark Engine对这些数据进行处理。本文系统通过Spark Streaming从DNS获取实时数据流的主要步骤如下:
步骤1 Spark Streaming参数初始化。
步骤2 从hdfs的数据源不断监听是否有新数据到达。
步骤3 将接收的新数据以时间片为单位进行分批, 利用Spark Engine处理这些数据。
步骤4 将步骤3中经过各种Spark算子处理后的结果数据流DStream转化为对应的RDD。
2.3.3 HMM模型实现HMM模型的实现步骤具体如下:
步骤1 对HMM的以下相关参数进行初始化:
1) 状态S。善恶域名在检测时间序列中进行访问操作时, 域名的隐状态类型无法预知。因此, 根据域名变换的多样性和灵活性, 可通过试探法对域名模型的隐状态进行探测。在实验中, 根据危害程度从弱到强将域名攻击暂分为S1, S2, …, S5共5类, 对应于HMM模型中的不同状态。
2) 观测值V。该值为海量DNS日志中相关域名的解析记录及其相应的特征行为模式。实验中使用的观测特征值共有12个, 即O={O1, O2, …, O12}。
3) 初始状态的概率分布Π={πi}, πi=P(Q1=Si)表示系统中所有域名Si初始出现的概率, 其计算如下:
$ {\pi _i} = \frac{{初始时不同状态域名\;{S_i}\;出现的次数}}{{\sum\limits_{j = 1}^N {初始时不同状态域名\;{S_j}\;出现的次数} }} $ | (1) |
其中, 1≤i≤N。
4) 状态转移概率矩阵:
$ \mathit{\boldsymbol{A}} = {\left[ {{\alpha _{ij}}} \right]_{N \times N}},{\alpha _{ij}} = P\left( {{Q_{t + 1}} = {S_j}\left| {{Q_t} = {S_i}} \right.} \right)\left( {1 \le i,j \le N} \right) $ | (2) |
其中, αij表示系统中所有不同状态域名在某一时刻t处于Si、在时刻t+1转移到Sj的概率, 此处t只表示域名状态出现的先后顺序。αij计算如下:
$ {\alpha _{ij}} = \frac{{从\;{S_i}\;转移到\;{S_j}\;的次数}}{{\sum\limits_{k = 1}^N {从\;{S_i}\;转移到\;{S_k}\;的次数} }} $ | (3) |
其中, 1≤i, j, k≤N。
5) 观测值的概率分布矩阵:
$ \mathit{\boldsymbol{B}} = {\left[ {{b_{jk}}} \right]_{M \times N}} $ |
其中, bjk=P(Ot=Vk|Qt=Sj)(1≤j≤N, 1≤k≤M)表示不同状态域名Sj出现时域名解析记录的相应特征为Vk的概率。bjk计算如下:
$ {b_{jk}} = \frac{{域名状态为 \;{S_j}\;时解析记录特征为\;{V_k}\;的次数}}{{解析记录特征为\;{V_k}\;的总次数}} $ | (4) |
其中, 1≤j≤N, 1≤k≤M。
步骤2 使用Baum-Welch算法, 根据训练集中T时刻DNS服务器中域名解析记录的相应观测序列O={O1, O2, …, OT}、隐状态序列Q={Q1, Q2, …, QT}, 对HMM模型中的参数进行训练, 使得 P(O|λ)最大。具体流程如下:
1) 确定由观测序列O和隐状态数据S构成的对数似然函数:
$ \lg P\left( {O,S\left| \lambda \right.} \right) $ | (5) |
2) E步。求Q函数:
$ Q\left( {\lambda ,{\lambda ^ * }} \right) = \sum\limits_S {P\left( {S\left| {O,\lambda } \right.} \right)\lg P\left( {O,S\left| {{\lambda ^ * }} \right.} \right)} $ | (6) |
3) M步。通过反复迭代使Q函数最大化, 求解最优的模型参数:
$ \bar \lambda = \mathop {\arg \max }\limits_{{\lambda ^ * }} Q\left( {\lambda ,{\lambda ^ * }} \right) $ | (7) |
$ \begin{array}{l} Q\left( {\lambda ,{\lambda ^ * }} \right) = \sum\limits_S {P\left( {S\left| {O,\lambda } \right.} \right)\lg P\left( {O,S\left| {{\lambda ^ * }} \right.} \right)} = \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\sum\limits_S {\frac{{P\left( {O,S\left| \lambda \right.} \right)}}{{P\left( {O\left| \lambda \right.} \right)}}\lg P\left( {O,S\left| {{\lambda ^ * }} \right.} \right)} = \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\frac{1}{{P\left( {O\left| \lambda \right.} \right)}}\sum\limits_S {P\left( {O,S\left| \lambda \right.} \right)\lg P\left( {O,S\left| {{\lambda ^ * }} \right.} \right)} \end{array} $ |
对于给定的参数λ, P(O|λ)是常量, 故:
$ \mathop {\max }\limits_{{\lambda ^ * }} Q\left( {\lambda ,{\lambda ^ * }} \right) = \mathop {\max }\limits_{{\lambda ^ * }} \sum\limits_S {P\left( {O,S\left| \lambda \right.} \right)\lg P\left( {O,S\left| {{\lambda ^ * }} \right.} \right)} $ |
$ P\left( {O,S\left| {{\lambda ^ * }} \right.} \right) = {{\hat \pi }_{{s_1}}}{{\hat b}_{{s_1}}}\left( {{o_1}} \right){{\hat \alpha }_{{s_1}{s_2}}}{{\hat b}_{{s_2}}}\left( {{o_2}} \right) \cdots {{\hat \alpha }_{{s_{T - 1}}{s_T}}}{{\hat b}_{{s_T}}}\left( {{o_T}} \right) $ |
$ \begin{array}{l} Q\left( {\lambda ,{\lambda ^ * }} \right) = \sum\limits_S {P\left( {O,S\left| \lambda \right.} \right)\lg P\left( {O,S\left| {{\lambda ^ * }} \right.} \right)} = \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\sum\limits_S {P\left( {O,S\left| \lambda \right.} \right)\lg \left( {{{\hat \pi }_{{s_1}}}{{\hat b}_{{s_1}}}\left( {{o_1}} \right){{\hat \alpha }_{{s_1}{s_2}}}{{\hat b}_{{s_2}}}\left( {{o_2}} \right) \cdots } \right.} \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\left. {{{\hat \alpha }_{{s_{T - 1}}{s_T}}}{{\hat b}_{{s_T}}}\left( {{o_T}} \right)} \right) = \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\sum\limits_S {P\left( {O,S\left| \lambda \right.} \right)\lg {{\hat \pi }_{{s_1}}}} + \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\sum\limits_S {P\left( {O,S\left| \lambda \right.} \right)\left( {\sum\limits_{t = 1}^{T - 1} {\lg {{\hat \alpha }_{{s_t}{s_{t + 1}}}}} } \right)} + \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\sum\limits_S {P\left( {O,S\left| \lambda \right.} \right)\left( {\sum\limits_{t = 1}^T {\lg {{\hat b}_{{s_t}}}\left( {{o_t}} \right)} } \right)} \end{array} $ |
$ \max \sum\limits_S {P\left( {O,S\left| \lambda \right.} \right)\lg {{\hat \pi }_{{s_1}}}} ,\sum\limits_{i = 1}^N {{{\hat \pi }_i}} = 1 $ |
$ \max \sum\limits_S {P\left( {O,S\left| \lambda \right.} \right)\left( {\sum\limits_{t = 1}^{T - 1} {\lg {{\hat \alpha }_{{s_t}{s_{t + 1}}}}} } \right)} ,\sum\limits_{j = 1}^N {{{\hat a}_{ij}}} = 1 $ |
$ \max \sum\limits_S {P\left( {O,S\left| \lambda \right.} \right)\left( {\sum\limits_{t = 1}^T {\lg {{\hat b}_{{s_t}}}\left( {{o_t}} \right)} } \right),} \sum\limits_{k = 1}^N {{{\hat b}_j}\left( k \right)} = 1 $ |
迭代执行n=1, 2, …, 直到满足终止条件:
$ \pi _i^{n + 1} = \frac{{P\left( {O,{s_1} = i\left| {{\lambda ^n}} \right.} \right)}}{{P\left( {O\left| {{\lambda ^n}} \right.} \right)}},i = 1,2, \cdots ,N $ |
$ \alpha _{ij}^{n + 1} = \frac{{\sum\limits_{t = 1}^{T - 1} {P\left( {O,{s_t} = i,{s_{t + 1}} = j\left| {{\lambda ^n}} \right.} \right)} }}{{\sum\limits_{t = 1}^{T - 1} {P\left( {O,{s_t} = i\left| {{\lambda ^n}} \right.} \right)} }} $ |
$ {b_j}{\left( k \right)^{n + 1}} = \frac{{\sum\limits_{t = 1}^T {P\left( {O,{s_t} = j\left| {{\lambda ^n}} \right.} \right){\delta _{t,k}}} }}{{\sum\limits_{t = 1}^T {P\left( {O,{s_t} = j\left| {{\lambda ^n}} \right.} \right)} }} $ | (8) |
$ {\lambda ^{n + 1}} = \left( {{\pi ^{n + 1}},{\mathit{\boldsymbol{A}}^{n + 1}},{\mathit{\boldsymbol{B}}^{n + 1}}} \right) $ | (9) |
输出最终模型:
$ {\lambda ^ * } = \left( {\hat \pi ,\mathit{\boldsymbol{\hat A}},\mathit{\boldsymbol{\hat B}}} \right) $ |
基于HMM的恶意域名检测算法具体流程如图 3所示。
![]() |
Download:
|
图 3 基于HMM的恶意域名检测算法流程 |
实验准备工作主要包括:从DNS服务器中获取DNS日志, 从不同数据源搜集善恶域名集, 部署Hadoop和Spark集群。本文选取准确率和召回率2个指标来评估基于HMM的恶意域名识别系统的检测效果。其中, 准确率指所有正确被检索的域名占所有实际被检索的域名比例, 召回率指所有正确被检索的域名占所有应该被检索的域名比例。
3.1.1 善恶域名集获取在域名检测系统中, 为形成高质量的训练集并提高检测算法的效果, 需要搜集一个包含范围较广且数量较多的善恶域名集。本文从malware.com、Malware Domain List等不同类型的数据源搜集大量的恶意域名, 另外选取一些为逃避域名黑名单检测而利用随机字符生成的C&C域名。善意域名来自于Alexa网站中几乎涵盖各行业、各种类中排名靠前的可信赖域名。
3.1.2 测试环境由于Spark平台没有存储大文件的能力, 但本文系统的检测需要处理海量数据, 因此引入Hadoop的分布式文件系统hdfs。同时, 利用Hadoop YARN使集群具备良好的扩展性。综上, 本次实验需要搭建一个Spark集群和一个Hadoop集群, 在Spark集群下, 一台PC作为master节点, 负责集群的资源管理, 另外3台PC作为Slave节点, 用于执行检测模型的计算任务。
3.2 HMM模型下的分类效果测试 3.2.1 HMM模型参数初始化在实验中利用HMM模型进行域名检测时, 根据域名的不同恶意类型, 将其初始隐状态划分为5类, 主要包括:基于网络钓鱼, 基于Domain-Flux, 基于Fast-Flux, 基于混合Domain-Flux和Fast-Flux, 基于善意域名, 分别用e1~e5进行表示。观测序列为12个从DNS日志中提取出的域名特征值。对HMM模型进行参数训练时, 初始值的选取非常重要, 其能大幅提高模型的计算准确性和效率, 本文根据域名的危害程度给出HMM模型的初始化参数。域名隐状态转移概率矩阵为:
$ \mathit{\boldsymbol{A}} = \left( {\begin{array}{*{20}{c}} {0.720}&{0.210}&{0.030}&{0.002}&{0.001}\\ {0.001}&{0.700}&{0.100}&{0.010}&{0.008}\\ {0.000}&{0.000}&{0.730}&{0.050}&{0.019}\\ {0.000}&{0.000}&{0.000}&{0.750}&{0.169}\\ {0.000}&{0.000}&{0.000}&{0.000}&{0.999} \end{array}} \right) $ |
从状态转移概率矩阵A可以看出, 当前域名危害状态向低危险状态转移的概率非常低, 向相邻较高级别危害状态转移的概率较高, 维持在本状态的概率最大。混淆矩阵概率分布为:
$ \mathit{\boldsymbol{B}} = \left( {\begin{array}{*{20}{c}} {0.21}&{0.20}&{0.23}&{0.10}&{0.07}&{0.04}&{0.06}&{0.02}&{0.01}&{0.12}&{0.08}&{0.16}\\ {0.08}&{0.13}&{0.21}&{0.18}&{0.16}&{0.12}&{0.03}&{0.15}&{0.07}&{0.12}&{0.10}&{0.21}\\ {0.01}&{0.02}&{0.01}&{0.05}&{0.21}&{0.15}&{0.12}&{0.10}&{0.20}&{0.13}&{0.10}&{0.06}\\ {0.01}&{0.01}&{0.15}&{0.03}&{0.08}&{0.13}&{0.07}&{0.18}&{0.12}&{0.08}&{0.21}&{0.03}\\ {0.02}&{0.01}&{0.03}&{0.05}&{0.04}&{0.10}&{0.06}&{0.12}&{0.07}&{0.11}&{0.20}&{0.12} \end{array}} \right) $ |
混淆矩阵概率分布表示在已知域名隐状态的情况下观测序列出现的概率。
初始化状态概率分布为:
$ \begin{array}{l} \pi = \left\{ {{\pi _{{e_1}}},{\pi _{{e_2}}},{\pi _{{e_3}}},{\pi _{{e_4}}},{\pi _{{e_5}}}} \right\} = \\ \;\;\;\;\;\;\left\{ {0.42,0.21,0.13,0.07,0.01} \right\} \end{array} $ |
从初始概率分布可以看出, 域名危害强度最高的状态e5出现的概率很低, 而危害强度最低的e1状态出现的概率相对较高, 说明大部分域名最初均处于比较安全的状态。
在模型初始化后, 将初始概率π、转移概率矩阵A、混淆矩阵B带入Baum-Welch算法(式(6)~式(8))中进行反复迭代, 求解出最优的模型参数, 然后通过Viterbi算法计算出域名最可能的隐状态。
3.2.2 原始参数下的分类器效果测试Baum-Welch算法利用EM算法的思想, 通过反复迭代使其达到局部最优[22]。若能将λ=(π, A, B)进行较好的参数初始化, 就能得到使观测数据概率最大的全局最优解。经研究分析, 初始概率π和转移概率矩阵A的初值对模型的影响较小, 可通过随机选取的方法进行初始化, 影响较大的是混淆矩阵B的初始概率值选取。因此, 本文首先利用K-means方法进行归类划分[23-24], 然后根据划分结果计算出混淆矩阵B的初值。用Spark集群建立模型, 记录下模型的检测次数以及分类结果的准确率、召回率。原始参数下的测试结果如表 2、图 4所示。
![]() |
下载CSV 表 2 原始参数下的模型分类结果 |
![]() |
Download:
|
图 4 原始参数下的模型准确率与召回率 |
从表 2、图 4可以看出, 原始参数下HMM模型在测试集中对恶意域名分类的准确率和召回率均基本达标, 但并未达到理想效果。因此, 有必要通过聚类方法对观测概率初始值进行调整, 以提升准确率和召回率。
3.2.3 调优参数下的分类器效果测试通过K均值聚类方法对观测概率矩阵初始值进行划分, 在初始值选取后, 使用训练集和测试集分别进行模型训练和效果检测, 结果如图 5所示。从图 5可以看出, 进行参数优化后, 模型的分类准确率和召回率均有显著提升。因此, 可以初步判断HMM模型在经过观测概率矩阵的初始值调优后可以提高恶意域名的检测效果。
![]() |
Download:
|
图 5 调优参数下的模型准确率与召回率 |
在完成观测值的初始参数调优后, 本文HMM模型的分类效果得到提升。在机器学习领域存在众多优秀的分类模型, RF模型为其中的典型代表。利用RF模型训练分类器的具体步骤如下:
1) 从初始训练集中有放回地重复随机抽取n个训练样本集。
2) 根据从所有域名特征中随机抽取的k个特征, 对新抽取的样本集建立决策树模型。
3) 循环进行以上操作步骤m次, 最后生成由m棵决策树组成的随机森林。
4) 按照对森林中各决策树的投票数量来决定新数据分类。
在保持检测次数和相应域名数据量不变的前提下, 使用训练集和测试集分别进行模型训练和效果检测。HMM模型与RF模型的分类准确率和召回率对比结果分别如图 6、图 7所示。
![]() |
Download:
|
图 6 2种模型的分类准确率对比 |
![]() |
Download:
|
图 7 2种模型的分类召回率对比 |
由图 6、图 7可以看出, HMM模型的准确率与召回率均优于RF模型, 即HMM能够获得更加精确的检测结果。
4 结束语本文提出一种在Spark平台上通过HMM模型进行恶意域名分类的方法。利用Spark基于内存的运算速度优势和对实时数据流进行处理的特性, 结合HMM模型中的Baum-Welch算法和Viterbi算法进行精确分类, 以提升检测系统的识别效果。实验结果表明, 该方法可以提高分类结果的准确率与召回率。
[1] |
中国互联网络信息中心.第41次中国互联网络发展状况统计报告[R/OL].[2018-04-20].http://www.cac.gov.cn/2018-01/31/c_1122347026.htm.
( ![]() |
[2] |
YAN Yida, LIU Zhenyan, ZHONG Junwei, et al.Malicious domain detection based on machine learning[EB/OL].[2018-04-25].http://dpi-proceedings.com/index.php/dtcse/article/view/19866.
( ![]() |
[3] |
SHI Yong, CHEN Gong, LI Juntao. Malicious domain name detection based on extreme machine learning[J]. Neural Processing Letters, 2018, 48(3): 1347-1357. DOI:10.1007/s11063-017-9666-7 ( ![]() |
[4] |
ALIEYAN K, ALMOMANI A, MANASRAH A, et al. A survey of botnet detection based on DNS[J]. Neural Computing and Applications, 2017, 28(7): 1-18. ( ![]() |
[5] |
POMOROVA O, SAVENKO O, LYSENKO S, et al.A technique for the botnet detection based on DNS-traffic analysis[C]//Proceedings of International Conference on Computer Networks.Berlin, Germany: Springer, 2015: 127-138.
( ![]() |
[6] |
马旸, 强小辉, 蔡冰, 等. 大规模网络中基于集成学习的恶意域名检测[J]. 计算机工程, 2016, 42(11): 170-176. DOI:10.3969/j.issn.1000-3428.2016.11.028 ( ![]() |
[7] |
SINGH K, GUNTUKU S C, THAKUR A, et al. Big data analytics framework for peer-to-peer botnet detection using random forests[J]. Information Sciences, 2014, 278(19): 488-497. ( ![]() |
[8] |
ZAHARIA M, CHOWDHURY M, FRANKLIN M J, et al.Spark: cluster computing with working sets[C]//Proceedings of USENIX Conference on Hot Topics in Cloud Computing.San Diego, USA: USENIX Association, 2010: 2-10.
( ![]() |
[9] |
MENG X, BRADLEY J, YAVUZ B, et al. MLlib:machine learning in Apache spark[J]. Journal of Machine Learning Research, 2016, 17(1): 1235-1241. ( ![]() |
[10] |
VERMA A, MANSURI A H, JAIN N.Big data manage-ment processing with Hadoop MapReduce and spark technology: a comparison[C]//Proceedings of 2016 Symposium on Colossal Data Analysis and Networking.Washington D.C., USA: IEEE Press, 2016: 1-4.
( ![]() |
[11] |
BAUM L E, PETRIE T, SOULES G, et al. A maximization technique occurring in the statistical analysis of probabilistic functions of Markov chains[J]. Annals of Mathematical Statistics, 1970, 41(1): 164-171. ( ![]() |
[12] |
朱明, 郭春生. 隐马尔可夫模型及其最新应用与发展[J]. 计算机系统应用, 2010, 19(7): 255-259, 216. DOI:10.3969/j.issn.1003-3254.2010.07.061 ( ![]() |
[13] |
苏文胜, 王奉涛, 朱泓, 等. 双树复小波域隐Markov树模型降噪及在机械故障诊断中的应用[J]. 振动与冲击, 2011, 30(6): 47-52. DOI:10.3969/j.issn.1000-3835.2011.06.011 ( ![]() |
[14] |
李航. 统计学习方法[M]. 北京: 清华大学出版社, 2012.
( ![]() |
[15] |
杨安驹, 杨云, 周嫒嫒, 等. 基于隐马尔科夫模型的融合推荐算法[J]. 计算机与现代化, 2015(9): 60-65. DOI:10.3969/j.issn.1006-2475.2015.09.013 ( ![]() |
[16] |
SMYTH P.Hidden Markov models and neural networks for fault detection in dynamic systems[C]//Proceedings of 1993 IEEE-SP Workshop on Neural Networks for Signal Processing.Washington D.C., USA: IEEE Press, 1993: 582-592.
( ![]() |
[17] |
VITERBI A J. A personal history of the Viterbi algorithm[J]. IEEE Signal Processing Magazine, 2006, 23(4): 120-142. DOI:10.1109/MSP.2006.1657823 ( ![]() |
[18] |
JR G D F. The Viterbi algorithm[J]. Proceedings of the IEEE, 1973, 61(3): 268-278. DOI:10.1109/PROC.1973.9030 ( ![]() |
[19] |
WELCH L R. Hidden Markov models and the Baum-Welch algorithm[J]. IEEE Information Theory Society News Letter, 2003, 53(2): 194-211. ( ![]() |
[20] |
张峻飞.Hadoop环境下的恶意域名检测方案研究[D].武汉: 华中科技大学, 2015. http://cdmd.cnki.com.cn/Article/CDMD-10487-1015909384.htm
( ![]() |
[21] |
赵成龙.一种检测恶意域名的增量并行SVM算法研究与实现[D].武汉: 华中科技大学, 2016. http://cdmd.cnki.com.cn/Article/CDMD-10487-1016744958.htm
( ![]() |
[22] |
MOLENBERGHS G, KENWARD M G.The expectation-maximization algorithm[M]//MOLENBERGHS G, KENWARD M G.Missing data in clinical studies.[S.l.]: Wiley-Blackwell, 2007.
( ![]() |
[23] |
夏丽莎.基于隐马尔可夫模型的故障诊断及相关算法研究[D].武汉: 华中科技大学, 2014. http://cdmd.cnki.com.cn/Article/CDMD-10487-1014268606.htm
( ![]() |
[24] |
KANUNGO T, MOUNT D M, NETANYAHU N S, et al. An efficient k-means clustering algorithm:analysis and implementation[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2002, 24(7): 881-892. DOI:10.1109/TPAMI.2002.1017616 ( ![]() |