徐曉君,常會麗
(1. 寧夏理工學(xué)院計算機科學(xué)與工程學(xué)院,寧夏 石嘴山 753000;2. 寧夏大學(xué)物理與電子電氣工程學(xué)院,寧夏 銀川 750021)
交互學(xué)習(xí)軟件系統(tǒng)是通過運用多媒體計算機技術(shù)與網(wǎng)絡(luò)技術(shù),融合網(wǎng)上資源與多媒體課件等,實現(xiàn)各個學(xué)生之間及學(xué)生與教師之間的交流互動的學(xué)習(xí)軟件系統(tǒng)[1]。它能夠?qū)⒔煌秶鷶U(kuò)大,利用相關(guān)學(xué)習(xí)工具規(guī)避以往普通學(xué)習(xí)方式在空間與時間上的束縛,有效推進(jìn)移動學(xué)習(xí)的快速發(fā)展。當(dāng)前交互學(xué)習(xí)軟件系統(tǒng)中運用較多的即為多通道交互,是指采用肢體、手勢及語音等實現(xiàn)同計算機系統(tǒng)的互動交流,令交互學(xué)習(xí)軟件系統(tǒng)具備更自然高效的人機交互性能[2,3]。隨著計算機硬件系統(tǒng)的多處理器結(jié)構(gòu)逐步取代單處理器結(jié)構(gòu),多線程軟件逐步發(fā)展為系統(tǒng)中軟件技術(shù)的關(guān)鍵核心之一,能夠最大限度地對系統(tǒng)多核硬件的潛能加以運用,將多線程軟件運用于交互學(xué)習(xí)軟件系統(tǒng)內(nèi),可通過其信號量技術(shù)有效解決交互學(xué)習(xí)軟件系共享資源互相排斥的問題[4]。但當(dāng)多線程交互學(xué)習(xí)軟件系統(tǒng)的信號量應(yīng)用不恰當(dāng)時,易產(chǎn)生安全漏洞,導(dǎo)致整個系統(tǒng)程序的癱瘓。針對多線程交互學(xué)習(xí)軟件系統(tǒng)安全漏洞的檢測是降低整體軟件系統(tǒng)漏洞威脅、提升軟件系統(tǒng)安全性與質(zhì)量的關(guān)鍵,成為當(dāng)前各界學(xué)者的主要研究方向[5,6]。
基于支持向量機的漏洞檢測技術(shù)是通過將正則表達(dá)式與支持向量機相結(jié)合,創(chuàng)建遞歸特征消去算法,通過此算法由訓(xùn)練集代表特征中選取出最優(yōu)特征,依據(jù)最優(yōu)特征對攻擊性關(guān)鍵詞實施排序,根據(jù)特征關(guān)鍵詞的出現(xiàn)概率判斷漏洞風(fēng)險,實現(xiàn)漏洞檢測,該技術(shù)檢測精度較高,但檢測中需多次排序?qū)е聶z測效率過低[7];基于符號執(zhí)行的網(wǎng)絡(luò)程序漏洞檢測技術(shù)是以選擇性符號執(zhí)行技術(shù)與軟件虛擬機動態(tài)二進(jìn)制翻譯機制為基礎(chǔ),將符號化數(shù)據(jù)導(dǎo)入,運用重點函數(shù)掛鉤法監(jiān)控程序執(zhí)行過程,將雙端狀態(tài)同步判定模型確準(zhǔn),建立網(wǎng)絡(luò)程序漏洞檢測技術(shù),達(dá)到漏洞檢測的目的,此技術(shù)檢測效率高,但檢測精度稍低[8]。
靜態(tài)檢測方法是在待檢測軟件程序處于非動態(tài)執(zhí)行狀態(tài)下時,通過對待檢測軟件程序的方法語句、結(jié)構(gòu)及接口等源程序信息展開分析,實現(xiàn)對待檢測軟件程序的安全漏洞檢測[9]。其具體實現(xiàn)過程包括軟件源程序的分析與轉(zhuǎn)化、依賴分析以及漏洞分析等,最關(guān)鍵的特點為檢測效率高,能夠?qū)⒋龣z測軟件的缺陷漏洞迅速找出。
基于以上分析,本文研究多線程交互學(xué)習(xí)軟件系統(tǒng)安全漏洞自動化檢測技術(shù),通過有效結(jié)合靜態(tài)檢測方法,設(shè)計安全漏洞自動化檢測技術(shù),實現(xiàn)對多線程交互學(xué)習(xí)軟件系統(tǒng)安全漏洞的自動化檢測,為有效保障多線程交互學(xué)習(xí)軟件系統(tǒng)的可靠性與安全性提供幫助。
多線程交互學(xué)習(xí)軟件系統(tǒng)安全漏洞自動化檢測技術(shù)的整體架構(gòu)中主要包含待測系統(tǒng)源代碼轉(zhuǎn)化、流分析、依賴圖生成及安全漏洞靜態(tài)檢測四大部分。整體技術(shù)架構(gòu)圖如圖1所示。
圖1 檢測技術(shù)整體架構(gòu)圖
其中源代碼轉(zhuǎn)化部分的主要任務(wù)為分析待測多線程交互學(xué)習(xí)軟件系統(tǒng)源代碼,同時遍歷生成抽象語法樹(AST),對待測系統(tǒng)程序的行號信息、類與接口間的實現(xiàn)信息、各類間的繼承信息以及控制流信息等實施收集并向數(shù)據(jù)結(jié)構(gòu)內(nèi)保存,完成待測系統(tǒng)源代碼的程序中間表示(IR)轉(zhuǎn)化,為之后的流分析及生成依賴圖做準(zhǔn)備;流分析部分的關(guān)鍵任務(wù)為對源代碼轉(zhuǎn)化IR中各語句之間的數(shù)據(jù)依賴與控制依賴關(guān)系展開分析;依賴圖生成部分是以流分析部分所得到的IR內(nèi)各語句間的數(shù)據(jù)依賴與控制依賴關(guān)系為依據(jù),將數(shù)據(jù)流與控制流信息提取出,并依據(jù)用戶的輸入?yún)?shù)篩選此類信息,向依賴圖內(nèi)保存;安全漏洞靜態(tài)檢測部分屬于整體檢測技術(shù)的核心,其任務(wù)是依據(jù)依賴圖內(nèi)信息運用靜態(tài)檢測算法分析出待測系統(tǒng)所存在的安全漏洞,生成安全漏洞報告,完成多線程交互學(xué)習(xí)軟件系統(tǒng)安全漏洞的自動化檢測。
自動化檢測技術(shù)的整體檢測流程設(shè)計情況如圖2所示。
圖2 整體檢測流程圖
整體檢測流程描述包括:
1)接收待檢測多線程交互學(xué)習(xí)軟件系統(tǒng)的源代碼編程語言與所處路徑,以層級信息的方式讀取所有路徑目錄下與編程語言有關(guān)的文件;
2)運用開源編譯器工具(ANTLR)生成詞法與語法分析器,對待測系統(tǒng)的源代碼實施詞法與語法分析;生成AST轉(zhuǎn)化器,轉(zhuǎn)化源代碼為語法樹AST,經(jīng)遍歷獲取到AST樹,對有關(guān)信息實施收集后,構(gòu)成待測系統(tǒng)源代碼的IR;
3)對待測系統(tǒng)源代碼的IR實施數(shù)據(jù)依賴與控制依賴的流分析,獲取到語句間的數(shù)據(jù)依賴和控制依賴關(guān)系,構(gòu)成待測系統(tǒng)源代碼IR的依賴圖OCSDG;
4)通過靜態(tài)檢測方法運用依賴圖內(nèi)所獲取到的依賴信息分析出IR的安全漏洞,得到安全漏洞分析報告,報告中結(jié)果由安全漏洞的位置、類別及詳細(xì)跟蹤信息等構(gòu)成,實現(xiàn)多線程交互學(xué)習(xí)軟件系統(tǒng)的安全漏洞自動化檢測。
待測系統(tǒng)源代碼IR的依賴圖整體生成過程主要包括待測系統(tǒng)源代碼的IR轉(zhuǎn)化、IR流分析、生成依賴圖。
2.3.1 系統(tǒng)源代碼分析及轉(zhuǎn)化
運用靜態(tài)檢測方法對待測系統(tǒng)源代碼的安全漏洞實施檢測時,需通過逐行掃描源代碼的方式識別安全漏洞,然而因源代碼屬于二進(jìn)制代碼或字符串,導(dǎo)致此方法獲取源代碼依賴信息與語義的難度較高[10]。故應(yīng)在實施靜態(tài)檢查之前,等價轉(zhuǎn)化待測系統(tǒng)源代碼為IR,之后再對IR實施相應(yīng)的流分析,運用IR及語句之間的依賴信息生成依賴圖用于靜態(tài)檢測中。源代碼分析與轉(zhuǎn)化過程如圖3所示。
圖3 源代碼分析與轉(zhuǎn)化過程圖
選用開源編譯器工具ANTLR分析與轉(zhuǎn)化待測系統(tǒng)源代碼,具體過程為:①通過ANTLR的GUI工具對待測系統(tǒng)源程序相應(yīng)的文法文件實施編寫;②運用ANTLR生成詞法與語法分析器、AST遍歷器;③經(jīng)過對源代碼的詞法與語法分析之后,將源代碼轉(zhuǎn)化成語法樹AST;④經(jīng)由AST遍歷器遍歷并收集相關(guān)信息后,轉(zhuǎn)化源代碼為IR。
2.3.2 IR流分析
通過等價轉(zhuǎn)化待測系統(tǒng)源代碼為IR后,在控制流程圖內(nèi)保存了源代碼內(nèi)各語句之間的關(guān)系。為了將充足的信息提供給之后的安全漏洞檢測,實現(xiàn)對待測系統(tǒng)源代碼所轉(zhuǎn)化的IR實施控制依賴與數(shù)據(jù)依賴的流分析,并向圖結(jié)構(gòu)內(nèi)儲存最終所獲取到的分析結(jié)果。
2)數(shù)據(jù)依賴分析:對于?n∈N,其中N與n分別為CFG的全部節(jié)點集合與某個節(jié)點,即某個方法中的某條語句為n;某條語句n內(nèi)定義的變量與所引用的變量集分別以Def(n)和Use(n)表示。
2.3.3 生成算法過程
面向?qū)ο蟛⑿械南到y(tǒng)依賴圖(OCSDG),即當(dāng)某個五元組OCSDG=(V,E,Ts,Te,s)時,且其中s∈V表示主線程入口的節(jié)點;Ts?V和Te?V分別為線程進(jìn)入與退出節(jié)點的集合;E:V×E→V與V分別代表某個表示邊的集合與某個非空語句的節(jié)點集合,如此可稱之為OCSDG。OCSDG模型描述為:OCSDG的基本單位為語句,主要有擴(kuò)展型語句、行為型語句及結(jié)構(gòu)型語句三類,屬于圖內(nèi)節(jié)點的內(nèi)容;OCSDG內(nèi)語句的上級子圖為方法依賴子圖,代表的是待測系統(tǒng)程序內(nèi)的單個方法;方法依賴子圖的上級即為類依賴子圖,其僅具備一個類入口節(jié)點[11];與類依賴子圖同一等級的接口依賴子圖,其所代表的是待測系統(tǒng)程序內(nèi)的單個接口;最后一個子圖為多線程依賴子圖,此子圖為面向多線程的系統(tǒng)依賴圖特定的結(jié)構(gòu)。
OCSDG生成算法過程見圖4。
圖4 OCSDG生成算法過程圖
OCSDG生成算法過程描述為:
1)對全部的類實施遍歷,收集其中各類與其相關(guān)成員間的類成員依賴信息;
2)對各類內(nèi)的全部方法實施遍歷,將方法與類接口間的抽象實現(xiàn)邊及方法收集到;
3)對方法內(nèi)的全部語句實施遍歷,依次獲得此節(jié)點的數(shù)據(jù)依賴及控制依賴信息;
4)對語句內(nèi)的所有表達(dá)式實施遍歷與相應(yīng)處理,若所遍歷的表達(dá)式為方法調(diào)用表達(dá)式,處理時可依據(jù)對象流分析所得結(jié)果對有可能被調(diào)用到的方法實施收集,將方法調(diào)用依賴邊添加到此表達(dá)式內(nèi);若所遍歷的表達(dá)式為類字段訪問表達(dá)式,可將對應(yīng)信息添加到此表達(dá)式內(nèi)。
安全漏洞靜態(tài)檢測方法是基于OCSDG所提供的信息,對待測系統(tǒng)實施安全漏洞檢測。待測系統(tǒng)的安全漏洞主要包括多線程結(jié)構(gòu)化漏洞、違反執(zhí)行順序漏洞及違反原子性漏洞三大類。其中多線程結(jié)構(gòu)化漏洞指的是與多線程同步語句存在關(guān)聯(lián)的錯誤;違反執(zhí)行順序漏洞指的是只有在某種特定次序下兩條語句的執(zhí)行順序方可保證待測系統(tǒng)程序無誤,但不存在同步語句保證此種特定次序[12];違反原子性漏洞指的是在并行執(zhí)行狀態(tài)下意圖成為原子性的代碼段原子性遭到破壞。安全漏洞靜態(tài)檢測算法過程為:
輸入:OCSDG
輸出:安全漏洞報告
1)entrypoint=待檢測系統(tǒng)入口點主要方法;
2)context 對靜態(tài)方法調(diào)用信息進(jìn)行設(shè)置;
3)for(對全部語句實施遍歷){
4) if(指派語句){
5) for(對干涉依賴信息Use實施遍歷)
6) if(如果Use與Def存在在相同時間段執(zhí)行的可能性)獲取到違反執(zhí)行順序漏洞報告
7) }
8) if(表達(dá)式語句){
9) for(對干涉依賴信息Use實施遍歷)
10) if(如果Use與Def存在在相同時間段執(zhí)行的可能性)獲取到違反原子性漏洞報告
11) }
12) if(對象方法調(diào)用語句){
13) context 對對象方法調(diào)用信息實施設(shè)定;
14)遞歸調(diào)用(3)~(21)步,分析此對象方法();
15) context 內(nèi)對此對象方法返回信息實施設(shè)定;
16) }
17) if(靜態(tài)方法調(diào)用語句){
18) context 對此靜態(tài)方法調(diào)用信息實施設(shè)定;
19)遞歸調(diào)用(3)~(21)步,分析此靜態(tài)方法();
20) context 對此靜態(tài)方法返回信息實施設(shè)定;
21)}
22)context 對此靜態(tài)方法返回信息實施設(shè)定;
23)for(對全部線程實施遍歷){
24) initThread();
25) entrypoint=得到線程對象的初始方法;
26) context 內(nèi)對此方法調(diào)用信息實施設(shè)定;
27)遞歸調(diào)用(3)~(21)步,分析此方法();
28) context 內(nèi)對此方法返回信息實施設(shè)定;
29)}
以某高?,F(xiàn)實應(yīng)用中的多線程交互學(xué)習(xí)軟件系統(tǒng)為例,由此系統(tǒng)內(nèi)隨機抽取出兩組歷史數(shù)據(jù)集(A與B)作為實驗對象,分別運用本文技術(shù)、基于支持向量機的漏洞檢測技術(shù)(文獻(xiàn)[7]技術(shù))、基于符號執(zhí)行的漏洞檢測技術(shù)(文獻(xiàn)[8]技術(shù))對實驗系統(tǒng)A、B數(shù)據(jù)集實施安全漏洞自動化檢測,通過對比各技術(shù)的檢測結(jié)果,檢驗本文技術(shù)的綜合檢測性能。
基于支持向量機的漏洞檢測技術(shù)是通過結(jié)合正則表達(dá)式與支持向量機構(gòu)成遞歸特征消去算法,由訓(xùn)練集內(nèi)代表特征中將最優(yōu)特征選取出,排序攻擊性關(guān)鍵詞,實現(xiàn)漏洞檢測;基于符號執(zhí)行的漏洞檢測技術(shù)是在軟件虛擬機動態(tài)二進(jìn)制翻譯機制與選擇性符號執(zhí)行技術(shù)的基礎(chǔ)上,引入符號化數(shù)據(jù),采用重點函數(shù)掛鉤法對程序執(zhí)行過程實施監(jiān)控,將雙端狀態(tài)同步判定模型確準(zhǔn),形成自動化網(wǎng)絡(luò)程序漏洞檢測技術(shù),實現(xiàn)漏洞檢測。
實驗系統(tǒng)A、B歷史數(shù)據(jù)集內(nèi)所包含的真實安全漏洞總數(shù)量分別為320個和298個,其中A數(shù)據(jù)集內(nèi)多線程結(jié)構(gòu)化漏洞、違反執(zhí)行順序漏洞、違反原子性漏洞及其它漏洞的數(shù)量依次為73個、96個、68個、83個;B數(shù)據(jù)集內(nèi)多線程結(jié)構(gòu)化漏洞、違反執(zhí)行順序漏洞、違反原子性漏洞及其它漏洞的數(shù)量依次為66個、73個、75個、84個。統(tǒng)計通過三種技術(shù)所檢測出的A、B兩組數(shù)據(jù)集內(nèi)各類漏洞數(shù)量與總漏洞數(shù)量,與A、B兩組數(shù)據(jù)集的漏洞真實值對比,分析三種技術(shù)的檢測效果。統(tǒng)計對比結(jié)果詳見表1。
表1 各技術(shù)檢測結(jié)果與真實值對比情況
通過表1能夠看出,三種技術(shù)中本文技術(shù)所檢測出的A、B兩組數(shù)據(jù)集內(nèi)總漏洞數(shù)量同真實值更為接近,兩組總漏洞數(shù)量的檢測誤差分別為3.44%與3.02%;文獻(xiàn)[7]技術(shù)與文獻(xiàn)[8]技術(shù)的兩組總漏洞數(shù)量的檢測誤差分別為4.69%、5.03%與6.88%、6.71%。由此可見,本文技術(shù)的漏洞數(shù)量檢測誤差更低,檢測效果更優(yōu)越。
為進(jìn)一步測試三種技術(shù)的檢測效果,現(xiàn)以召回率與誤檢率作為測試指標(biāo),依據(jù)三種技術(shù)檢測A、B兩組數(shù)據(jù)集的結(jié)果運算獲得各技術(shù)所對應(yīng)的兩種指標(biāo)值,取A、B兩組數(shù)據(jù)集檢測結(jié)果指標(biāo)值的平均值作為三種技術(shù)的對比數(shù)據(jù),結(jié)果如圖5所示。
圖5 各技術(shù)檢測結(jié)果的召回率與誤檢率對比結(jié)果
分析圖5可得知,本文技術(shù)的各類別漏洞平均召回率為93.75%,文獻(xiàn)[7]技術(shù)的各類別漏洞平均召回率為90.03%,文獻(xiàn)[8]技術(shù)的各類別漏洞平均召回率為83.26%;本文技術(shù)、文獻(xiàn)[7]技術(shù)及文獻(xiàn)[8]技術(shù)的各類漏洞平均誤檢率依次為1.35%、3.51%、4.19%,由此可見,本文技術(shù)的平均召回率最高,平均誤檢率最低,相比之下具有更高的檢測精度。
對三種技術(shù)檢測安全漏洞的用時情況實施統(tǒng)計,依據(jù)統(tǒng)計結(jié)果測試三種技術(shù)的檢測效率,統(tǒng)計結(jié)果如圖6所示。
圖6 三種技術(shù)檢測用時統(tǒng)計情況
由圖6能夠得出,本文技術(shù)檢測A、B兩組數(shù)據(jù)集安全漏洞的用時遠(yuǎn)低于其它兩種技術(shù),可高效率完成實驗系統(tǒng)數(shù)據(jù)集安全漏洞的檢測,節(jié)省檢測耗時,提升自動化檢測的實時性。
多線程交互學(xué)習(xí)軟件系統(tǒng)的安全問題成為教育領(lǐng)域應(yīng)用此軟件系統(tǒng)實施教學(xué)所需考慮的關(guān)鍵問題,造成軟件系統(tǒng)安全問題的原因較多,其中最為主要的即為軟件系統(tǒng)本身的錯誤與缺陷等,因此類錯誤與缺陷導(dǎo)致軟件系統(tǒng)易遭受網(wǎng)絡(luò)攻擊,為用戶帶來不同程度的損失。本文針對多線程交互學(xué)習(xí)軟件系統(tǒng)安全漏洞自動化檢測技術(shù)展開研究,通過IR轉(zhuǎn)化待測系統(tǒng)源代碼并對轉(zhuǎn)化后IR實施流分析,獲取到IR內(nèi)語句間的依賴關(guān)系信息,在此基礎(chǔ)上生成依賴圖,輸入到安全漏洞靜態(tài)檢測算法內(nèi),經(jīng)分析獲取到安全漏洞檢測報告,完成多線程交互學(xué)習(xí)軟件系統(tǒng)安全漏洞的自動化檢測;應(yīng)用結(jié)果表明,本文技術(shù)檢測結(jié)果的綜合精度高,具有較高的檢測效率,可快速完成安全漏洞的自動化檢測,為有效保障多線程交互學(xué)習(xí)軟件系統(tǒng)的安全運行提供幫助。