顧風(fēng)軍
(中國人民解放軍總醫(yī)院第四醫(yī)學(xué)中心信息室,北京 100089)
計算機(jī)技術(shù)快速發(fā)展,使得軟件在數(shù)字化裝備中占有越來越重要的地位,對于軟件可靠性的要求也越來越高。然而,大多數(shù)軟件均會存在一些漏洞,使得黑客利用這些漏洞發(fā)起攻擊成為了可能,因此有效識別軟件漏洞是當(dāng)前亟待解決的問題。針對軟件漏洞識別這一問題,有學(xué)者提出基于大數(shù)據(jù)技術(shù)的軟件安全漏洞識別方法,構(gòu)建數(shù)據(jù)采集模型,并對數(shù)據(jù)進(jìn)行融合處理,采用大數(shù)據(jù)技術(shù)構(gòu)建軟件安全漏洞信息特征提取模型,從而識別漏洞,該方法較為簡單,擴(kuò)展性不強(qiáng)[1];也有學(xué)者提出了基于可變形卷積神經(jīng)網(wǎng)絡(luò)的軟件漏洞識別方法,搭建可變形卷積神經(jīng)網(wǎng)絡(luò),結(jié)合可變形卷積的池化變形形式發(fā)現(xiàn)軟件漏洞特征,實(shí)現(xiàn)漏洞識別[2]。雖然這種方法執(zhí)行效率很高,但是識別效果差。
由于靜態(tài)軟件安全漏洞路徑數(shù)量多,導(dǎo)致識別難度增加,因此為了有效解決這一問題,引入多核集成學(xué)習(xí),設(shè)計了一種新的靜態(tài)軟件安全漏洞識別方法。
為了使多核集成學(xué)習(xí)[3]分類效果達(dá)到最佳,需先訓(xùn)練靜態(tài)軟件數(shù)據(jù)。假設(shè)未標(biāo)記的模塊為Ai,對于該模塊上的偽類別標(biāo)簽oi,通過劃分標(biāo)簽獲取有無缺陷模塊。則如下公式成立:
式(1)中,i表示操作次數(shù);pi、分別表示劃分為有缺陷和無缺陷模塊的概率[4]。根據(jù)式(1)計算結(jié)果展開排序,按照排序大小依次選擇位于前列ci未被標(biāo)記的模塊,再結(jié)合已經(jīng)標(biāo)記的模塊,由此獲取靜態(tài)軟件初始訓(xùn)練集[5]。
對訓(xùn)練集進(jìn)行訓(xùn)練得到了多核集成學(xué)習(xí)分類器,根據(jù)其性能對訓(xùn)練樣本進(jìn)行分類,從而保證數(shù)據(jù)分類效率與質(zhì)量。在訓(xùn)練過程中調(diào)整數(shù)據(jù)分布,以達(dá)到負(fù)載均衡的目標(biāo),然后進(jìn)行下一步的訓(xùn)練[6]。如此反復(fù),直至基本的學(xué)習(xí)方案數(shù)目達(dá)到預(yù)定值為止,將多種權(quán)重的基礎(chǔ)學(xué)習(xí)方案進(jìn)行合并,獲取多核集成學(xué)習(xí)分類器[7]。
多核集成學(xué)習(xí)分類器如圖1 所示。
圖1 多核集成學(xué)習(xí)分類器
由圖1 可知,采用多樣本集的抽樣方法,依據(jù)樣本權(quán)值分布屬性構(gòu)造一個基本的學(xué)習(xí)分類器,從而獲取多核集成學(xué)習(xí)分類器,以期為后續(xù)的數(shù)據(jù)分類奠定堅實(shí)的基礎(chǔ)[8]。
使用多核集成學(xué)習(xí)中的boosting 的串行集成方法,從多核集成學(xué)習(xí)分類器開始加強(qiáng),通過加權(quán)訓(xùn)練獲取數(shù)據(jù)權(quán)重。假設(shè)有k個靜態(tài)軟件數(shù)據(jù),具體學(xué)習(xí)過程如下:
步驟1:給定一個決策表,確定靜態(tài)軟件數(shù)據(jù)屬性為{λ1,λ2,…,λi},根據(jù)隨機(jī)化鄰域約簡方式得到一組約簡后的多核靜態(tài)軟件數(shù)據(jù)屬性集合{δ1,δ2,…,δi},使用覆蓋約簡方式能夠得到一組規(guī)則集{L1,L2,…,Li}[9]。在既定的規(guī)則集上,獲取靜態(tài)軟件數(shù)據(jù)種類[10]。
步驟2:對原分類器的錯誤進(jìn)行改進(jìn),用總數(shù)減去錯誤數(shù)據(jù)即為正確數(shù)據(jù),將正確數(shù)據(jù)作為下一次分類訓(xùn)練的樣本。將新樣本添加到分類器中,經(jīng)過迭代獲取最低錯誤率的訓(xùn)練結(jié)果[11]。
步驟3:將訓(xùn)練數(shù)據(jù)劃分為兩個不相交的子集。
步驟4:用訓(xùn)練集的部分?jǐn)?shù)據(jù)訓(xùn)練多個不同的子分類器。
步驟5:利用訓(xùn)練集中的其他數(shù)據(jù)訓(xùn)練多個子分類器。
步驟6:將子分類器的識別結(jié)果當(dāng)作輸入,將樣本標(biāo)簽當(dāng)作學(xué)習(xí)目標(biāo)[12]。
步驟7:經(jīng)過學(xué)習(xí)器A,得到的正確數(shù)據(jù)量為a,錯誤數(shù)為a′,將錯誤數(shù)據(jù)輸入到學(xué)習(xí)器B 中進(jìn)行學(xué)習(xí)。經(jīng)過學(xué)習(xí)器B,得到的正確數(shù)據(jù)為b條,錯誤數(shù)據(jù)為b′條,將錯誤數(shù)據(jù)輸入到學(xué)習(xí)器C 中進(jìn)行學(xué)習(xí)。經(jīng)過學(xué)習(xí)器C,得到的正確數(shù)據(jù)為c條,錯誤數(shù)據(jù)為c′條,將錯誤數(shù)據(jù)輸入到學(xué)習(xí)器D 中進(jìn)行學(xué)習(xí)[13]。以此類推,將所有靜態(tài)軟件數(shù)據(jù)進(jìn)行串行集成,將所有正確學(xué)習(xí)結(jié)果的數(shù)值相加,得到正確靜態(tài)軟件訓(xùn)練數(shù)據(jù)。
2.2.1 多核集成學(xué)習(xí)漏洞數(shù)據(jù)分類
在獲取初始訓(xùn)練集后,利用已知核函數(shù)將訓(xùn)練集中有、無缺陷模塊的標(biāo)簽分別標(biāo)記為1 和0。分類誤差越小則說明分類器分類效果越好,經(jīng)過多次boosting過程獲取分類結(jié)果,多核集成學(xué)習(xí)分類器為:
式(2)中,Δz表示正確分類與未正確分類的誤差;表示單核分類器;t、M分別表示訓(xùn)練時長和最大操作次數(shù)。
以boosting 結(jié)果作為訓(xùn)練依據(jù)更新數(shù)據(jù)集[14]。充分考慮數(shù)據(jù)集有無缺陷問題,通過i次boosting 集成處理來調(diào)整有、無缺陷模塊權(quán)重分量。針對有缺陷模塊,使錯誤識別權(quán)重分量分別保持增加和不變狀態(tài);針對無缺陷模塊,正確識別權(quán)重分量分別保持不變和減小狀態(tài)。經(jīng)過集成處理能夠有效降低識別過程中出現(xiàn)的錯誤次數(shù),經(jīng)過多次集成處理后,獲取最終靜態(tài)軟件安全漏洞數(shù)據(jù)分類結(jié)果[15]。
2.2.2 漏洞數(shù)據(jù)識別模型構(gòu)建
在靜態(tài)軟件安全漏洞識別過程中,結(jié)合漏洞數(shù)據(jù)分類結(jié)果,計算靜態(tài)軟件安全漏洞數(shù)據(jù)密度[16],構(gòu)建漏洞數(shù)據(jù)識別模型,實(shí)現(xiàn)靜態(tài)軟件安全漏洞識別。具體步驟如下:
建立靜態(tài)軟件中安全漏洞識別優(yōu)化模型過程中,計算靜態(tài)軟件中安全漏洞數(shù)據(jù)的密度為:
式(3)中,ND表示已經(jīng)獲知的靜態(tài)軟件安全漏洞數(shù)據(jù)數(shù)量;MC表示靜態(tài)軟件代碼總行數(shù);wi(i)表示靜態(tài)軟件安全漏洞數(shù)據(jù)歸一化處理權(quán)重。
在利用所構(gòu)建的靜態(tài)軟件安全漏洞識別模型過程中,使用多核集成學(xué)習(xí)方法將靜態(tài)軟件中漏洞數(shù)據(jù)權(quán)重中相鄰兩個子集作為模型輸出值域,構(gòu)建的漏洞數(shù)據(jù)識別模型為:
式(4)中,ρminA,B、ρmaxA,B分別為集合A和B的靜態(tài)軟件安全漏洞數(shù)據(jù)密度;yA、yB分別表示集合A和B的輸出值域。
2.2.3 漏洞識別流程設(shè)計
結(jié)合構(gòu)建的漏洞數(shù)據(jù)識別模型,設(shè)計漏洞識別流程,如圖2 所示。
圖2 漏洞識別流程
通過圖2 所示的識別流程,能夠得到精準(zhǔn)的靜態(tài)軟件安全漏洞識別結(jié)果。
由于Internet Socket 的安全問題經(jīng)常會引發(fā)網(wǎng)絡(luò)高危安全事故,在這些問題中,百度的Wormhole 蟲洞安全問題最為突出。Internet Socket的Wormhole 經(jīng)常出現(xiàn)在由百度公司提供的Moplus 開發(fā)工具中,該工具被植入了數(shù)以萬計的應(yīng)用程序。Wormhole 漏洞允許遠(yuǎn)程攻擊者在攻擊時插入任何聯(lián)系人,發(fā)送虛假的消息,把當(dāng)?shù)氐奈募蟼鞯竭h(yuǎn)程服務(wù)器。
Internet Socket 安全執(zhí)行時出現(xiàn)的漏洞示例,如圖3 所示。
圖3 Internet Socket安全漏洞示例
由圖3 可知,使用Internet Socket 開啟TCP 端口40310,預(yù)設(shè)監(jiān)聽所有的局域網(wǎng)IP 位址。遠(yuǎn)程攻擊者可以將數(shù)據(jù)經(jīng)由Socket 地址(LAN IP 位址加上端口號)傳送至應(yīng)用程序中,這種信息可以通過諸如反編譯的方式被發(fā)現(xiàn),而且很容易被遠(yuǎn)程攻擊者破解。
實(shí)驗裝置結(jié)構(gòu)如圖4 所示。
圖4 實(shí)驗裝置結(jié)構(gòu)
如圖4 所示,該實(shí)驗裝置主要包括過濾器、分析器、特征提取器三個主要組件。這一實(shí)驗裝置將安卓的應(yīng)用程序集作為輸入,針對大型安卓系統(tǒng)中存在的安全缺陷問題,采用過濾器過濾非相關(guān)程序,從而提高了安全漏洞檢測能力。過濾器將應(yīng)用程序與現(xiàn)存的安全性弱點(diǎn)模式相匹配,而只有匹配的應(yīng)用程序會加入到API過濾器中,以此保證過濾精度與效率。
分別使用基于大數(shù)據(jù)技術(shù)的識別方法、基于大數(shù)據(jù)技術(shù)的識別方法、基于可變形卷積神經(jīng)網(wǎng)絡(luò)的識別方法,將漏洞識別時間和捕獲危險執(zhí)行路徑數(shù)作為評價指標(biāo),對比分析漏洞識別效果。
1)漏洞識別時間
對比三種方法的漏洞識別時間,如圖5 所示。
圖5 三種方法漏洞識別時間對比分析
由圖5 可知,三種方法在3-4、6-7 環(huán)節(jié)均呈現(xiàn)出了漏洞識別時間變化幅度變大的趨勢,其中使用基于大數(shù)據(jù)技術(shù)的識別方法在3-4 環(huán)節(jié)最大漏洞識別時間為14.5 ms;使用基于可變形卷積神經(jīng)網(wǎng)絡(luò)的識別方法在3-4 環(huán)節(jié)最大漏洞識別時間為13.5 ms;使用基于多核集成學(xué)習(xí)識別方法在3-4 環(huán)節(jié)最大漏洞識別時間為4 ms。
2)捕獲危險執(zhí)行路徑數(shù)
對比三種方法捕獲危險執(zhí)行路徑數(shù),如表1所示。
表1 三種方法捕獲危險執(zhí)行路徑數(shù)對比
由表1 可知,采用基于大數(shù)據(jù)技術(shù)的識別方法、基于可變形卷積神經(jīng)網(wǎng)絡(luò)的識別方法,捕獲危險執(zhí)行路徑數(shù)均超過了理想值,而使用基于多核集成學(xué)習(xí)識別方法所捕獲危險執(zhí)行路徑數(shù)均未超過理想值,說明該方法的靜態(tài)軟件安全漏洞識別質(zhì)量更高。
通過上述分析結(jié)果可知,使用基于多核集成學(xué)習(xí)識別方法,漏洞識別時間短、捕獲危險執(zhí)行路徑數(shù)在理想值范圍內(nèi),說明該方法對漏洞識別效果較好。
構(gòu)建基于多核集成學(xué)習(xí)的靜態(tài)軟件安全漏洞識別模型,以解決漏洞識別不精度低且效果差的問題。主要利用多核集成學(xué)習(xí)器集成多個分類結(jié)果,結(jié)合分類結(jié)果實(shí)現(xiàn)靜態(tài)軟件安全漏洞識別。通過實(shí)驗驗證了所提出方法的識別結(jié)果精準(zhǔn),且效果好。
使用多核集成學(xué)習(xí)方法雖然能夠為靜態(tài)軟件安全漏洞識別提供準(zhǔn)確高效的方案,但是仍然避免不了一些需要繼續(xù)完善的問題。后期需要從類別分布不平衡問題入手,為提高識別結(jié)果全面性提供重要的技術(shù)支持。