基于深度学习的Botnet攻击C&C服务器溯源方法
未命名
07-12
阅读:110
评论:0

基于深度学习的botnet攻击c&c服务器溯源方法
技术领域
1.本发明属于网络攻击检测技术领域,特别是涉及一种基于深度学习的botnet攻击c&c服务器溯源方法。
背景技术:
2.僵尸网络botnet是指攻击者出于恶意目的,传播僵尸程序(bot),以控制大量僵尸主机,并通过一对多的命令和控制信道所组成的网络。例如,同时对目标进行分布式拒绝服务攻击,或同时发送大量的垃圾邮件等。随着网络社会的高速发展及智能化水平的提高,大量的智能终端设备应用在商场、公园、学校、医院、地铁站等人群密集且易发生公共安全事件的场所,智能设备的出现无疑给人们带来了极大的便利。然而,由于相关的相关智能设备数量之大,对其保护之薄弱,加上日益严峻的网络空间安全形势,利用深度学习对botnet检测与主机溯源的方法有着非常重要的现实意义。
3.由于此研究领域具有较高的理论研究与实际应用价值,国内外许多研究者提出了较多针对僵尸网络的检测溯源技术,但几乎所有的相关研究工作都是关注irc僵尸网络控制信道的检测和刻画。而基于http和p2p协议的僵尸网络由于具有较强的个性化差异,目前无法给出通用化的检测方法。现有行僵尸网络检测溯源还包含如下几个方面缺点:大多数传统的检测方法严重依赖于启发式设计的多阶段检测标准。僵尸网络的检测主要基于黑名单以及白名单方式,检测准确度高,而在加密流量识别方面能力相对比较薄弱,对于未知的攻击将无法进行检测,因此在网络安全保护方面就会存在弱点。且由于http与p2p协议僵尸网络的较强个性化差异,无法给出通用合理的检测方法、从整体上提升网络应用的安全性的迫切需求。
4.基于以上背景,本发明致力于探究对僵尸网络中c&c-heartbeat流量的检测以及对c&c主控服务器的溯源,力求从根本上遏制botnet传播僵尸程序,挽回经济损失。
技术实现要素:
5.本发明实施例的目的在于提供一种基于深度学习的botnet攻击c&c服务器溯源方法,解决了现有技术中存在的由于数据具有复杂的动态特性和不稳定性等特点使得传统的检测方法无法获得较为理想检测结果的问题,提升了检测与溯源僵尸网络中攻击主机(master节点)的准确度。
6.为解决上述技术问题,本发明所采用的技术方案是,一种基于深度学习的botnet攻击c&c服务器溯源方法,包括以下步骤:
7.步骤一、数据集预处理与特征提取;
8.步骤二、通过融合的lstm+cnn训练模型,使用从步骤一中所提取的特征识别出命令与控制c&c会话数据部分,根据心跳heartbeat报文与c&c服务器的跟踪关系,从其中分离出心跳数据包;
9.步骤三、对心跳数据包进行数据提取并作为输入数据,用于构建图卷积神经网络
gcn,通过gcn网络实现对僵尸网络botnet主机的溯源。
10.进一步地,所述步骤一具体包括如下步骤:
11.步骤1.1、以公开的僵尸网络攻击数据集为基础,对数据集进行预处理:首先在数据清理过程中,对初始数据包采用缺失值处理、异常值处理、重复值处理的三种方式进行,去除异常并纠正错误;其次在数据转换过程中,以数据离散化操作对连续数据进行处理,使连续数据值域分布从连续属性变为2个或2个以上的值域离散属性;最后进行数据聚合,得到botnet数据集;
12.步骤1.2、使用1d-cnn对预处理后的botnet数据集进行特征提取。
13.进一步地,所述步骤1.2具体为:
14.首先,从预处理后的包含.pcap文件的数据集中逐个读取数据包,将每个数据包添加到对应的网络流中,在currentflows存储当前还未结束的所有tcp或udp流;在添加的过程中不断地更新每个网络流的统计特征,最终将统计特征写入csv文件;判断新加入的数据包是否属于当前所有未结束的网络流,如果不属于,则直接创建一个新的网络流,里面只含当前数据包,存入到currentflows中;如果属于,则需判断时间是否超时、是否含有fin标志,如果不超时且不含有fin标志,则声明一个basicflow对象,根据id从currentflows中得到与当前数据包对应的网络流,调用addpacket函数将当前数据包加入到对应网络流中;如果超时或存在fin标志,则说明当前网络流结束,标记超时并从currentflows中移除对应网络流;含fin标志同样直接从currentflows中移除对应网络流;对于结束的网络流,直接保存;将保存的网络流放入1d-cnn中进行特征提取;
15.所述网络流以如下形式进行保存:
16.《srcip,srcport,dstip,dstport,protocol》
17.其中,srcip和srcport表示源节点的ip地址和端口号;dstip和dstport表示目的节点的ip地址和端口号;protocol表示以所用协议类型的格式进行存储。
18.进一步地,所述1d-cnn模型由编码模块和解码模块两个部分组成,其中,编码模块由多次一维卷积和最大池化运算组成:
[0019][0020]
其中,w为卷积核的运算宽度,表示第l层中的第i个卷积核,表示第l层中第i个卷积核中的第j'个权重值,为神经网络中第l层中的第j个卷积区域,y
l(i,j)
为第l层的编码输出;
[0021]
解码模块的输出过程为:
[0022]
x
i+1
=xi+f(x
l-i+1
,w
l-i+1
)
[0023]
其中,x
i+1
表示输出结果,xi表示网络输入特征,l表示1d-cnn网络中编码和解码模块总数量,f(x
l-i+1
,w
l-i+1
)表示本次解码所对应的编码过程中通过两个卷积层得到的输出特征。
[0024]
进一步地,所述步骤二具体为:
[0025]
步骤2.1:基于步骤一提取出的特征向量作为输入,用于对融合的cnn-lstm深度学习模型进行训练;
[0026]
步骤2.2:对于任意需要预测标签的网络流数据集,将其放入训练后的cnn-lstm深度学习模型后进行分类,共分为三种类型:c&c、malicious和benign;其中,c&c表示受感染的设备与c&c服务器之间的通信;malicious表示除c&c以外的其余恶意流量;benign表示良性流量;
[0027]
步骤2.3:以步骤2.2中进行分类的结果标签为依据,分离出c&c会话部分;根据bot master节点与c&c服务器之间周期性的发送heartbeat报文的跟踪关系,基于c&c特征和时间特征从识别为c&c类别的文件中分离出心跳数据包,最终将分离出的心跳数据包单独保存,作为后续构建图卷积神经网络的训练数据集。
[0028]
进一步地,所述cnn-lstm深度学习模型中cnn模型的训练过程为:
[0029]
步骤2.11:对于所构建的cnn模型,卷积层设置卷积核,对输入数据x包含c&c特征的样本特征向量的输入数据x进行离散卷积运算,提取输入数据的空间特征,即有:
[0030][0031]
其中,式中y(x)为输出,f(
·
)函数为激活函数,m
×
n大小的(i,j)位置的卷积核权重为ω
ij
,其中,其中表示域值空间;x
ij
为原始图片和卷积核对应区域的像素值,b为偏差;
[0032]
步骤2.12:池化层进行均值采样和最大值采样同时,提取不同区域内的局部依赖性在不同的区域内保留最突出的信息,获得区域向量后被送入下一个卷积层;
[0033]
步骤2.13:使用反向传播算法激励传播和权重更新反复迭代循环,直至网络对输入的响应达到预定的目标范围。
[0034]
进一步地,所述步骤2.13中反向传播算法为:
[0035]
对于训练集合中的任意一个样本,首先定义第l层的第j个神经元所产生的错误为实际值与预测值之间的误差δ
l
,即有:
[0036][0037]
其中,表示第l层的第j个神经元的输入,c表示损失函数,则有
[0038][0039]
其中,a
l
表示模型最终预测的输出,表示第l层的第j个神经元的输出,y表示样本的预测标签,yj表示样本的真实标签;随后,基于输出层的误差,通过计算损失函数c对权重的变化率来更新权重,即有:
[0040][0041]
其中,表示第l层第j个神经元计算的误差,表示第l-1层的第k个神经元的输出,表示第l-1层的第k个神经元和第l层的第j个神经元连接的权重。
[0042]
进一步地,所述cnn-lstm深度学习模型的损失函数为:
[0043]
l(xi,y)=αl1(xi,y)+(1-α)l2(xi,y)
[0044]
其中,l1(xi,y)和l2(xi,y)分别表示cnn模型和lstm模型的损失函数,xi为输入;α为超参数,表示两个模型损失函数之间的权重关系,α∈[0,1]。
[0045]
进一步地,所述步骤三具体为:
[0046]
步骤3.1:对步骤二中提取的心跳数据包中每一个数据包中的前k个字节进行提取并转换为灰度数值,作为图卷积网络的输入数据进行训练;若出现字节总长度不足k个的情况,则使用0x00进行补全;
[0047]
步骤3.2:将步骤3.1的结果生成网络拓扑结构图,进而构建图卷积网络gcn,定义图g=(v,e),其中v和e分别表示顶点和边的集合;定义矩阵x和a分别为节点的特征矩阵和邻接矩阵,则gcn的快速卷积公式为:
[0048][0049]
其中,其中in是单位矩阵,a为邻接矩阵,为添加自连接的邻接矩阵;是节点的度矩阵,w
(l)
为神经网络第l层的权重矩阵,h
(l)
是第l层的激活矩阵,且h
(0)
=x,x为节点xi的特征向量矩阵;
[0050]
对于gcn网络,前向传播公式为:
[0051][0052]
其中,w
(0)
∈rc×m为输入层到隐藏层的权重矩阵,该隐藏层共用m个特征映射,w
(l)
∈rm×f为隐藏层到输出层的权重矩阵,f(
·
)函数为输出层的特征映射数;
[0053]
对于gcn网络,分别使用relu和softmax做作为活函数,其中s为输入,relu将输入s和0取最大值后输出,单侧抑制输入,使神经元具有稀疏激活性;relu的表达式为:
[0054]
relu(s)=max(0,s)
[0055]
通过上述gcn网络,根据网络拓扑结构图进行溯源以寻找主控端的域名、ip地址或端口号标识信息,最终锁定botnet攻击的主机master节点以完成溯源。
[0056]
进一步地,所述gcn网络的训练方法为:首先使用训练集和测试集划分函数train_test_split()对处理后的数据集进行划分;然后使用数据类型转换函数data_deal()将object型数据转为数值型,并构造图数据类型data;然后调用train()函数来对训练数据集进行训练得到模型;用test()调用测试数据集来测试所训练好的模型。
[0057]
本发明的有益效果是:
[0058]
1.本发明采用一维卷积神经网络(one-dimensional cnn)对网络数据进行数据特征提取,结合lstm技术对网络数据包进行文本特征学习,很好地满足了对技术精炼问题和实验严谨性问题两个方面的需求。同时,由于一维cnn网络过去常被应用于序列模型和自然语言处理领域,本发明实现了1d-cnn在复杂网络结构中进行数据初步特征提取的创新应用,进一步拓宽了它的应用范围。
[0059]
2.将溯源僵尸网络中的主机作为当前僵尸网络攻击检测的重中之重,开创了实现僵尸网络攻击检测的新方式。
[0060]
3.通过网络拓扑结构溯源的方式,利用图卷积网络(gcn)技术对捕获的数据进行训练,将抽象的网络路径导出为具有可视化特征的具象网络路径图,有效地提升了僵尸网络的检测精确度,并实现了对攻击者的溯源。
附图说明
[0061]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0062]
图1是本发明实施例的基于深度学习的botnet攻击c&c服务器溯源方法的流程图。
[0063]
图2是本发明实施例的botnet攻击者溯源主机控端的实现原理示意图。
[0064]
图3是本发明实施例的cicflowmeter对网络流量pcap文件进行特征提取的流程图。
[0065]
图4是本发明实施例的使用cicflowmeter进行特征提取后的特征文件csv文件内容示意图。
[0066]
图5是本发明实施例的图卷积网络的训练次数与损失值之间的关系曲线图。
[0067]
图6是本发明实施例的使用deeptraffic进行数据包二次拆分的结果示意图。
[0068]
图7是本发明实施例的gcn网络实现botnet攻击master主机溯源的流程示意图。
[0069]
图8是本发明实施例的运行gcn网络得到的输出结果图。
具体实施方式
[0070]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0071]
如图1所示,本实施例提供了一种基于深度学习的僵尸网络(botnet)检测与融合“心跳(heartbeat)”的命令与控制(command&control,c&c)服务器溯源方法,主要包括:数据集采集与特征提取、基于lstm和cnn模型的botnet检测、c&c会话分离、心跳数据包抽取、图卷积网络训练、网络拓扑图构建和最终锁定master节点等7个阶段,具体的:首先,通过嗅探的网络数据报文.pcap文件,对数据包文件进行预处理后,通过构建1d-cnn模型提取botnet有关的关键特征,得到进行botnet检测模型所需的训练数据(尤其是c&c会话数据集);然后,通过融合长短记忆网络(long short-term memory,lstm)模型和卷积神经网络(convolutional neural network,cnn)模型训练,从第一个步骤中提取的特征中分离出c&c会话部分数据,根据“心跳”与c&c服务器的跟踪关系,从其中分离出心跳数据包;最后,将心跳数据包作为输入数据,通过图卷积神经网络(graph convolutional network,gcn)训练模型后输出网络拓扑结构,基于拓扑结构的学习,最终对主机进行溯源算法设计与测试,从而能够在现有检测botnet的基础上对攻击者进行溯源定位。具体包括如下步骤:
[0072]
步骤一:通过嗅探网络数据报文捕获.pcap文件,并进行预处理,得到进行模型训练的部分数据,为降低能耗,本发明采用cnn压缩技术,设计并实现了轻量型的1d-cnn模型进行数据报文文本的特征抽取,并从中提取c&c会话相关的关键内容;具体包括以下步骤:
[0073]
步骤1.1:以公开的僵尸网络攻击数据集(即通过嗅探获得的.pcap文件的数据集)为基础,对数据集进行预处理。数据清理过程中,对初始数据包采用缺失值处理、异常值处理、重复值处理为主的三种方式进行,去除异常并纠正错误;数据转换过程中,以数据离散
化操作对连续数据进行处理,使其数据值域分布将从连续属性变为2个或2个以上的值域离散属性,节约资源并提高效率;最后进行数据聚合,使精简后的数据集仍然保持原有数据集的完整性,为僵尸网络检测深度学习模型的训练提供高质量训练数据集。
[0074]
步骤1.2:botnet数据集进行特征提取,提取“流”数据。首先,从.pcap文件中逐个读取数据包,将每个数据包添加到对应的网络流(network flow,netflow,简称“流”)中,在currentflows(表示用来标记当前接收到的数据包所对应的“网络流”)存储当前还未结束的所有tcp或udp流;在添加的过程中不断地更新每个流的统计特征,最终将统计特征写入csv文件;判断新加入的数据包是否属于当前所有未结束的流,如果不属于,则直接创建一个新的流,里面只含当前数据包,存入到currentflows中;如果属于,则需判断正向或反向,以及判断时间是否超时、是否含有fin(结束)标志,如果不超时且不含有fin标志,则声明一个basicflow对象(basicflow为用来存储目前收到的数据包的一个对象名,类似于编程中定义的变量),根据id(id表示“流”的编号,用于标记每一个保存的流,便于后续分析)从currentflows中得到与当前数据包对应的流,调用addpacket函数(为定义函数,该函数功能是将当前的数据包添加到已经存在的流中)将该数据包加入到对应流中;如果超时或存在fin标志,则说明当前流flow结束,标记超时并从currentflows中移除对应流;含fin标志同样直接从currentflows中移除对应流。对于结束的流,直接将流打印存储起来,具体参见图3。
[0075]
步骤1.3:对于组织为“流(flow)”形式的数据,将流以如下形式进行保存:
[0076]
《srcip,srcport,dstip,dstport,protocol》
[0077]
其中,srcip和srcport表示源节点的ip地址和端口号;dstip和dstport表示目的节点的ip地址和端口号;protocol表示以所用协议类型(如常见的tcp、udp、icmp协议等)的格式进行存储。一个完整的流会话将保存在一个文件夹中。
[0078]
步骤1.4:通过步骤1.3中保存的“流”数据,将其放入1d-cnn中进行特征提取,实现对无关数据的过滤,从而只保留对于botnet病毒识别具有重要贡献的特征。
[0079]
本实施例步骤一中对iot-32数据集进行的特征提取的结果如图4所示,每一条提取的特征向量均具备对应的标签。
[0080]
步骤一中1d-cnn的工作原理如下:
[0081]
对于1d-cnn,其过滤器仅沿输入数据的一个方向进行滑动,从特征维度较短或固定长度的片段中进行特征提取时,1d-cnn非常有效。此外,1d-cnn对具有潜在性、区别性的特征有较高的学习能力,这些特征能够表示每一个实体特征向量区间的相互依赖关系,然后使用所提取的特征进行最终决策判断。1d-cnn模型由编码(encoding)模块和解码(decoding)模块两个部分组成,编码模块由多次一维卷积和最大池化(max pooling)运算组成:
[0082][0083]
其中,w为卷积核的运算宽度,表示第l层中的第i个卷积核,表示第l层中第i个卷积核中的第j'个权重值,为神经网络中第l层中的第j个卷积区域。y
l(i,j)
为第l层的编码输出。
[0084]
在解码过程中,为了避免重要特征数据的丢失,1d-cnn将解码过程对称的编码层的输出数据进行级联操作,用于感知输入序列的低级和高级特征。
[0085]
x
i+1
=xi+f(x
l-i+1
,w
l-i+1
)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0086]
其中,x
i+1
表示输出结果,xi表示网络输入特征,l表示1d-cnn网络中编码和解码模块总数量,f(x
l-i+1
,w
l-i+1
)表示本次解码所对应的编码过程中通过两个卷积层得到的输出特征。
[0087]
最终,该优化后的深度神经网络模型(1d-cnn)能够满足基于网络流数据的关键特征抽取,从中提取与僵尸网络攻击相关的关键c&c特征,过滤无关的数据内容(尤其是正常的网络通信流量),为后续实现botnet检测提供高质量的c&c会话数据。
[0088]
步骤二:通过融合的lstm+cnn训练模型,使用从步骤一中所提取的特征识别出c&c会话数据部分,根据heartbeat与c&c服务器的跟踪关系,从其中分离出心跳数据包;具体的,包括以下步骤:
[0089]
步骤2.1:基于步骤一提取出的多维特征(83维)的特征向量作为输入,通过输入的特征向量,用于训练cnn-lstm模型。
[0090]
步骤2.2:对于所构建的cnn模型,卷积层设置卷积核,对输入数据x(包含c&c特征的样本特征向量)进行离散卷积运算,提取输入数据的空间特征,即有:
[0091][0092]
其中,式中y(x)为输出,f(
·
)函数为激活函数,m
×
n大小的(i,j)位置的卷积核权重为ω
ij
,其中,其中表示域值空间;x
ij
为原始图片和卷积核对应区域的像素值,b为偏差。
[0093]
池化层通过对卷积层内的数据进行取最大值、取平均值等操作,实现数据的降采样,同时进行噪声数据的剔除,使得最终保留所需关键特征。
[0094]
步骤2.3:池化层进行均值采样(mean pooling)和最大值采样(max pooling),通过消除非最大值,减少上层的计算,降低了模型的复杂度。同时,提取不同区域内的局部依赖性在不同的区域内保留最突出的信息,获得区域向量后被送入下一个卷积层。
[0095]
步骤2.4:使用反向传播算法,即通过激励传播和权重更新反复迭代循环,直至网络对输入的响应达到预定的目标范围。
[0096]
反向传播算法的方程为:
[0097]
对于训练集合中的任意一个样本,首先定义第l层的第j个神经元所产生的错误(error)为实际值与预测值之间的误差δ
l
,即有:
[0098][0099]
其中,表示第l层的第j个神经元的输入,c表示损失函数,以一个样本为例则有:
[0100][0101]
其中,a
l
表示模型最终预测的输出,表示第l层的第j个神经元的输出,y表示样本的预测标签,yj表示样本的真实标签。随后,基于输出层的误差,通过计算损失函数c对权重(weights)的变化率(即权重梯度)来更新权重,即有:
[0102][0103]
其中,表示第l层第j个神经元计算的误差,表示第l-1层的第k个神经元的输出,表示第l-1层的第k个神经元和第l层的第j个神经元连接的权重。
[0104]
步骤2.5:对于所训练的lstm模型,给定恶意“流”数据样本x(其由m维的特征空间构成),则lstm模型先将输入特征x嵌入映射lstm层进行运算,该层定义为:
[0105][0106]
其中,因为该模型是双向(bi-directional)的lstm,所以和分别为正向输出和反向输出,正向输出和反向输出进行拼接得到hi作为lstm层的输出。单个神经元内,单元的遗忘门决定单元的状态信息,遗忘门根据前一时刻的输出状态h
t-1
和此刻输入x
t
可以计算输出[0,1]之间的遗忘值,然后根据遗忘值计算出前一时刻的单元状态c
t-1
中应该被遗忘的信息。单元遗忘门f
t
的计算表示为:
[0107]ft
=σ(wf·
[h
t-1
,x
t
]+bf)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8)
[0108]
其中,wf表示权重,σ表示sigmoid激活函数。通过上述计算更新单元信息,计算得到总的输出h。
[0109]
最后,在lstm的输出层,对来自上一层lstm的输出进行预测,即有:softmax(wh+b)。通过softmax函数确定其输出的标签,标签类别为步骤2.8中定义的类型。
[0110]
步骤2.6:对于训练的cnn模型和lstm模型进行融合,定义融合模型的损失函数为:
[0111]
l(xi,y)=αl1(xi,y)+(1-α)l2(xi,y)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(9)
[0112]
其中,l(xi,y)表示融合模型nt-malconv的损失函数,l1(xi,y)和l2(xi,y)分别表示cnn模型和lstm模型的损失函数,xi为融合模型的输入。α为超参数,表示两个模型损失函数之间的权重关系,通常有α∈[0,1],缺省值设为0.5。通过上述融合损失函数,对给定的样本预测其标签类别(标签类别如步骤2.8所示)。
[0113]
步骤2.7:基于步骤2.2~2.6所构建的cnn-lstm深度学习模型,对于任意需要预测标签的“流”数据集,将其放入cnn-lstm模型后进行分类,共分为三种类型:c&c、malicious和benign。其中,c&c表示受感染的设备与c&c服务器之间的通信;malicious表示除c&c以外的其余恶意流量;benign表示良性流量。
[0114]
步骤2.8:以步骤2.7中进行分类(三种类型)的结果标签为依据,分离出c&c会话部分;根据bot master节点与c&c服务器之间周期性的发送heartbeat(心跳)报文的跟踪关系,基于c&c特征和时间特征(周期性)从步骤2.7中识别为“c&c”类别的“流”文件中分离出心跳数据包。最终将分离出的心跳数据包单独保存,作为后续构建图卷积神经网络的训练数据集。
[0115]
如图6所示,步骤二进行“心跳”数据包的分离与提取,实现时使用deeptraffic对数据包进行拆分,并获得拆分后的“心跳”特征文件。
[0116]
步骤三:再次对心跳特征进行提取并作为输入数据,用于构建图卷积神经网络gcn,通过gcn训练模型实现对botnet主机的溯源。参见图2,主要包括四个阶段,即心跳数据包提取、图卷积网络训练、网络拓扑结构图构建和master节点锁定,具体的:
[0117]
步骤3.1:首先通过对步骤2.8中提取的心跳数据包中每一个数据包中的前k个字节进行提取并转换为灰度数值的方法,依次将十六进制的字节转换为灰度数值(值域为[0,255]),作为图卷积网络的输入数据进行训练。若出现字节总长度不足k个的情况,则使用0x00对其进行补全。
[0118]
步骤3.2:将步骤3.1的结果生成网络拓扑结构图,进而构建图卷积网络(gcn)。定义图g=(v,e),其中v和e分别表示顶点和边的集合。定义矩阵x和a分别为节点的特征矩阵和邻接矩阵。则gcn的快速卷积公式为:
[0119][0120]
其中,(in是单位矩阵,a为邻接矩阵),为添加自连接的邻接矩阵;是节点的度矩阵(degree matrix),w
(l)
为神经网络第l层的权重矩阵,h
(l)
是第l层的激活矩阵,且h
(0)
=x,x节点xi的特征向量矩阵。
[0121]
对于一个2层的gcn网络,其前向传播公式为
[0122][0123]
其中,w
(0)
∈rc×m为输入层到隐藏层的权重矩阵,该隐藏层共用m个特征映射,w
(l)
∈rm×f为隐藏层到输出层的权重矩阵,f(
·
)函数为输出层的特征映射数。
[0124]
对于一个2层的gcn网络,分别使用relu和softmax做作为活函数,其中s为输入,relu将输入s和0取最大值后输出,单侧抑制输入,使神经元具有稀疏激活性。relu的表达式为:
[0125]
relu(s)=max(0,s)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(5)
[0126]
通过上述设计的gcn网络,根据网络拓扑结构图进行溯源以寻找主控端的域名、ip地址或端口号等标识信息,最终锁定botnet攻击的master节点以完成溯源。
[0127]
步骤三中进行gcn网络的训练,工作流程如图7所示。首先使用训练集和测试集划分函数train_test_split()对步骤2.8处理后(识别为c&c类型的“流”数据集)的数据集进行划分;然后使用数据类型转换函数data_deal()将object型(原始的数据类型)数据转为数值型,并构造图数据类型data;然后调用train()函数来对训练数据集进行训练得到模型;用test()调用测试数据集来测试所训练好的模型。
[0128]
溯源的时候主要看的是ip,ip相当于是图中的点,边是除了ip的其他特征。两个点可以确定一条线,由于源ip和目的ip的组合有重复,所以需要将其中重复的数据去掉。此外需要将标记为心跳数据集中包含的object型的数据转换为数值型,即把目的ip中的点去掉,得到一串数字,便于进行溯源。由于源ip种类较少,所以在此处不需要进行处理。基于ip地址处理之后的结果,构造图数据类型,包含节点和边的类型和属性,其中节点表示ip地址、边表示节点之间存在c&c会话关系。
[0129]
针对每个节点在僵尸网络中的类别存在非单一的情况,本实施例在构造图数据时选择将节点的类别构造为n
×
1维的数据类型。n取决于需要分类的总数,可由超参数classes设置确定。gcn网络相关参数设置如下表所示。
[0130]
表1gcn网络参数表
[0131]
超参数名称超参数功能
epoch训练轮数classes类别总数lr动量优化的学习率
[0132]
gcn网络损失函数定义如下:
[0133]
loss=torch.nn.bcewithlogitsloss()
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(9)
[0134]
通过运行gcn网络可以得到输出结果见图8:
[0135]
输出结果包括不同的节点个数,本项目的节点个数总计17254个;x表示节点特征,是一个二维数据,第一维度表示出度节点,第二维度表示入读节点;edge_attr表示边的特征,共有11维,有连接时间等11种信息。y是节点标签,维度表示标签的种类个数,根据标签类别可以进行master阶段的溯源:根据四种类别依次标记为:1表示c2服务器、2表示botnet攻击、3表示受害者、4表示普通节点。如图所示结果y=[4316,4]表示当前节点的类型是4(普通节点);若某个结果为类型1,则确定其为攻击的c2攻击的源头,进而根据序号可以查找到该节点的地址。
[0136]
表2输出结果说明
[0137][0138]
通过对gcn网络进行分析和测试(如图5)可知:表示随着epoch次数的增多,训练损失和测试损失的变化。随着epoch变大,训练loss逐渐变小,趋近于0。随着epoch增大,测试loss首先在epoch等于7时达到最小,随后又突然增大。之后又在epoch等于13时迅速下降。判断该点之后模型处于过拟合状态,表明模型对样本的学习过分偏向于当前样本的特征,因此实际训练中可以控制最佳epoch取值(小于13)。
[0139]
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0140]
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
技术特征:
1.一种基于深度学习的botnet攻击c&c服务器溯源方法,其特征在于,包括以下步骤:步骤一、数据集预处理与特征提取;步骤二、通过融合的lstm+cnn训练模型,使用从步骤一中所提取的特征识别出命令与控制c&c会话数据部分,根据心跳heartbeat报文与c&c服务器的跟踪关系,从其中分离出心跳数据包;步骤三、对心跳数据包进行数据提取并作为输入数据,用于构建图卷积神经网络gcn,通过gcn网络实现对僵尸网络botnet主机的溯源。2.根据权利要求1所述的一种基于深度学习的botnet攻击c&c服务器溯源方法,其特征在于,所述步骤一具体包括如下步骤:步骤1.1、以公开的僵尸网络攻击数据集为基础,对数据集进行预处理:首先在数据清理过程中,对初始数据包采用缺失值处理、异常值处理、重复值处理的三种方式进行,去除异常并纠正错误;其次在数据转换过程中,以数据离散化操作对连续数据进行处理,使连续数据值域分布从连续属性变为2个或2个以上的值域离散属性;最后进行数据聚合,得到botnet数据集;步骤1.2、使用1d-cnn对预处理后的botnet数据集进行特征提取。3.根据权利要求2所述的一种基于深度学习的botnet攻击c&c服务器溯源方法,其特征在于,所述步骤1.2具体为:首先,从预处理后的包含.pcap文件的数据集中逐个读取数据包,将每个数据包添加到对应的网络流中,在currentflows存储当前还未结束的所有tcp或udp流;在添加的过程中不断地更新每个网络流的统计特征,最终将统计特征写入csv文件;判断新加入的数据包是否属于当前所有未结束的网络流,如果不属于,则直接创建一个新的网络流,里面只含当前数据包,存入到currentflows中;如果属于,则需判断时间是否超时、是否含有fin标志,如果不超时且不含有fin标志,则声明一个basicflow对象,根据id从currentflows中得到与当前数据包对应的网络流,调用addpacket函数将当前数据包加入到对应网络流中;如果超时或存在fin标志,则说明当前网络流结束,标记超时并从currentflows中移除对应网络流;含fin标志同样直接从currentflows中移除对应网络流;对于结束的网络流,直接保存;将保存的网络流放入1d-cnn中进行特征提取;所述网络流以如下形式进行保存:<srcip,srcport,dstip,dstport,protocol>其中,srcip和srcport表示源节点的ip地址和端口号;dstip和dstport表示目的节点的ip地址和端口号;protocol表示以所用协议类型的格式进行存储。4.根据权利要求2或3所述的一种基于深度学习的botnet攻击c&c服务器溯源方法,其特征在于,所述1d-cnn模型由编码模块和解码模块两个部分组成,其中,编码模块由多次一维卷积和最大池化运算组成:其中,w为卷积核的运算宽度,表示第l层中的第i个卷积核,表示第l层中第i个卷积核中的第j'个权重值,x
l
(r
j
)为神经网络中第l层中的第j个卷积区域,y
l(i,j)
为第l层的
编码输出;解码模块的输出过程为:x
i+1
=x
i
+f(x
l-i+1
,w
l-i+1
)其中,x
i+1
表示输出结果,x
i
表示网络输入特征,l表示1d-cnn网络中编码和解码模块总数量,f(x
l-i+1
,w
l-i+1
)表示本次解码所对应的编码过程中通过两个卷积层得到的输出特征。5.根据权利要求1所述的一种基于深度学习的botnet攻击c&c服务器溯源方法,其特征在于,所述步骤二具体为:步骤2.1:基于步骤一提取出的特征向量作为输入,用于对融合的cnn-lstm深度学习模型进行训练;步骤2.2:对于任意需要预测标签的网络流数据集,将其放入训练后的cnn-lstm深度学习模型后进行分类,共分为三种类型:c&c、malicious和benign;其中,c&c表示受感染的设备与c&c服务器之间的通信;malicious表示除c&c以外的其余恶意流量;benign表示良性流量;步骤2.3:以步骤2.2中进行分类的结果标签为依据,分离出c&c会话部分;根据botmaster节点与c&c服务器之间周期性的发送heartbeat报文的跟踪关系,基于c&c特征和时间特征从识别为c&c类别的文件中分离出心跳数据包,最终将分离出的心跳数据包单独保存,作为后续构建图卷积神经网络的训练数据集。6.根据权利要求5所述的一种基于深度学习的botnet攻击c&c服务器溯源方法,其特征在于,所述cnn-lstm深度学习模型中cnn模型的训练过程为:步骤2.11:对于所构建的cnn模型,卷积层设置卷积核,对输入数据x包含c&c特征的样本特征向量的输入数据x进行离散卷积运算,提取输入数据的空间特征,即有:其中,式中y(x)为输出,f(
·
)函数为激活函数,m
×
n大小的i,j位置的卷积核权重为ω
ij
,其中表示域值空间;x
ij
为原始图片和卷积核对应区域的像素值,b为偏差;步骤2.12:池化层进行均值采样和最大值采样同时,提取不同区域内的局部依赖性在不同的区域内保留最突出的信息,获得区域向量后被送入下一个卷积层;步骤2.13:使用反向传播算法激励传播和权重更新反复迭代循环,直至网络对输入的响应达到预定的目标范围。7.根据权利要求6所述的一种基于深度学习的botnet攻击c&c服务器溯源方法,其特征在于,所述步骤2.13中反向传播算法为:对于训练集合中的任意一个样本,首先定义第l层的第j个神经元所产生的错误为实际值与预测值之间的误差δ
l
,即有:其中,表示第l层的第j个神经元的输入,c表示损失函数,则有其中,a
l
表示模型最终预测的输出,表示第l层的第j个神经元的输出,y表示样本的预
测标签,y
j
表示样本的真实标签;随后,基于输出层的误差,通过计算损失函数c对权重的变化率来更新权重,即有:其中,表示第l层第j个神经元计算的误差,表示第l-1层的第k个神经元的输出,表示第l-1层的第k个神经元和第l层的第j个神经元连接的权重。8.根据权利要求5所述的一种基于深度学习的botnet攻击c&c服务器溯源方法,其特征在于,所述cnn-lstm深度学习模型的损失函数为:l(x
i
,y)=αl1(x
i
,y)+(1-α)l2(x
i
,y)其中,l1(x
i
,y)和l2(x
i
,y)分别表示cnn模型和lstm模型的损失函数,x
i
为输入;α为超参数,表示两个模型损失函数之间的权重关系,α∈[0,1]。9.根据权利要求1所述的一种基于深度学习的botnet攻击c&c服务器溯源方法,其特征在于,所述步骤三具体为:步骤3.1:对步骤二中提取的心跳数据包中每一个数据包中的前k个字节进行提取并转换为灰度数值,作为图卷积网络的输入数据进行训练;若出现字节总长度不足k个的情况,则使用0x00进行补全;步骤3.2:将步骤3.1的结果生成网络拓扑结构图,进而构建图卷积网络gcn,定义图g=(v,e),其中v和e分别表示顶点和边的集合;定义矩阵x和a分别为节点的特征矩阵和邻接矩阵,则gcn的快速卷积公式为:其中,其中i
n
是单位矩阵,a为邻接矩阵,为添加自连接的邻接矩阵;是节点的度矩阵,w
(l)
为神经网络第l层的权重矩阵,h
(l)
是第l层的激活矩阵,且h
(0)
=x,x为节点x
i
的特征向量矩阵;对于gcn网络,前向传播公式为:其中,w
(0)
∈r
c
×
m
为输入层到隐藏层的权重矩阵,该隐藏层共用m个特征映射,w
(l)
∈r
m
×
f
为隐藏层到输出层的权重矩阵,f(
·
)函数为输出层的特征映射数;对于gcn网络,分别使用relu和softmax作为激活函数,其中s为输入,relu将输入s和0取最大值后输出,单侧抑制输入,使神经元具有稀疏激活性;relu的表达式为:relu(s)=max(0,s)通过上述gcn网络,根据网络拓扑结构图进行溯源以寻找主控端的域名、ip地址或端口号标识信息,最终锁定botnet攻击的主机master节点以完成溯源。10.根据权利要求1所述的一种基于深度学习的botnet攻击c&c服务器溯源方法,其特征在于,所述gcn网络的训练方法为:首先使用训练集和测试集划分函数train_test_split()对处理后的数据集进行划分;然后使用数据类型转换函数data_deal()将object型数据转为数值型,并构造图数据类型data;然后调用train()函数来对训练数据集进行训练得到模型;用test()调用测试数据集来测试所训练好的模型。
技术总结
本发明公开了一种基于深度学习的Botnet攻击C&C服务器溯源方法,包括以下步骤:步骤一、数据集预处理与特征提取;步骤二、通过融合的LSTM+CNN训练模型,使用提取的特征识别出命令与控制C&C会话数据部分,根据心跳HeartBeat报文与C&C服务器的跟踪关系,从其中分离出心跳数据包;步骤三、对心跳数据包进行数据提取并作为输入数据,用于构建图卷积神经网络GCN,通过GCN网络实现对僵尸网络Botnet主机的溯源。解决了现有技术中存在的由于数据具有复杂的动态特性和不稳定性等特点使得传统的检测方法无法获得较为理想检测结果的问题,提升了检测与溯源僵尸网络中攻击主机Master节点的准确度。准确度。准确度。
技术研发人员:张云春 李子璇 沈琪 葛雪晴 李柏萱 陈少钦 巴赫 王勇林 黄学龙 萧纯一
受保护的技术使用者:云南大学
技术研发日:2023.04.21
技术公布日:2023/7/7
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/