APP下载

多线程交互学习软件系统安全漏洞自动化检测

2022-05-14徐晓君常会丽

计算机仿真 2022年4期
关键词:源代码安全漏洞语句

徐晓君,常会丽

(1. 宁夏理工学院计算机科学与工程学院,宁夏 石嘴山 753000;2. 宁夏大学物理与电子电气工程学院,宁夏 银川 750021)

1 引言

交互学习软件系统是通过运用多媒体计算机技术与网络技术,融合网上资源与多媒体课件等,实现各个学生之间及学生与教师之间的交流互动的学习软件系统[1]。它能够将交往范围扩大,利用相关学习工具规避以往普通学习方式在空间与时间上的束缚,有效推进移动学习的快速发展。当前交互学习软件系统中运用较多的即为多通道交互,是指采用肢体、手势及语音等实现同计算机系统的互动交流,令交互学习软件系统具备更自然高效的人机交互性能[2,3]。随着计算机硬件系统的多处理器结构逐步取代单处理器结构,多线程软件逐步发展为系统中软件技术的关键核心之一,能够最大限度地对系统多核硬件的潜能加以运用,将多线程软件运用于交互学习软件系统内,可通过其信号量技术有效解决交互学习软件系共享资源互相排斥的问题[4]。但当多线程交互学习软件系统的信号量应用不恰当时,易产生安全漏洞,导致整个系统程序的瘫痪。针对多线程交互学习软件系统安全漏洞的检测是降低整体软件系统漏洞威胁、提升软件系统安全性与质量的关键,成为当前各界学者的主要研究方向[5,6]。

基于支持向量机的漏洞检测技术是通过将正则表达式与支持向量机相结合,创建递归特征消去算法,通过此算法由训练集代表特征中选取出最优特征,依据最优特征对攻击性关键词实施排序,根据特征关键词的出现概率判断漏洞风险,实现漏洞检测,该技术检测精度较高,但检测中需多次排序导致检测效率过低[7];基于符号执行的网络程序漏洞检测技术是以选择性符号执行技术与软件虚拟机动态二进制翻译机制为基础,将符号化数据导入,运用重点函数挂钩法监控程序执行过程,将双端状态同步判定模型确准,建立网络程序漏洞检测技术,达到漏洞检测的目的,此技术检测效率高,但检测精度稍低[8]。

静态检测方法是在待检测软件程序处于非动态执行状态下时,通过对待检测软件程序的方法语句、结构及接口等源程序信息展开分析,实现对待检测软件程序的安全漏洞检测[9]。其具体实现过程包括软件源程序的分析与转化、依赖分析以及漏洞分析等,最关键的特点为检测效率高,能够将待检测软件的缺陷漏洞迅速找出。

基于以上分析,本文研究多线程交互学习软件系统安全漏洞自动化检测技术,通过有效结合静态检测方法,设计安全漏洞自动化检测技术,实现对多线程交互学习软件系统安全漏洞的自动化检测,为有效保障多线程交互学习软件系统的可靠性与安全性提供帮助。

2 多线程交互学习软件系统安全漏洞自动化检测技术

2.1 整体技术架构设计

多线程交互学习软件系统安全漏洞自动化检测技术的整体架构中主要包含待测系统源代码转化、流分析、依赖图生成及安全漏洞静态检测四大部分。整体技术架构图如图1所示。

图1 检测技术整体架构图

其中源代码转化部分的主要任务为分析待测多线程交互学习软件系统源代码,同时遍历生成抽象语法树(AST),对待测系统程序的行号信息、类与接口间的实现信息、各类间的继承信息以及控制流信息等实施收集并向数据结构内保存,完成待测系统源代码的程序中间表示(IR)转化,为之后的流分析及生成依赖图做准备;流分析部分的关键任务为对源代码转化IR中各语句之间的数据依赖与控制依赖关系展开分析;依赖图生成部分是以流分析部分所得到的IR内各语句间的数据依赖与控制依赖关系为依据,将数据流与控制流信息提取出,并依据用户的输入参数筛选此类信息,向依赖图内保存;安全漏洞静态检测部分属于整体检测技术的核心,其任务是依据依赖图内信息运用静态检测算法分析出待测系统所存在的安全漏洞,生成安全漏洞报告,完成多线程交互学习软件系统安全漏洞的自动化检测。

2.2 整体检测流程设计

自动化检测技术的整体检测流程设计情况如图2所示。

图2 整体检测流程图

整体检测流程描述包括:

1)接收待检测多线程交互学习软件系统的源代码编程语言与所处路径,以层级信息的方式读取所有路径目录下与编程语言有关的文件;

2)运用开源编译器工具(ANTLR)生成词法与语法分析器,对待测系统的源代码实施词法与语法分析;生成AST转化器,转化源代码为语法树AST,经遍历获取到AST树,对有关信息实施收集后,构成待测系统源代码的IR;

3)对待测系统源代码的IR实施数据依赖与控制依赖的流分析,获取到语句间的数据依赖和控制依赖关系,构成待测系统源代码IR的依赖图OCSDG;

