恶意代码同源性特征的粒子群关联分析
2021-11-09王慧
王 慧
(中国人民公安大学信息网络安全学院, 北京 100038)
0 引言
2020年全球持续性爆发的新冠疫情,使得越来越多的社会行为依附于网络而生,离开网络,物资动态分配、热点人员筛查、居家远程办公等活动几乎无法完成,但伴随社会网络依赖性增强的同时,针对特定专用网络的恶意入侵软件层出不穷。如何快速准确地进行恶意代码的识别与检测,判断其恶意企图并揭示恶意代码间的同源关联性,完成针对性的技术防御,将对网络空间安全具有重大意义。
随着数据分析处理技术的飞速发展,新技术新思想也逐步融入恶意代码的检测过程,国内外专家研究结果表明:虽然恶意代码的变种样本层出不穷,但多数变种是由编写者采取混淆技术逃避了检测分析,由于编写习惯等因素,同一团队编写的恶意代码往往具有较高的行为相似性。为揭示恶意代码的同源家族特征,诸多技术理论已成功应用于恶意代码的特征提取,数据挖掘及神经网络思想与传统恶意代码检测技术相结合,可有效降低检测结果的误报率[1-3];基于概率模型及机器学习的方法在恶意代码分类问题中已取得良好效果[4];改进的序列挖掘算法结合卷积神经网络可提取一定层面的特定恶意序列模式[5-6];基于语义的恶意代码特征检测方法借助于自然语言文本处理技术揭示出反汇编文件中潜藏的非良性代码语义[7];从汇编指令操作码所对应灰度图像角度进行特征提取可实现恶意样本的分类问题[8]。为加速恶意代码家族同源特征的提取进程,本文提出了融合粒子群随机优化算法的同源关联分析策略,首先抽取恶意代码PE(Portable Execute)文件中所包含的指令性语句并简化;其次在所形成的简化指令序列集上寻找频繁指令序列,粒子群算法的快速寻优思想渗透至频繁序列的生成进化过程,随着迭代的进行,新生异常模式以一定概率进入频繁指令序列的发现流程;最后结合家族同源性分析的要求,给出了恶意代码同源性特征提取的基本流程。
1 恶意代码汇编指令特征分析
相对于良性代码而言,恶意代码本身是极具目的性的特殊访问行为,通常包括蠕虫、木马、后门等恶意软件,其常规检测步骤主要是构造行为特征库、比对位置字节代码、探寻特定访问序列等,其中恶意代码特征的提取是关键。
围绕恶意代码的检测方法多数基于特征码,特征码由比对并提取历史恶意代码中具有相似功能的代码段形成,特征码检测方法的历史依赖性使其对新发未知恶意软件的检测效果受限。但多数未知恶意代码是历史恶意代码的变体,编写者将历史恶意代码加壳变形封装,以此蒙蔽安全检测软件的扫描分析。因此,新发恶意代码常与历史恶意代码具有家族同源关联性,此种关联性主要表现为脱壳之后代码间具有相似的指令行为控制流,其中恶意代码间的结构关联特征是家族同源分析的关键所在。
为了提取恶意代码的家族行为操作特征,静态反汇编恶意代码PE文件,文件中的指令代码包括指令性语句、宏指令及伪指令语句。其中,宏指令展开后可转化为指令性语句集,伪指令语句及部分指令性语句(如处理机控制类指令)对于恶意代码行为分析无明显影响,此类语句在文件中的出现频率较低,因此在恶意代码的行为分析中只需重点关注算术逻辑运算类、数据传送类及程序转移控制类指令。这些指令代码所形成的执行流程结合系统函数调用可充分反映程序的恶意企图,在一定程度上也代表了编写者的编码习惯,对于恶意代码的家族特征分析具有重要意义。
汇编语言机器指令由操作码与操作数字段构成,操作码字段位于首字节,用于表征指令的操作性质及寻址方式类型,操作数字段明确了指令的操作对象,可以表现为操作数本身或者操作数的具体存储位置,指令的基本结构如图1所示。一般情况下,算术逻辑运算类、数据传送类及程序转移控制类指令的长度为1~6字节,指令的实际操作特征位于首字节。
图1 机器指令结构示意图
为提取恶意程序的基本特征,剔除程序中的非关注指令,简化剩余指令集,只保留每条指令机器码的首字节,形成指令块编码序列,序列结构如图2所示。
根据图2,横向坐标代表恶意程序所包含简化指令的出现次序,任一行代表恶意模块的实际访问行为,包含本次操作的所有关键特征;纵向坐标为恶意序列数量,由于攻击目标及访问操作的不同,横向序列长度不尽相同,且允许关键特征重复。
图2 恶意代码指令块序列结构示意图
对恶意代码PE文件中的机器指令集进行筛选及简化转换后,恶意软件所对应的简化指令集将揭示程序的操作行为特征,受编写者编程习惯的影响,同源的恶意代码在内存访问、逻辑判断、分支跳转、系统调用、中断设计等方面常常具有较高的相似性,其局部代码片段甚至相同或者高度相似,不同代码简化指令序列间的关联程度可更直观反映其家族同源性。
2 恶意代码同源性粒子群关联分析
恶意代码是对系统资源所进行的占有侵犯性访问,其行为对操作系统的功能调用依赖性较强,包含了对系统关键资源的读取、修改等操作,依据图2恶意代码块的简化序列,序列间的模式关联特性可体现为最大频繁模式间的包含性,这种包含性代表了恶意行为的客观家族同源规律性。但是,作为恶意检测的重要环节,仅进行关联分析只适合于发现模式并完成行为匹配,若出现新的恶意代码,必须对原有的模式挖掘过程进行增量式深度分析,重新归纳推导恶意行为的衍生变化,该过程需要多次扫描数据集,将导致算法的时间复杂度增加。为贴近快速精准检测的目标,借鉴群智能优化算法中模拟鸟群社会行为的粒子群优化思想,将鸟群集体寻优机制融入恶意代码序列挖掘过程,以此完成异常恶意模式的预测与发现,围绕简化指令集的序列模式挖掘旨在发现数据集中满足一定支持度阈值约束的最大频繁子序列,频繁子序列是简化指令二进制代码的有序集合。
频繁序列关联分析过程中,为加速频繁子序列的发现过程,避免多次扫描数据库,相似恶意代码的家族同源性表现为恶意程序间相似指令序列的重合度,由于恶意程序PE文件由底层基本指令集构成,恶意行为的基本特征表现在指令间的逻辑功能近似性,相同性质的指令允许出现在序列的不同位置。频繁序列生成过程中引入粒子群优化思想,将指令代码序列抽象为微粒子,序列粒子采用n×1维矢量表示形式,n为简化指令序列所包含的指令数。特征提取过程充分利用群内各粒子间的协作与信息共享完成优化解的搜索,优化解表现为频繁序列集,具有相似频繁序列集的代码具有家族同源特性。粒子间通过迭代搜索,解的发现由局部最优向全局最优过渡,随着迭代周而复始地进行,最终整个粒子群具有更优的个体适应度[9]。鉴于恶意程序PE文件本身的二进制表示形式,在简化表示的前提下,代码序列关联分析与粒子群优化过程的有机结合可以加速最大频繁子序列的发现过程。
3 频繁指令序列粒子群优化算法PSO-AMFIS
粒子群优化思想源于鸟群捕食的行为分析,每一只鸟都是种群中的微粒子,粒子的位置和速度由矢量记录,粒子具有记忆自身当前最好解并逐步追随群体最优解的能力,借助于粒子的寻优能力,将简化指令序列集抽象为微粒子群,将指令微粒子的数据特征与经典序列挖掘算法的基本思想相融合,提出了基于粒子群优化的恶意代码频繁指令序列发现算法PSO-AMFIS (Particle Swarm Optimization Algorithm of Ming Frequent Instruction Sequence)。
PSO-AMFIS算法中,任一序列由粒子矢量表示,矢量的维度随简化指令序列的不同而动态变化,在每一次迭代过程中粒子通过跟踪两个极值(自身最优解pbest与全局最优解gbest)完成更新,如公式(1)、(2)所示。
Vk+1=ωVk+C1rand()(pbestk-Sk)+C2rand()(gbestk-Sk)
(1)
Sk+1=Sk+Vk+1
(2)
其中,ω为非负惯性权重,用于拓展种群的搜索空间,在搜索过程中可线性变化[10];C1、C2为学习因子,代表将粒子推向pbest与gbest的统计加速权值;rand()为(0,1)区间均匀分布的随机数;Sk+1为k+1阶简化指令序列,Vk+1为序列中第k+1个简化字节指令。
结合恶意代码家族同源特征提取的基本要求,借助Rakesh Agrawal所提Apriori先验算法中最大频繁项目集生成理论[11],引入粒子群随机算子优化Apriori算法的搜索过程,C1算子使得包含k频繁序列的粒子以更大的几率转至下一次迭代,是粒子自身认知对下一步决策的影响;C2算子作用于k频繁序列生成k+1候选序列,用于调整粒子间的信息共享与合作关系,影响粒子对群内同伴经验的继承程度,可衡量粒子的社会认知能力。PSO-AMFIS算法的基本步骤如下。
输入:恶意代码简化指令序列种群C、支持度约束阈值ζ
输出:最大频繁序列集Smax
步骤1:k=1;
步骤2: 扫描序列种群C,导出k频繁子序列集Sk,淘汰非频繁子序列;
步骤3:确定初始种群的数据规模,根据公式(3)评价包含k频繁子序列粒子的适应度函数值;
步骤4:对于每一个粒子,将其适应度值与自身历史最好适应度值pbest相比较,分析子序列间的包含性,更新pbest;
步骤5:对于每一个粒子,将其适应度值与种群历史最好适应度值gbest相比较,分析子序列间的包含性,更新gbest;
步骤6:根据公式(1)、(2)调整当前最大频繁序列集Smax;
步骤7:k=k+1;
步骤8:计算进化收敛条件,若满足进行步骤9,否则转步骤3更新初始种群重新迭代;
步骤9:输出频繁序列集Smax。
在PSO-AMFIS算法中,适应度函数用于度量粒子的优劣程度,适应度函数定义如公式(3)。
Fitness(particlek)=Support(particlek)/ζ
(3)
其中,Support(particlek)是包含k频繁子序列的粒子支持度计数值,ζ是支持度阈值。
PSO-AMFIS算法将项目集加入时间戳形成序列集,所蕴含的频繁指令序列代表恶意程序的家族特征,粒子群随机优化过程使得新发恶意代码将以一定概率进入下一次迭代,可扩大目标搜索范围,粒子自身经验的继承及群体经验的学习可加速频繁序列的生成,整个算法的实现流程将数据挖掘与生物进化思想有机结合。
4 实验验证与分析
为了验证PSO-AMFIS算法对于恶意代码家族特征提取的有效性,选取开源数据集Kaggle中的部分数据组成训练样本集[12],训练样本共有200个反汇编生成的“.asm”文件,包含150个恶意样本与50个正常样本,其中测试恶意样本来自于Kaggle中3个家族。根据前述代码序列简化规则,构造训练样本集的简化指令序列集C,以序列集C为基础数据库,分别运行PSO-AMFIS算法与Apriori算法产生最大频繁序列集,支持度阈值设置为40%,运行结果如图3所示。
图3 频繁序列发现效率比较
从图3可以看出,随着挖掘到的频繁序列数量的增加,PSO-AMFIS算法的运行效率更高,与Apriori算法相比,由于粒子群随机算子对频繁序列搜索空间的优化,其对应曲线更加平稳。
根据简化指令序列集C所生成的最大频繁序列集,在数据集Kaggle中随机抽取被选中的3个家族样本各30例,加标签后混合30例正常程序样本进行模式匹配测试,测试结果如表1所示。
表1 各家族分类测试结果
由表1可知,来自同一家族的代码具有更好的匹配结果,正常代码与最大频繁序列集的匹配程度很低,说明了PSO-AMFIS算法所生成的最大频繁序列集对于家族代码操作行为的刻画较为准确。
5 结论
恶意代码是对系统资源的未授权占用,围绕恶意代码PE文件的汇编指令特征,提出了恶意代码同源特征提取流程。该流程通过比较分析不同恶意代码机器指令的行为特征,充分关注编写者的心理目标企图及编程习惯,寻找恶意模式间的关联特性,对于恶意代码简化数据集不等长的序列种群,提出了关联分析与粒子群优化相融合的PSO-AMFIS算法,该算法可有效进行恶意代码集的同源分析,进而汇聚成不同家族,进一步揭示出恶意模式的家族隐含特征,PSO-AMFIS算法对原型系统的实例验证结果表明其有效性。