劉景林
(泉州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院信息技術(shù)系 福建泉州 362000)
計(jì)算機(jī)軟件開發(fā)過程中軟件安全性能檢測不可或缺,利于及時(shí)發(fā)現(xiàn)軟件安全缺陷、安全故障并修復(fù),更正未來軟件應(yīng)用的安全風(fēng)險(xiǎn),保障實(shí)際應(yīng)用效能與預(yù)期設(shè)計(jì)一致。計(jì)算機(jī)軟件安全性能檢測包含項(xiàng)目眾多,漏洞掃描是計(jì)算機(jī)軟件安全性能評估指標(biāo)之一。該研究以軟件的漏洞掃描為對象展開軟件的安全性能分析[1]。隨著人工智能技術(shù)的高速發(fā)展與應(yīng)用,深度學(xué)習(xí)超越了支持向量機(jī)、決策樹、貝葉斯分類器等淺層學(xué)習(xí)架構(gòu)的識別與分類能力,以其模擬人腦神經(jīng)網(wǎng)絡(luò)的極大優(yōu)勢,在解決大數(shù)據(jù)深層次分類問題、計(jì)算機(jī)數(shù)據(jù)深度挖掘問題上功效顯著[2]。為此,文章基于深度學(xué)習(xí)算法檢測計(jì)算機(jī)軟件開發(fā)期存在的安全漏洞問題,更加精準(zhǔn)的探尋軟件開發(fā)存在的安全風(fēng)險(xiǎn)。
該研究中,計(jì)算機(jī)軟件安全性能檢測原理如下:①構(gòu)建軟件漏洞代碼數(shù)據(jù)集,作為深度學(xué)習(xí)算法訓(xùn)練的樣本。②設(shè)計(jì)堆疊自編碼器深度學(xué)習(xí)架構(gòu)進(jìn)行漏洞檢測樣本訓(xùn)練,構(gòu)建計(jì)算機(jī)軟件漏洞檢測模型,以識別軟件代碼漏洞方面的安全性能。
卷積神經(jīng)網(wǎng)絡(luò)、堆疊自編碼器、深度信念網(wǎng)絡(luò)均為典型的深度學(xué)習(xí)模型,自編碼器訓(xùn)練成本不高、無監(jiān)督學(xué)習(xí),更適合解決計(jì)算機(jī)惡意軟件識別、漏洞檢測等問題。多個(gè)自編碼器組成堆疊自編碼器結(jié)構(gòu),如圖1、圖2所示。自編碼器本質(zhì)是人工神經(jīng)網(wǎng)絡(luò),以學(xué)習(xí)編碼的方式解決深層次的分類問題[3]。自編碼器包括輸入層、隱藏層、輸出層等基本結(jié)構(gòu),在輸入層樣本被進(jìn)行編碼處理傳輸至隱藏層,再以解碼的方式傳輸?shù)捷敵鰧?,此為自編碼器分類的全過程。此過程中編碼數(shù)據(jù)通常會被壓縮,因?yàn)殡[藏層節(jié)點(diǎn)數(shù)量相比輸入層較少,隱藏層實(shí)質(zhì)是一種特征空間。
圖1 自編碼器基本結(jié)構(gòu)
圖2 堆疊自編碼器原理
自編碼器運(yùn)行具體過程如下:
首先,定義自編碼器fε的輸入樣本為X={x1,x2,…,xn},包含n個(gè)樣本;m0維特征向量用xi描述,公式(1)為自編碼器的激活函數(shù)形式:
(1)
其次,將輸入樣本xi轉(zhuǎn)換為隱藏表示向量yi,方法如下:
yi=fε(xi)=s(Wxi+b)
(2)
式(2)中,權(quán)重矩陣用W表示,大小為m0×m1,隱藏層神經(jīng)元為m1個(gè);偏移向量為b。
然后,隱藏層輸出的yi成為解碼器的輸入,公式(3)為解碼器的表達(dá)式:
(3)
式(3)中,偏移向量與權(quán)重矩陣分別描述為b′、W。由于輸入層與輸出層神經(jīng)元數(shù)量超過隱藏層,所以在堆疊自編碼器結(jié)構(gòu)作用下,軟件漏洞代碼數(shù)據(jù)樣本以壓縮的方式進(jìn)行重構(gòu),此時(shí)應(yīng)以重構(gòu)壓縮誤差最小作為目標(biāo)[4],因此重構(gòu)壓縮誤差需滿足公式(4):
(4)
深層次學(xué)習(xí)網(wǎng)絡(luò)(堆疊自編碼器)形成需要以數(shù)個(gè)自編碼器連接為前提,共同構(gòu)建一個(gè)可以解決復(fù)雜數(shù)據(jù)分類問題的深度學(xué)習(xí)模型,上一層次自編碼器的輸出將作為下一層次自編碼器的輸入,由此構(gòu)成的用于軟件漏洞掃描的堆疊自編碼器結(jié)構(gòu),如圖2所示。其中,堆疊自編碼器由n個(gè)自編碼器組成,將每層編碼器的隱藏層輸出作為下一層自編碼器的輸入,如此重復(fù)形成一個(gè)系統(tǒng)化的深層次網(wǎng)絡(luò)結(jié)構(gòu)。除此之外,堆疊自編碼器尾層增加了分類器結(jié)構(gòu),其目的是識別軟件是否存在漏洞[5]。
堆疊自編碼器的預(yù)訓(xùn)練與微調(diào)是修正模型性能的兩個(gè)關(guān)鍵步驟,因此在預(yù)訓(xùn)練與微調(diào)階段執(zhí)行以下策略:
(1)堆疊自編碼器預(yù)訓(xùn)練策略:首先,輸入樣本集采用無標(biāo)簽形式,還原網(wǎng)絡(luò)的權(quán)值矩陣與偏置向量,同時(shí)定義迭代次數(shù)、學(xué)習(xí)率、批量大小、網(wǎng)絡(luò)層數(shù)等參數(shù);其次,以無監(jiān)督的方式訓(xùn)練堆疊自編碼器,求取隱藏層神經(jīng)元激活量、代價(jià)函數(shù)兩個(gè)關(guān)鍵變量;最后參照李晴晴等人方式更新權(quán)值與偏置值[6],堆疊自編碼器終止迭代的條件時(shí)誤差符合預(yù)設(shè)值。
(2)堆疊自編碼器的微調(diào)策略:首先,輸入樣本集采用有標(biāo)簽形式,少量樣本即可,執(zhí)行預(yù)訓(xùn)練得到的權(quán)值矩陣與偏置向量,更新迭代次數(shù)、學(xué)習(xí)率、批量大小、網(wǎng)絡(luò)層數(shù)等參數(shù);其次,為堆疊自編碼器末端設(shè)置softmax分類器,以有監(jiān)督的方式進(jìn)行漏洞分類;最后,在各個(gè)迭代環(huán)節(jié)更新權(quán)值與偏置量,方法是BP反向傳播法,完成對深度網(wǎng)絡(luò)參數(shù)的微調(diào)[7],由此得到一個(gè)參數(shù)訓(xùn)練完備的堆疊自編碼器檢測模型。
堆疊自編碼器檢測階段,將檢測對象的代碼構(gòu)成數(shù)據(jù)集輸入到訓(xùn)練好的堆疊自編碼器模型中,得到相應(yīng)的軟件漏洞檢測結(jié)果,當(dāng)輸出結(jié)果為“0”時(shí)對應(yīng)的結(jié)果為“不存在漏洞”;當(dāng)輸出結(jié)果大于“0”時(shí)對應(yīng)的分類結(jié)果為“存在漏洞”。
基于Python 語言在 Linux 操作系統(tǒng)下對文章深度學(xué)習(xí)檢測算法進(jìn)行開發(fā),搭建計(jì)算機(jī)軟件安全性能測試環(huán)境展開技術(shù)實(shí)驗(yàn)。由計(jì)算機(jī)軟件開發(fā)企業(yè)獲得大量帶有漏洞的軟件代碼數(shù)據(jù),構(gòu)成5個(gè)大小相當(dāng)?shù)臄?shù)據(jù)集作為測試樣本。測試中使用誤報(bào)率、漏報(bào)率評估檢測方法的可行性與性能,當(dāng)不存在漏洞的樣本分類成存在漏洞樣本時(shí),將其稱為誤報(bào);當(dāng)存在漏洞的樣本分類成不存在漏洞樣本時(shí),將其稱為漏報(bào)。
在5個(gè)軟件代碼數(shù)據(jù)集上對文章方法展開性能測試,文章方法運(yùn)行完畢記錄了相應(yīng)的誤報(bào)率與漏報(bào)率,結(jié)果如表1所示。
表1 文章方法的軟件漏洞檢測的誤報(bào)率與漏報(bào)率統(tǒng)計(jì)
表1數(shù)據(jù)顯示,文章方法檢測軟件漏洞的誤報(bào)率在2.3~3.3%之間,漏報(bào)率在3.9~4.8%,漏報(bào)的概率整體高于誤報(bào)的概率。首先說明該方法將漏洞樣本分類成無漏洞樣本的可能性較大,日后的研究中可從該角度入手改進(jìn)檢測技術(shù)的適應(yīng)性與使用性能;其次,文章方法誤報(bào)率與漏報(bào)率的波動不大,均維持在1%左右,說明該方法檢測軟件漏洞的穩(wěn)定性較優(yōu),實(shí)用性較強(qiáng)。除此之外,兩種評估指標(biāo)均低于5%,在合理范圍內(nèi),從檢測精度方面而言文章方法可作為可靠的檢測技術(shù)嘗試投入應(yīng)用。
為了突出文章方法檢測軟件漏洞的性能優(yōu)勢,采用基于網(wǎng)絡(luò)爬蟲的漏洞檢測方法、基于關(guān)聯(lián)分析的漏洞檢測方法進(jìn)行對比測試。測試樣本集1~5中分別存在5個(gè)、4個(gè)、5個(gè)、3個(gè)、6個(gè)軟件漏洞,采用3種方法進(jìn)行漏洞檢測,記錄各方法檢測漏洞的實(shí)際數(shù)量與測試用時(shí),如表2所示。
表2 三種方法的軟件漏洞檢測結(jié)果
表2數(shù)據(jù)顯示,文章方法基本可以準(zhǔn)確檢測出樣本集中的漏洞信息,只有第5個(gè)樣本集的檢測結(jié)果存在偏差,實(shí)際軟件漏洞為6個(gè),文章方法檢測出5個(gè),整體的漏洞檢測率約為95.7%,耗時(shí)645s;基于網(wǎng)絡(luò)爬蟲的漏洞檢測方法成功檢測出15個(gè)軟件漏洞,檢測率約為65.2%,檢測漏洞的時(shí)間開銷高達(dá)1012s,無論在檢測準(zhǔn)確率還是效率方面都沒有達(dá)到可行標(biāo)準(zhǔn)。同理,基于關(guān)聯(lián)分析的漏洞檢測方法檢測率為73.9%,檢測漏洞的時(shí)間開銷為894s,同樣沒有達(dá)到可推廣應(yīng)用的標(biāo)準(zhǔn)。
相比之下,文章方法的檢測效率與檢測準(zhǔn)確度均較為理想,這是因?yàn)槲恼路椒ɡ枚询B自編碼器構(gòu)建深度學(xué)習(xí)架構(gòu),以編碼與解碼的方式對輸入樣本進(jìn)行深層次處理,采用多個(gè)自編碼器連接形成堆疊自編碼器架構(gòu),在模型訓(xùn)練階段基于堆疊自編碼器預(yù)訓(xùn)練策略與微調(diào)策略修正模型的性能。這種方法超越了淺層神經(jīng)網(wǎng)絡(luò)分類方法對數(shù)據(jù)特征學(xué)習(xí)的有效性,深入挖掘軟件漏洞代碼數(shù)據(jù)中的特征規(guī)律,因此在檢測精度和時(shí)間開銷上達(dá)到了理想狀態(tài)。
針對計(jì)算機(jī)軟件開發(fā)中漏洞檢測的復(fù)雜性與多特征性質(zhì),將深度學(xué)習(xí)算法引入到軟件安全漏洞檢測方案中。首先,該研究構(gòu)建具有漏洞信息的代碼數(shù)據(jù)集,作為深度學(xué)習(xí)模型的訓(xùn)練與檢測樣本;然后,采用多個(gè)自編碼器連接形成堆疊自編碼器模型,經(jīng)過預(yù)訓(xùn)練與微調(diào)后,得到一個(gè)較為完備的堆疊自編碼器軟件漏洞檢測模型。
為了提高檢測方案與軟件漏洞特征、安全信息的緊密度,增強(qiáng)檢測方案的有效性,未來關(guān)于軟件安全性能檢測的工作應(yīng)做到如下方面:其一,立足于軟件漏洞類型特征分析角度,在掌握軟件運(yùn)行的安全特性基礎(chǔ)上設(shè)計(jì)安全檢測算法。其二,了解軟件漏洞的具體分類,構(gòu)建多分類識別模型,將軟件當(dāng)前存在的漏洞類型信息呈現(xiàn)在檢測結(jié)果之中。