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