4)通过静态检测方法运用依赖图内所获取到的依赖信息分析出IR的安全漏洞,得到安全漏洞分析报告,报告中结果由安全漏洞的位置、类别及详细跟踪信息等构成,实现多线程交互学习软件系统的安全漏洞自动化检测。

2.3 依赖图的生成

待测系统源代码IR的依赖图整体生成过程主要包括待测系统源代码的IR转化、IR流分析、生成依赖图。

2.3.1 系统源代码分析及转化

运用静态检测方法对待测系统源代码的安全漏洞实施检测时,需通过逐行扫描源代码的方式识别安全漏洞,然而因源代码属于二进制代码或字符串,导致此方法获取源代码依赖信息与语义的难度较高[10]。故应在实施静态检查之前,等价转化待测系统源代码为IR,之后再对IR实施相应的流分析,运用IR及语句之间的依赖信息生成依赖图用于静态检测中。源代码分析与转化过程如图3所示。

图3 源代码分析与转化过程图

选用开源编译器工具ANTLR分析与转化待测系统源代码,具体过程为:①通过ANTLR的GUI工具对待测系统源程序相应的文法文件实施编写;②运用ANTLR生成词法与语法分析器、AST遍历器;③经过对源代码的词法与语法分析之后,将源代码转化成语法树AST;④经由AST遍历器遍历并收集相关信息后,转化源代码为IR。

2.3.2 IR流分析

通过等价转化待测系统源代码为IR后,在控制流程图内保存了源代码内各语句之间的关系。为了将充足的信息提供给之后的安全漏洞检测,实现对待测系统源代码所转化的IR实施控制依赖与数据依赖的流分析,并向图结构内储存最终所获取到的分析结果。

2)数据依赖分析:对于∀n∈N,其中N与n分别为CFG的全部节点集合与某个节点,即某个方法中的某条语句为n;某条语句n内定义的变量与所引用的变量集分别以Def(n)和Use(n)表示。

2.3.3 生成算法过程

面向对象并行的系统依赖图(OCSDG),即当某个五元组OCSDG=(V,E,Ts,Te,s)时,且其中s∈V表示主线程入口的节点;Ts⊂V和Te⊂V分别为线程进入与退出节点的集合;E:V×E→V与V分别代表某个表示边的集合与某个非空语句的节点集合,如此可称之为OCSDG。OCSDG模型描述为:OCSDG的基本单位为语句,主要有扩展型语句、行为型语句及结构型语句三类,属于图内节点的内容;OCSDG内语句的上级子图为方法依赖子图,代表的是待测系统程序内的单个方法;方法依赖子图的上级即为类依赖子图,其仅具备一个类入口节点[11];与类依赖子图同一等级的接口依赖子图,其所代表的是待测系统程序内的单个接口;最后一个子图为多线程依赖子图,此子图为面向多线程的系统依赖图特定的结构。

OCSDG生成算法过程见图4。

图4 OCSDG生成算法过程图

OCSDG生成算法过程描述为:

1)对全部的类实施遍历,收集其中各类与其相关成员间的类成员依赖信息;

2)对各类内的全部方法实施遍历,将方法与类接口间的抽象实现边及方法收集到;

3)对方法内的全部语句实施遍历,依次获得此节点的数据依赖及控制依赖信息;

4)对语句内的所有表达式实施遍历与相应处理,若所遍历的表达式为方法调用表达式,处理时可依据对象流分析所得结果对有可能被调用到的方法实施收集,将方法调用依赖边添加到此表达式内;若所遍历的表达式为类字段访问表达式,可将对应信息添加到此表达式内。

2.4 安全漏洞静态检测方法

安全漏洞静态检测方法是基于OCSDG所提供的信息,对待测系统实施安全漏洞检测。待测系统的安全漏洞主要包括多线程结构化漏洞、违反执行顺序漏洞及违反原子性漏洞三大类。其中多线程结构化漏洞指的是与多线程同步语句存在关联的错误;违反执行顺序漏洞指的是只有在某种特定次序下两条语句的执行顺序方可保证待测系统程序无误,但不存在同步语句保证此种特定次序[12];违反原子性漏洞指的是在并行执行状态下意图成为原子性的代码段原子性遭到破坏。安全漏洞静态检测算法过程为:

输入:OCSDG

输出:安全漏洞报告

1)entrypoint=待检测系统入口点主要方法;

2)context 对静态方法调用信息进行设置;

3)for(对全部语句实施遍历){

4) if(指派语句){

5) for(对干涉依赖信息Use实施遍历)

6) if(如果Use与Def存在在相同时间段执行的可能性)获取到违反执行顺序漏洞报告

7) }

8) if(表达式语句){

9) for(对干涉依赖信息Use实施遍历)

10) if(如果Use与Def存在在相同时间段执行的可能性)获取到违反原子性漏洞报告

11) }

12) if(对象方法调用语句){

13) context 对对象方法调用信息实施设定;

14)递归调用(3)~(21)步,分析此对象方法();

