基于卷积神经网络的恶意区块链域名检测方法
2022-08-08王中华臧天宁
王中华 徐 杰 韩 健 臧天宁
1(国家计算机网络应急技术处理协调中心 北京 100029) 2(中国工业互联网研究院 北京 100102) 3(中国科学院信息工程研究所 北京 100093)
互联网的发展给人们带来便利的同时,也存在着一些安全风险,如钓鱼网站、垃圾邮件等,其中僵尸网络的威胁尤为巨大.随着区块链技术的普及和应用,区块链域名系统(blockchain domain name system, BDNS)应运而生并逐渐被广泛采用,一些僵尸网络开始采用区块链域名(blockchain domain name, BDN)来托管命令控制服务器(command and control server, C&C Server),进而实施恶意活动.
2021年,微软的数字防御报告显示[1],近几年BDN因为其匿名性和抗审查性等特点,已经被广泛应用到僵尸网络中.Necurs僵尸网络家族根据域名生成算法(domain generation algorithm, DGA)生成“.bit”顶级域(top level domain, TLD)的域名;银行木马Trickbot僵尸网络家族和Bazarloader采用“.bazar”TLD生成DGA域名[1];Mirai僵尸网络的变种Fbot蠕虫[2]采用“.lib”TLD生成恶意域名.利用BDN从事恶意活动,可以躲避传统恶意域名检测方法的检测,这为僵尸网络实施恶意活动提供了新的方式,给网络安全带来新的威胁.
本文针对现有方法的局限性,深入刻画僵尸网络的特征,并着重分析了恶意BDN的流量行为以及资源记录,共提取出24个特征,采用卷积神经网络算法检测恶意BDN.实验结果显示,与现有的方法相比,本文方法具有更好的检测结果,并且能够发现新出现的恶意BDN.本文的主要贡献如下:
1) 提出了一种新型的恶意区块链域名检测方法,该方法采用卷积神经网络对域名特征进行转换,从多角度描述域名特征,进而检测恶意区块链域名;
2) 通过深入分析僵尸网络的特点,挖掘恶意区块链域名的流行行为以及静态特征,从3个角度提取域名的24个统计特征.
3) 在测试流量构建的数据集上进行实验,结果显示,本文方法的F1_Score为0.988 3,AUC为0.989 6.验证了本文方法效果更好,并且能够发现更多的未知恶意域名.
1 研究背景
1.1 恶意域名
恶意域名是指被用于恶意活动的域名. 以僵尸网络为例,僵尸网络由互联网中受到黑客集中控制的若干台计算机组成,这些计算机往往被黑客用来发起大规模的网络攻击,同时这些计算机所保存的信息,譬如密码等私人信息也都可被黑客随意获取.僵尸网络中的计算机也被称为“肉鸡”,“肉鸡”通过域名解析定位到C&C服务器的IP,由C&C服务器向这些“肉鸡”发送命令,进而“肉鸡”执行操作.由此可见,域名在计算机通信过程中发挥着重要作用.
1.2 研究现状
区块链域名本质上也是域名,所以基于区块链域名的僵尸网络在行为上和基于传统域名的僵尸网络类似.因此,下面从传统恶意域名和恶意BDN 2方面回顾研究现状.
1.2.1 传统恶意域名
针对传统恶意域名方面,研究人员进行了大量研究.一些研究专注于恶意域名产生的错误信息,如NXDomain,一些研究则将重点放在流量行为上面,还有一些研究着重分析域名字符串等信息.
通常情况下,对DGA域名的DNS请求通常会导致产生不存在域名(non-existent domain, NXDomain)响应,并且同一个DGA算法生成的域名会产生相似的不存在域名响应.Antonakakis等人[3]通过分析NXDomain信息,利用聚类和分类算法检测恶意域名.Zhang等人[4]通过分析HTTP日志,发现了基于错误源模式、错误生成模式和错误恢复模式的恶意活动,根据HTTP失败以及成功请求流量实现了恶意域名自动检测系统.谷勇浩等人[5]通过提取域名响应时间和域名响应包大小检测恶意域名,降低了CDN域名的误报率,提升了检测效果.席一帆等人[6]通过构建词图检测恶意DGA域名,达到了较好的检测效果.Shi等人[7]基于域名自身的特征,如长度、注册时间等,利用神经网络检测恶意域名.
上述方法提取whois等区块链域名没有的特征,并且没有挖掘区块链域名的特征.因此不适用于恶意区块链域名的检测.
1.2.2 恶意BDN
目前针对恶意BDN的检测工作比较少.Patsakis等人[8]认为BDNS为僵尸网络提供了一种更安全隐蔽的方法与C&C服务器通信,仅讨论了BDNS所来带来的威胁,并没有给出具体的检测方法.Huang等人[9]通过分析DNS流量行为检测恶意BDN,但良性样本数量较小,且特征容易被伪造,具有一定的局限性.Fran等人[10]将区块链钱包、域名以及解析IP进行关联来推断恶意域名,但是该方法需要大量历史信息,并且难以发现新出现的恶意域名.
1.3 区块链域名系统
域名系统(domain name system, DNS)是互联网的一项基础服务,作为将域名和IP地址相互映射的数据库,可以使用户很方便地访问互联网[11-12].域名系统因其设计理念等历史原因,存在一定的安全风险,如单点故障、分布式拒绝服务攻击等.随着区块链技术的成熟,一些公司将区块链技术应用于域名解析,建立了去中心化的BDNS.现在有很多种BDNS,各自的TLD[13-15]如表1所示,这类域名和互联网名称与数字地址分配(Internet corporation for assigned names and numbers, ICANN)授权的TLD不同,只能被BDNS服务器解析.
表1 常见的BDNS及其TLD
BDNS提供了和传统DNS相同种类的资源记录,但不提供与用户隐私相关的信息,如whois信息.和DNS不同,BDNS在区块上存储域名的资源记录,并且保留多个备份.因此BDNS的域名解析过程不会分层,用户请求任意一个备份均可直接获得权威响应,如图1所示:
图1 区块链域名解析过程
同时,对BDN的每次相关更新都会被记录到区块中,比如修改A记录.区块链技术保证只有域名所有者可以修改该域名的资源记录.因此,BDN具有匿名性和抗审查性等特点,克服了传统DNS的缺点,但也为黑客提供了可靠方法来托管C&C服务器.
1.4 机器学习和深度学习
1.4.1 机器学习
本文采用的机器学习方法是随机森林、支持向量机和神经网络.
1) 随机森林(random forests, RF)属于集成学习的一种组合分类算法[16].该算法采用抽样法从数据集中抽取多个样本训练决策树,然后将这些决策树的结果组合在一起,通过投票或取平均值得出最终的分类或预测结果,使得整体模型的结果具有较高的精确度和泛化性能.
2) 支持向量机(support vector machine, SVM)是定义在特征空间上的间隔最大的线性分类器[17].该方法通过将输入向量映射到一个高维特征空间,在此空间中构造最优分类超平面,从而使正例和反例样本之间的分离界限达到最大,使其泛化性能达到最优.
3) 神经网络(neural network, NN)源于感知机模型,由大量的人工神经元连接进行计算,能够在外界信息的基础上通过反向传播改变自身参数,是一种自适应模型[18].多层隐藏层以及激活函数的多样性使得网络具有较强的表达能力,输出层的多个神经元使得网络可以灵活地应用于分类、回归、降维和聚类等任务.
1.4.2 深度学习
本文采用的深度学习方法是卷积神经网络(convolutional neural network, CNN).CNN以神经网络为基础,除了输入层和输出层之外,由卷积层、池化层和全连接层组成[19].
1) 卷积层:卷积层的作用是对上一层的输出提取更高层次的特征.每个卷积层由若干个卷积单元组成,卷积层中每个节点的输入都是上一层卷积核局部区域的计算结果,卷积核的尺寸可根据特征以及目标任务来自定义.
2) 池化层:池化层的作用是对上一层的输出进行压缩.该层将输入的特征图划分为若干个矩形区域.一方面通过对子区域进行计算,使特征图变小,进行特征压缩;另一方面利用池化层,参数的数量和模型的计算量也会大大减少.常用的池化方法主要有均值池化和最大池化2种.
3) 全连接层:全连接层的作用是依据特征向量进行分类,是连接在网络最后的分类器.和神经网络类似,通过前向和反向传播调整网络参数训练模型.
总体来说,CNN通过对输入层的特征进行卷积和池化操作,得到新的特征,最后将新特征输入到全连接层中,输出分类任务的结果.
1.4.3 评估指标
为了综合评估,本文采用机器学习中常见的指标来评估模型,如表2所示.其中F1_Score是最常使用的指标,可以较为综合地评价模型的效果.AUC是ROC曲线下的面积,适用于评估非平衡数据集的情况.
表2 评估指标及其描述
2 研究方法
为了识别恶意BDN,本文提出了一种新型检测方法.该方法从多角度分析恶意区块链域名与良性域名之间的不同,共提取出24个特征,最后采用卷积神经网络算法检测恶意BDN.
2.1 特征分析
本文通过分析域名的流量行为以及自身信息,提取出时间序列特征、资源记录特征和字符统计特征3类特征区分恶意BDN和良性域名,如表3所示:
表3 特征描述
1) 时间序列特征:恶意BDN和良性域名在用户访问方面存在一定的差异.恶意BDN主要由僵尸网络使用.当僵尸网络处于活跃状态时,大规模的“肉鸡”会发起DNS域名请求定位C&C服务器,此时恶意BDN的DNS请求频率会急剧增加.另外如果域名由DGA生成,由此会产生大量的NXDomain响应.而僵尸网络在非活跃状态时,“肉鸡”和C&C服务器之间的通信较少,因此恶意BDN的DNS请求及其相关流量也较少.良性域名则是给各类用户使用的,其DNS请求频率在任何时候都是比较稳定的.因此,恶意BDN和良性域名的DNS请求频率方面存在一定的差异,为了量化这种差异,考虑同一个域名相邻DNS请求包之间的时间间隔(TimeDiff)以及每分钟DNS请求包的数量(PktNumPerMin)2种特征.为了综合表征该特征的分布,分别提取其最小值(Min)、第一四分位数(Q1)、中位数(Media)、第三四分位数(Q3)、最大值(Max)、标准差(Std).同时,针对域名请求的用户差异,提取访问域名的IP数量特征,即UniqueIP.
2) 资源记录特征:良性域名和恶意BDN在资源记录方面存在一定的差异.良性域名因为其业务繁多,并且用户较为广泛,为了更好地提供服务,往往设置较多的资源记录;而恶意BDN,为了避免过多地暴露自己,则会设置较少数量的资源记录.在众多种类的资源记录中,域名解析主要使用的是A记录和NS记录,因此提取A记录(A_Record_Num)和NS记录(NS_Record_Num)数量特征.另外,良性域名为了更好地提供服务,业务更新较快,其A记录的生存时间(time to live, TTL)则相对较小;为了和C&C服务器保持连接以减少DNS请求次数,恶意BDN的TTL一般设置得较长;因此提取域名A记录的TTL.因为TTL值可能被代理服务器修改,因此提取DNS响应包中其最小值(Min)、第一四分位数(Q1)、中位数(Median)、第三四分位数(Q3)、最大值(Max)、标准差(Std).
3) 字符统计特征:恶意BDN和良性域名在字符组成方面存在一定的差异.通过对数据集分析,发现有相当一部分恶意BDN是人类不可读的[20],而良性域名则是有意义的单词或者简称.另外,二者在字符长度上也有较大的差异.对此,本文提取出域名的长度(Domain_Length)、域名的信息熵(Domain_Entropy)以及元音字母比例(Domain_VowelRatio)3个特征量化上述性质.
2.2 CNN模型
CNN主要适用于计算机视觉领域.目前已有相关工作将其应用到网络流量分类,且取得了较好的效果,因此本文应用CNN检测恶意区块链域名.
从本质上说,CNN是从不同角度提取图片中相邻位置像素的关联,即从不同维度提取图片的特征,对特征降维进行分类.因此,本文将域名的每个特征作为图片中的1个像素点,将域名表示成1张图片,从而检测恶意BDN.本文共提取出24个特征,有若干个特征是属于同类的,可将特征分为4大类,排列成4×6维的图像,如图2所示.为了避免特征输入位置带来的差异,本文在不同的卷积层中设置了不提供维度的卷积核.同时,为了避免数据转换造成的信息丢失,本文并不将特征值映射到灰度像素的范围,保留最原始的特征取值.因此,最终将恶意BDN的检测任务转换为采用CNN的图片分类任务.
图2 特征输入映射
CNN模型共分为6层,如图3所示.包括输入层、3层卷积层、全连接层、输出层.3层卷积层从不同维度挖掘特征之间的关联,由于维度较小,所以不采用池化层降维压缩数据.具体描述如下:
1) 输入层.维度为4×6个神经元,表示24个特征,输入到第1卷积层中.
2) 第1卷积层.该卷积层用于挖掘同类特征之间的关联.卷积核的维度为1×2,步长均为1,采用非填充模式并使用ReLU激活函数进行非线性转换.该层采取32个卷积核,最终生成32个4×5的平面.
3) 第2卷积层.该卷积层用于挖掘不同类特征之间的关联.卷积核的维度为2×1,步长均为1,采用填充模式并使用ReLU激活函数进行非线性转换.该层采取32个卷积核,最终生成1 024个5×5的平面.
4) 第3卷积层.该卷积层用于挖掘所有特征之间的关联.卷积核的维度为2×2,步长均为1,采用非填充模式并使用ReLU激活函数进行非线性转换.该层采取1个卷积核,最终生成1 024个4×4的平面.
5) 全连接层.全连接层是3层神经网络,作用是综合利用卷积后的所有特征,经过非线性变换得到分类结果,输出到输出层.3层的神经元数量分别是1 024,512,64.
6) 输出层.输出层为2个神经元,表示域名的良性和恶意2个类别.
图3 CNN模型
3 实验分析
为了验证本文方法的有效性,本节进行实验评估.首先构造数据集,经过交叉验证训练模型,在测试集上验证本文方法的可行性;然后与现有的检测方法从多方面比较,验证本文方法具有更好的性能.
3.1 数据采集
在实验网络节点收集了为期7天的DNS测试流量,原始数据量为25 GB,并进行了脱敏处理.本文认为2级域名在Alexa[21]排名前50 000以内的域名为良性域名.对于恶意BDN,满足下列条件之一则被认为是恶意的:
1) 域名出现在360DGA[22]名单中;
2) VirusTotal检测到的域名[23].
另外,无论是良性域名还是恶意域名都会被一些用户访问,因此将DNS请求次数小于10的域名过滤掉.对于没有标记的BDN,将它们作为后续评估模型的对比数据集Dunknown.
提取域名的统计特征:对于时间序列特征,提取域名在7天之内所有的DNS请求包,时间从域名的第1个请求包开始,到最后1个请求包结束,计算其特征.对于资源记录特征中的TTL值,提取域名在7天之内的所有DNS响应包,统计A记录中的TTL特征;对于资源记录特征,因为代理服务器存在的缘故,DNS响应包中的内容可能和其权威服务器不同步. 提取其权威的DNS响应包,统计其资源记录特征.对于字符统计特征,去掉域名的TLD,并计算其剩余字符串的长度、信息熵以及元音字母比例3个特征.
最后,随机将标记后的数据划分为训练集(80%)和测试集(20%).整理后的数据集如表4所示:
表4 数据集
3.2 模型训练
本文利用Scikit-Learn[24]和深度学习框架PyTorch[25]实现随机森林、支持向量机、神经网络以及卷积神经网络模型,模型的参数均采用默认值.由于正负样本数据集的数量差距较大,因此在训练时,随机抽取1万个良性域名作为负样本,采用10折交叉验证在训练集上训练分类模型.
4个模型在验证集上的AUC如图4所示,从图4中可以看出,CNN分类器要优于其他分类器,AUC达到了0.983 8.
图4 不同模型在验证集上的AUC结果
从结果来看,非线性模型更适合本问题,并且在每轮的交叉验证中,恶意样本约占比6.7%,表明卷积神经网络、随机森林、神经网络更适合处理不平衡数据集.因此本文选择CNN作为检测模型.
3.3 模型测试
将CNN检测模型应用到测试数据集上,其AUC达到了0.989 6,F1_Score为0.988 3,进一步验证了本文模型可较为准确地检测恶意BDN,达到了较好的效果.
3.4 模型对比
本文与Leopard[9]方法进行对比.为了对比二者的优劣,在检测结果和发现未知恶意域名2方面进行测试.
3.4.1 检测结果
分别在Leopard和本文构建的数据集上进行测试,随机划分训练集(80%)和测试集(20%).测试集上的结果如表5所示:
表5 2种方法在不同数据集上的F1_Score
可以看出,CNN检测模型在2个数据集上的F1_Score均比Leopard高.表明本文方法比Leopard的检测效果更好,并且其检测的良性域名范围更大.这也证实了本文方法可以有效挖掘单个域名的不同特征之间的关联,并且通过四分位点等特征,能够准确区分良性和恶意域名,降低了域名因被伪造单个特征而检测失败的概率,从而提升了检测效果.
3.4.2 发现未知恶意域名
为了验证模型的泛化能力,用Dunknown来对比2个模型,该数据集中包含了新出现的域名.我们认为满足以下条件的域名是恶意的:
1) BDN的历史解析IP曾经是恶意的;
2) BDN的访问IP是被恶意软件感染的.
针对Leopard的Dunknown,本文方法识别出该数据集中全部的恶意BDN;针对本文的Dunknown,识别出72个恶意BDN,而Leopard仅识别出51个恶意BDN.表明本文方法能更高效地发现新的恶意BDN.相较于Leopard,本文方法通过提取特征并对特征进行关联,能够更加准确地表征同一类域名,增强了模型的泛化能力.
4 结 语
通过分析BDNS的解析流程,研究了恶意BDN的工作机制,提出基于CNN的恶意BDN检测方法,实现了对恶意BDN的有效检测.该方法通过提取域名的时间序列特征、资源记录以及字符统计特征,将特征向量输入到CNN中实现了恶意BDN的检测.本文方法体现了CNN在该任务上的优良性能,突破了现有检测恶意BDN方案的局限性.
本文认为,恶意BDN的特征提取可分为2方面: 一方面是静态特征; 另一方面是行为特征.静态特征是其自身的属性,如资源记录、域名字符信息等;行为特征分为非活跃状态行为和活跃状态行为.
另外,本文方法存在一定的局限,只考虑了基于区块链域名的恶意行为特点以及恶意区块链域名的自身信息,并没有考虑区块链特征,如钱包、域名注册区块等.后续将进一步在此基础上进行研究.