顾风军
(中国人民解放军总医院第四医学中心信息室,北京 100089)
计算机技术快速发展,使得软件在数字化装备中占有越来越重要的地位,对于软件可靠性的要求也越来越高。然而,大多数软件均会存在一些漏洞,使得黑客利用这些漏洞发起攻击成为了可能,因此有效识别软件漏洞是当前亟待解决的问题。针对软件漏洞识别这一问题,有学者提出基于大数据技术的软件安全漏洞识别方法,构建数据采集模型,并对数据进行融合处理,采用大数据技术构建软件安全漏洞信息特征提取模型,从而识别漏洞,该方法较为简单,扩展性不强[1];也有学者提出了基于可变形卷积神经网络的软件漏洞识别方法,搭建可变形卷积神经网络,结合可变形卷积的池化变形形式发现软件漏洞特征,实现漏洞识别[2]。虽然这种方法执行效率很高,但是识别效果差。
由于静态软件安全漏洞路径数量多,导致识别难度增加,因此为了有效解决这一问题,引入多核集成学习,设计了一种新的静态软件安全漏洞识别方法。
为了使多核集成学习[3]分类效果达到最佳,需先训练静态软件数据。假设未标记的模块为Ai,对于该模块上的伪类别标签oi,通过划分标签获取有无缺陷模块。则如下公式成立:
式(1)中,i表示操作次数;pi、分别表示划分为有缺陷和无缺陷模块的概率[4]。根据式(1)计算结果展开排序,按照排序大小依次选择位于前列ci未被标记的模块,再结合已经标记的模块,由此获取静态软件初始训练集[5]。
对训练集进行训练得到了多核集成学习分类器,根据其性能对训练样本进行分类,从而保证数据分类效率与质量。在训练过程中调整数据分布,以达到负载均衡的目标,然后进行下一步的训练[6]。如此反复,直至基本的学习方案数目达到预定值为止,将多种权重的基础学习方案进行合并,获取多核集成学习分类器[7]。
多核集成学习分类器如图1 所示。
图1 多核集成学习分类器
由图1 可知,采用多样本集的抽样方法,依据样本权值分布属性构造一个基本的学习分类器,从而获取多核集成学习分类器,以期为后续的数据分类奠定坚实的基础[8]。
使用多核集成学习中的boosting 的串行集成方法,从多核集成学习分类器开始加强,通过加权训练获取数据权重。假设有k个静态软件数据,具体学习过程如下:
步骤1:给定一个决策表,确定静态软件数据属性为{λ1,λ2,…,λi},根据随机化邻域约简方式得到一组约简后的多核静态软件数据属性集合{δ1,δ2,…,δi},使用覆盖约简方式能够得到一组规则集{L1,L2,…,Li}[9]。在既定的规则集上,获取静态软件数据种类[10]。
步骤2:对原分类器的错误进行改进,用总数减去错误数据即为正确数据,将正确数据作为下一次分类训练的样本。将新样本添加到分类器中,经过迭代获取最低错误率的训练结果[11]。
步骤3:将训练数据划分为两个不相交的子集。
步骤4:用训练集的部分数据训练多个不同的子分类器。
步骤5:利用训练集中的其他数据训练多个子分类器。
步骤6:将子分类器的识别结果当作输入,将样本标签当作学习目标[12]。
步骤7:经过学习器A,得到的正确数据量为a,错误数为a′,将错误数据输入到学习器B 中进行学习。经过学习器B,得到的正确数据为b条,错误数据为b′条,将错误数据输入到学习器C 中进行学习。经过学习器C,得到的正确数据为c条,错误数据为c′条,将错误数据输入到学习器D 中进行学习[13]。以此类推,将所有静态软件数据进行串行集成,将所有正确学习结果的数值相加,得到正确静态软件训练数据。
2.2.1 多核集成学习漏洞数据分类
在获取初始训练集后,利用已知核函数将训练集中有、无缺陷模块的标签分别标记为1 和0。分类误差越小则说明分类器分类效果越好,经过多次boosting过程获取分类结果,多核集成学习分类器为:
式(2)中,Δz表示正确分类与未正确分类的误差;表示单核分类器;t、M分别表示训练时长和最大操作次数。
以boosting 结果作为训练依据更新数据集[14]。充分考虑数据集有无缺陷问题,通过i次boosting 集成处理来调整有、无缺陷模块权重分量。针对有缺陷模块,使错误识别权重分量分别保持增加和不变状态;针对无缺陷模块,正确识别权重分量分别保持不变和减小状态。经过集成处理能够有效降低识别过程中出现的错误次数,经过多次集成处理后,获取最终静态软件安全漏洞数据分类结果[15]。
2.2.2 漏洞数据识别模型构建
在静态软件安全漏洞识别过程中,结合漏洞数据分类结果,计算静态软件安全漏洞数据密度[16],构建漏洞数据识别模型,实现静态软件安全漏洞识别。具体步骤如下:
建立静态软件中安全漏洞识别优化模型过程中,计算静态软件中安全漏洞数据的密度为:
式(3)中,ND表示已经获知的静态软件安全漏洞数据数量;MC表示静态软件代码总行数;wi(i)表示静态软件安全漏洞数据归一化处理权重。
在利用所构建的静态软件安全漏洞识别模型过程中,使用多核集成学习方法将静态软件中漏洞数据权重中相邻两个子集作为模型输出值域,构建的漏洞数据识别模型为:
式(4)中,ρminA,B、ρmaxA,B分别为集合A和B的静态软件安全漏洞数据密度;yA、yB分别表示集合A和B的输出值域。
2.2.3 漏洞识别流程设计
结合构建的漏洞数据识别模型,设计漏洞识别流程,如图2 所示。
图2 漏洞识别流程
通过图2 所示的识别流程,能够得到精准的静态软件安全漏洞识别结果。
由于Internet Socket 的安全问题经常会引发网络高危安全事故,在这些问题中,百度的Wormhole 虫洞安全问题最为突出。Internet Socket的Wormhole 经常出现在由百度公司提供的Moplus 开发工具中,该工具被植入了数以万计的应用程序。Wormhole 漏洞允许远程攻击者在攻击时插入任何联系人,发送虚假的消息,把当地的文件上传到远程服务器。
Internet Socket 安全执行时出现的漏洞示例,如图3 所示。
图3 Internet Socket安全漏洞示例
由图3 可知,使用Internet Socket 开启TCP 端口40310,预设监听所有的局域网IP 位址。远程攻击者可以将数据经由Socket 地址(LAN IP 位址加上端口号)传送至应用程序中,这种信息可以通过诸如反编译的方式被发现,而且很容易被远程攻击者破解。
实验装置结构如图4 所示。
图4 实验装置结构
如图4 所示,该实验装置主要包括过滤器、分析器、特征提取器三个主要组件。这一实验装置将安卓的应用程序集作为输入,针对大型安卓系统中存在的安全缺陷问题,采用过滤器过滤非相关程序,从而提高了安全漏洞检测能力。过滤器将应用程序与现存的安全性弱点模式相匹配,而只有匹配的应用程序会加入到API过滤器中,以此保证过滤精度与效率。
分别使用基于大数据技术的识别方法、基于大数据技术的识别方法、基于可变形卷积神经网络的识别方法,将漏洞识别时间和捕获危险执行路径数作为评价指标,对比分析漏洞识别效果。
1)漏洞识别时间
对比三种方法的漏洞识别时间,如图5 所示。
图5 三种方法漏洞识别时间对比分析
由图5 可知,三种方法在3-4、6-7 环节均呈现出了漏洞识别时间变化幅度变大的趋势,其中使用基于大数据技术的识别方法在3-4 环节最大漏洞识别时间为14.5 ms;使用基于可变形卷积神经网络的识别方法在3-4 环节最大漏洞识别时间为13.5 ms;使用基于多核集成学习识别方法在3-4 环节最大漏洞识别时间为4 ms。
2)捕获危险执行路径数
对比三种方法捕获危险执行路径数,如表1所示。
表1 三种方法捕获危险执行路径数对比
由表1 可知,采用基于大数据技术的识别方法、基于可变形卷积神经网络的识别方法,捕获危险执行路径数均超过了理想值,而使用基于多核集成学习识别方法所捕获危险执行路径数均未超过理想值,说明该方法的静态软件安全漏洞识别质量更高。
通过上述分析结果可知,使用基于多核集成学习识别方法,漏洞识别时间短、捕获危险执行路径数在理想值范围内,说明该方法对漏洞识别效果较好。
构建基于多核集成学习的静态软件安全漏洞识别模型,以解决漏洞识别不精度低且效果差的问题。主要利用多核集成学习器集成多个分类结果,结合分类结果实现静态软件安全漏洞识别。通过实验验证了所提出方法的识别结果精准,且效果好。
使用多核集成学习方法虽然能够为静态软件安全漏洞识别提供准确高效的方案,但是仍然避免不了一些需要继续完善的问题。后期需要从类别分布不平衡问题入手,为提高识别结果全面性提供重要的技术支持。