15) context 内对此对象方法返回信息实施设定;

16) }

17) if(静态方法调用语句){

18) context 对此静态方法调用信息实施设定;

19)递归调用(3)~(21)步,分析此静态方法();

20) context 对此静态方法返回信息实施设定;

21)}

22)context 对此静态方法返回信息实施设定;

23)for(对全部线程实施遍历){

24) initThread();

25) entrypoint=得到线程对象的初始方法;

26) context 内对此方法调用信息实施设定;

27)递归调用(3)~(21)步,分析此方法();

28) context 内对此方法返回信息实施设定;

29)}

3 实验结果分析

以某高校现实应用中的多线程交互学习软件系统为例,由此系统内随机抽取出两组历史数据集(A与B)作为实验对象,分别运用本文技术、基于支持向量机的漏洞检测技术(文献[7]技术)、基于符号执行的漏洞检测技术(文献[8]技术)对实验系统A、B数据集实施安全漏洞自动化检测,通过对比各技术的检测结果,检验本文技术的综合检测性能。

基于支持向量机的漏洞检测技术是通过结合正则表达式与支持向量机构成递归特征消去算法,由训练集内代表特征中将最优特征选取出,排序攻击性关键词,实现漏洞检测;基于符号执行的漏洞检测技术是在软件虚拟机动态二进制翻译机制与选择性符号执行技术的基础上,引入符号化数据,采用重点函数挂钩法对程序执行过程实施监控,将双端状态同步判定模型确准,形成自动化网络程序漏洞检测技术,实现漏洞检测。

3.1 检测效果测试

实验系统A、B历史数据集内所包含的真实安全漏洞总数量分别为320个和298个,其中A数据集内多线程结构化漏洞、违反执行顺序漏洞、违反原子性漏洞及其它漏洞的数量依次为73个、96个、68个、83个;B数据集内多线程结构化漏洞、违反执行顺序漏洞、违反原子性漏洞及其它漏洞的数量依次为66个、73个、75个、84个。统计通过三种技术所检测出的A、B两组数据集内各类漏洞数量与总漏洞数量,与A、B两组数据集的漏洞真实值对比,分析三种技术的检测效果。统计对比结果详见表1。

表1 各技术检测结果与真实值对比情况

通过表1能够看出,三种技术中本文技术所检测出的A、B两组数据集内总漏洞数量同真实值更为接近,两组总漏洞数量的检测误差分别为3.44%与3.02%;文献[7]技术与文献[8]技术的两组总漏洞数量的检测误差分别为4.69%、5.03%与6.88%、6.71%。由此可见,本文技术的漏洞数量检测误差更低,检测效果更优越。

为进一步测试三种技术的检测效果,现以召回率与误检率作为测试指标,依据三种技术检测A、B两组数据集的结果运算获得各技术所对应的两种指标值,取A、B两组数据集检测结果指标值的平均值作为三种技术的对比数据,结果如图5所示。

图5 各技术检测结果的召回率与误检率对比结果

分析图5可得知,本文技术的各类别漏洞平均召回率为93.75%,文献[7]技术的各类别漏洞平均召回率为90.03%,文献[8]技术的各类别漏洞平均召回率为83.26%;本文技术、文献[7]技术及文献[8]技术的各类漏洞平均误检率依次为1.35%、3.51%、4.19%,由此可见,本文技术的平均召回率最高,平均误检率最低,相比之下具有更高的检测精度。

3.2 检测效率测试

对三种技术检测安全漏洞的用时情况实施统计,依据统计结果测试三种技术的检测效率,统计结果如图6所示。

图6 三种技术检测用时统计情况

由图6能够得出,本文技术检测A、B两组数据集安全漏洞的用时远低于其它两种技术,可高效率完成实验系统数据集安全漏洞的检测,节省检测耗时,提升自动化检测的实时性。

4 结论

多线程交互学习软件系统的安全问题成为教育领域应用此软件系统实施教学所需考虑的关键问题,造成软件系统安全问题的原因较多,其中最为主要的即为软件系统本身的错误与缺陷等,因此类错误与缺陷导致软件系统易遭受网络攻击,为用户带来不同程度的损失。本文针对多线程交互学习软件系统安全漏洞自动化检测技术展开研究,通过IR转化待测系统源代码并对转化后IR实施流分析,获取到IR内语句间的依赖关系信息,在此基础上生成依赖图,输入到安全漏洞静态检测算法内,经分析获取到安全漏洞检测报告,完成多线程交互学习软件系统安全漏洞的自动化检测;应用结果表明,本文技术检测结果的综合精度高,具有较高的检测效率,可快速完成安全漏洞的自动化检测,为有效保障多线程交互学习软件系统的安全运行提供帮助。

猜你喜欢

源代码安全漏洞语句
刍议计算机软件中的安全漏洞检测技术
基于TXL的源代码插桩技术研究
智能设备安全漏洞知多少
保护好自己的“源代码”
计算机软件安全漏洞检测技术
解密别克安全“源代码”
基本算法语句
我喜欢
作文语句实录