基于系统调用序列的恶意软件检测技术

2024-04-13 06:54李乐凡刘晓东
电子设计工程 2024年7期
关键词:调用准确率卷积

李乐凡,刘晓东,2

(1.武汉邮电科学研究院,湖北武汉 430000;2.武汉虹旭信息技术有限责任公司,湖北 武汉 430000)

2021年,AV-test 系统检测到超过12.9 亿个恶意软件。作为旨在干扰计算机正常运行的软件,恶意软件是病毒、木马和其他破坏性计算机程序的总称。嵌入式设备的数量呈指数型增长[1],忽略了安全和隐私问题。近年针对Linux 内核的恶意软件数量不断增长,其可以针对非常多样化的目标[2]。

综上,对Linux 恶意软件进行高效快速地识别十分具有必要性。恶意软件的自动分析和检测一直是研究的重点和难点[3]。鉴于此,文中给出了基于Linux 系统调用序列的恶意软件检测技术,首先,使用Linux 软件系统调用序列进行分割和提取;其次,将特征数据映射到RGBA 图像文件;最后,使用胶囊网络对图像进行检测和识别。仅需少量标记样本,就可在测试数据集上达到极高的准确率,在实验结果的基础上,优化胶囊网络模型参数,以达到最优的检测性能。

1 系统调用与序列特征提取

1.1 系统调用数据

在Linux 系统中,进程不能访问内核,其中一组用于实现系统功能的子程序称为系统调用。由于系统调用序列标识软件的行为,系统调用序列可作为一种检测Linux 恶意软件的特征[4]。对于Linux 系统调用序列的研究较少并且集中在入侵检测[5]、异常检测等方向。

获取恶意软件和良性软件的系统调用序列数据。恶意软件的系统调用序列由基于沙箱的动态分析报告得到,目前尚无通用或官方的Linux 恶意软件数据集,自行构建恶意软件系统调用序列数据集。沙箱分析时会捕获系统调用序列这一动态特征,将沙箱数据中这一冗余的分析信息利用起来,期望能到达较高的准确率。良性软件不会对系统造成危害,因此,可采用较为简单的方式获取良性的系统调用序列,良性软件的系统调用序列使用strace 命令追踪的系统软件得到,strace 显示有关进程系统调用的信息,可以确定程序使用的系统函数。

1.2 系统调用序列特征处理

每个系统调用都有不同的功能,例如大多数情况下open/read/write/ioctl/close 就可以实现对各种设备的输入、输出、设置、控制等;connect/socket 标识了网络行为特征。此外,系统调用序列具有前后关联性,例如open-read-close 表示对某文件的读操作。首先将系统调用序列按照进程pid 划分为单进程的数据。系统调用序列的关联性基于调用了同一参数或返回了同一地址,即对同一对象进行操作,因此基于参数进行划分,得到可标识软件行为的系统调用特征序列。将特征序列转换为对应的RGBA 图像,同样大小的图像RGBA 类型可以携带更多信息,可以携带比灰度图更多的特征信息。将系统调用序列以字节为单位映射到对应的四个通道上,将整个序列按字节进行划分,每四个字节对应四个数值,其取值范围为0~255,每四个字节映射一个像素点,即将每四个字节对应数值映射到三个颜色通道以及一个透明度通道。如exec对应的数值为(203,227,46,62)。最终,得到的图像如图1 所示,图1(a)为良性软件系统调用序列的特征图,图1(b)为恶意软件系统调用序列的特征图。

图1 特征生成图像

2 核心算法与优化

2.1 核心算法

