顧風軍
(中國人民解放軍總醫院第四醫學中心信息室,北京 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 可知,采用基于大數據技術的識別方法、基于可變形卷積神經網絡的識別方法,捕獲危險執行路徑數均超過了理想值,而使用基于多核集成學習識別方法所捕獲危險執行路徑數均未超過理想值,說明該方法的靜態軟件安全漏洞識別質量更高。
通過上述分析結果可知,使用基于多核集成學習識別方法,漏洞識別時間短、捕獲危險執行路徑數在理想值范圍內,說明該方法對漏洞識別效果較好。
構建基于多核集成學習的靜態軟件安全漏洞識別模型,以解決漏洞識別不精度低且效果差的問題。主要利用多核集成學習器集成多個分類結果,結合分類結果實現靜態軟件安全漏洞識別。通過實驗驗證了所提出方法的識別結果精準,且效果好。
使用多核集成學習方法雖然能夠為靜態軟件安全漏洞識別提供準確高效的方案,但是仍然避免不了一些需要繼續完善的問題。后期需要從類別分布不平衡問題入手,為提高識別結果全面性提供重要的技術支持。