在基于系统调用的恶意软件检测领域[6],从最初的传统的静态检测、动态检测到基于数据挖掘和启发式学习的检测,发展到目前基于深度学习的恶意软件检测[7]。神经网络具有良好的处理复杂信息的能力,以便处理前后关联的序列信息[8]。对于传统的动静态检测,或是当前的机器学习、深度学习算法,都存在一些问题[9]。2017年,Hinton 首次提出胶囊网络模型[10],该模型被认为是下一代重要的神经网络模型。由于其优异的性能,胶囊网络模型很好地应用于小型样本图像分类任务[11]。胶囊网络可以保持比卷积神经网络(CNN)更强的空间信息关系[12]。

胶囊(Capsule)是一组神经元,用输入输出向量的长度表征实体存在的概率,向量的方向表示实例化参数,即实体的某些图形属性[13]。输入输出向量的长度表示了某个实体出现的概率,所以值必须在0~1 之间,为实现这种压缩,胶囊网络使用了Squashing 函数激活向量,该非线性函数确保短向量的长度能够缩短到几乎等于零,而长向量的长度压缩到接近但不超过1。具体计算如式(1)所示,其中,vj为胶囊j的输出向量,sj为上一层所有胶囊输出到当前层胶囊j的向量加权和,即sj为胶囊j的输入向量。

同一层级的胶囊通过变换矩阵对更高级别胶囊的实例化参数进行预测,当多个预测一致时,更高级别的胶囊将变得活跃。使用层间动态路由(Dynamic Routing)算法找出最好的处理路径,其核心是迭代地计算更新耦合系数cij,其能令预测向量最符合输出向量vj,即找到最符合输出的输入向量。该耦合系数的Softmax 算法如式(2)所示,bij依赖于两个胶囊的位置与类型。

当输出新的vj后可以迭代更新cij,不需要反向传播而直接通过计算输入与输出的一致性更新参数,该路由算法容易收敛,实验证明,通过三次迭代即可得到最佳结果。

2.2 路由算法改进

层间动态路由算法的核心是预测耦合系数的柔性最大值算法。Softmax 函数将短向量缩小到几乎为零,将长向量长度缩小到小于1。系数分布[14]集中在0.09~1.09 区间,这使得预测向量的总和sj难以区分,路由到最终胶囊的概率特征几乎相等。使用最小系数和最大系数之间差异更大的Sigmoid 函数代替Softmax 函数,如式(3)所示:

式中,cij不再代表最终胶囊的路由分配概率,而是代表路由到最终胶囊之间的相关强度。将重要的预测向量与较大的耦合系数相乘,使显著性特征更具决定性,而不相关特征的耦合系数较小。

2.3 超参数优化

基于上述胶囊网络模型,对其超参数进行调整以达到最佳的检测效果。模型中使用随机梯度下降算法[15],使用训练数据集来更新模型的迭代学习算法。

batch 控制在模型的内部参数更新之前要处理的训练样本的数量。学习率决定了参数移动到最优值的速度快慢,学习率过大或过小都会对模型收敛及收敛速度造成影响。实验中对照测试了不同维度的训练批次batch 和学习率LR 对识别准确率造成的影响,训练批次依次为1、8、32、64、128,学习率为0.000 1、0.000 5、0.001、0.005、0.01、0.05、0.1。在实验中调整训练批次batch 和学习率LR 对模型分类准确率的影响如图2 所示,batch 为128 学习率为0.000 5 或0.001 时可以达到最高准确率0.998 882。

3 实验与结果分析

3.1 胶囊网络结构

实验使用胶囊网络结构,整体结构图如图3 所示,使用Python 语言和pytorch 机器学习库实现胶囊网络,该架构由两个卷积层和一个全连接层组成。卷积核感受野为9×9,比传统CNN 更大,在卷积层层数较少时能感受更多信息。第一个卷积层使用256个9×9 的卷积核,步幅等于1,使用ReLU 激活函数,输出张量为20×20×256,层间权值数量为20 992 个。第二个卷积层(PrimaryCaps)中,将8 个卷积单元封装成为一个胶囊单元,每次卷积操作会产生一个6×6×1×32 的张量,一个胶囊单元即产生了长度为8 的6×6×8×32 的张量,该卷积层参数数量为5 308 672个。第三层(DigitCaps)的输入为第二层输出的向量,共6×6×32 个维度为8 的向量,使用动态路由算法预测计算,即第i层共有1 152 个胶囊单元,第三层有10 个标准的胶囊单元,每个单元的输出向量包含16 个元素,有1 152×10 个耦合系数cij,加权求和后有10 个16×1 的输入向量,将该向量输入到Squashing函数后得到最终的输出向量vj,第三层网络共有5 537 024 个参数。

图3 胶囊网络模型结构图

构建损失函数,使用反向传播更新所需参数,采用Margin loss 损失函数表达式如式(4)所示:

其中,c是分类类别,Tc是分类指示函数,c存在为1,c不存在为0,m+为上边界,m-为下边界,vc的模即向量的L2距离。使用全连接层对向量进行重构,利用预测的类别重新构建出该类别代表的实际图像,第三层的输出向量被送至包含三个全连接层的解码器中,结合损失函数计算并重构图像。

3.2 实验数据和评估指标

文中的实验环境如表1 所示。该实验的实验数据来自互联网中捕获的恶意软件以及Linux 系统的系统软件,数据量为10 000 个样本数据,恶意与非恶意样本数据均为5 000个,每种样本中4 000 个为训练集,1 000 个用作测试集。

表1 实验环境

实验流程如图4 所示,首次提取数据中的系统调用序列,对其进行数据预处理,包含序列化与反序列化、筛选删除、数据格式规范化等操作,然后进行特征的可视化处理,即将系统调用特征图像化,将图像数据分为训练数据和测试数据。

图4 实验流程图

另外,编程实现胶囊网络模型,使用训练数据训练模型,测试数据测试模型分类效果,过程中记录准确率、损失率、混淆矩阵等数据结果。

混淆矩阵中包含评估分类算法效果的基本指标[16-20],包括真正例(TP)、假正例(FP)、真负例(TN)、假负例(FN)。根据基本指标计算出更能表达分类器效果的指标精确率、召回率、准确率和F1值,具体计算公式及含义如表2 所示。

表2 评价指标公式

3.3 实验结果与结论

选用表2 中的评价指标作为该实验结果的评测指标,此时根据分类算法基本指标计算的精确率、召回率、准确率和F1 值如表3 所示,准确率可达到99.8%,证明该方法可以对系统调用数据进行有效的特征提取,并在分类准确度上有较好效果。

表3 模型评价指标

4 结束语

文中提出了一种基于Linux 系统调用序列的恶意软件检测技术,首先构建恶意软件和良性软件系统调用序列的数据集,将系统调用序列数据进行过滤并分割为可以表征软件行为的子序列,然后将系统调用序列特征数据映射到可以携带大量信息的RGBA 图像文件中,使用所得训练数据对胶囊网络进行训练,对网络模型进行调参,最终在测试集上取得了较高的检测准确率。综合实验数据表明,该方法具有较高的准确率,可以有效对Linux 恶意软件进行分类,模型达到了良好的指标,有效解决了所提出的问题和需求。随着互联网的迅猛发展,各种APT攻击事件频发,恶意软件的数量和规模持续增长,未来网络安全业界势必面临更大的挑战,为国家安全带来了严重威胁,为了维护用户的权益和信息安全,势必需要精度更高、速度更快的恶意软件识别技术,因此该文提出的方法有重要的意义,需要未来持续性、更深入的研究和探索。

猜你喜欢
调用准确率卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
2015—2017 年宁夏各天气预报参考产品质量检验分析
核电项目物项调用管理的应用研究
从滤波器理解卷积
LabWindows/CVI下基于ActiveX技术的Excel调用
高速公路车牌识别标识站准确率验证法
基于傅里叶域卷积表示的目标跟踪算法
基于系统调用的恶意软件检测技术研究