董 健,馮瑩瑩
(1. 鄭州科技學(xué)院信息工程學(xué)院,河南 鄭州 450064;2. 阜陽師范大學(xué)信息工程學(xué)院,安徽 阜陽 236041)
軟件作為一種計算機語言和命令的集合組織,常規(guī)情況可分為三種:系統(tǒng)軟件、應(yīng)用軟件和處于二者之間的中間件[1]?,F(xiàn)階段計算機普及和發(fā)展離不開軟件的支持,其安全性和可用性對系統(tǒng)和用戶來說是極為重要的,若軟件內(nèi)存在缺陷或漏洞,當(dāng)非法者進行異常操作攻擊授權(quán)訪問模塊時,系統(tǒng)可用性和內(nèi)部信息機密性會大幅度降低,并產(chǎn)生連鎖反應(yīng),嚴(yán)重會導(dǎo)致應(yīng)用網(wǎng)絡(luò)癱瘓[2]。缺陷或漏洞被總稱為軟件脆弱性[3],軟件開發(fā)人員為提高其穩(wěn)定程度,研究得出一系列嚴(yán)格安全設(shè)計準(zhǔn)則和操作流程[4],但軟件本身組織程序就復(fù)雜,在多源應(yīng)用環(huán)境中,漏洞總能從開發(fā)人員從未考慮的角度或維度涌出,嚴(yán)重威脅網(wǎng)絡(luò)系統(tǒng)安全。
為此相關(guān)人員提出如下解決方法,例如胡建偉[5]等人提出了一種改進ASTNN網(wǎng)絡(luò)的PHP代碼漏洞挖掘方法。針對漏洞挖掘規(guī)則單一問題,通過抽象語法樹深度分析軟件編碼語義,利用子樹分類,將分類結(jié)果輸入至深度神經(jīng)網(wǎng)絡(luò)中層層迭代輸出挖掘結(jié)果;惠子青[6]等人提出了一種動態(tài)加權(quán)組合神經(jīng)網(wǎng)絡(luò)模型的軟件測試方法。針對軟件程序的多樣性,設(shè)置動態(tài)加權(quán)組合模型,明確不同類型軟件漏洞所占比重,動態(tài)調(diào)節(jié)神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)輸出結(jié)果,具有更好的泛化性能。但是這兩種方法均過于遵循全面挖掘規(guī)則,面對大規(guī)模軟件系統(tǒng)時系統(tǒng)開銷過大,難以實現(xiàn)多個軟件并行挖掘。
為此,本文引入機器學(xué)習(xí)算法,在海量數(shù)據(jù)中學(xué)習(xí)軟件編程規(guī)則,使漏洞挖掘方法能夠利用已有規(guī)則進行自決策、分類和全局預(yù)測,組建漏洞信息資源庫,最后根據(jù)歐式距離完成多類漏洞的并行挖掘工作。
若軟件存在漏洞則表示軟件系統(tǒng)不再可靠,所能產(chǎn)生的后果為:軟件錯誤,一般由在開發(fā)軟件過程中產(chǎn)生的人為錯誤引起;軟件差錯,描述軟件運行結(jié)果和設(shè)想結(jié)果不一致;軟件失效,表示軟件的部分或全部應(yīng)用功能無法實現(xiàn)。
這些都會導(dǎo)致軟件無法正常運行,降低用戶體驗。但目前學(xué)術(shù)界并沒有統(tǒng)一定義能完全劃分多類漏洞,且軟件漏洞本身也跟隨科技發(fā)展不斷變化和細分,常用劃分等級和類型如表1所示。
表1 常用軟件漏洞等級和類型明細
為此,本文綜合表1觀點,從軟件漏洞的表象和本質(zhì)出發(fā)[7],定義基于機器學(xué)習(xí)的軟件多類漏洞并行挖掘主要面向影響安全使用的部分,且該漏洞能夠被非法者攻擊和利用,導(dǎo)致系統(tǒng)機密性和用戶隱私受到威脅,產(chǎn)生嚴(yán)重非預(yù)期危害。以設(shè)計、開發(fā)、運行角度將軟件多類漏洞分為:
1)軟件設(shè)計漏洞,是指發(fā)開人員在軟件生成和組織過程中,未考慮到某部分規(guī)則或者從錯誤角度出發(fā)建立的規(guī)則,而形成的漏洞。
2)軟件編碼漏洞,是指編碼人員撰寫程序不規(guī)范、邏輯錯誤引發(fā)的安全漏洞,進一步可分為:打破內(nèi)存漏洞,描述用戶能非預(yù)期進行訪問、執(zhí)行權(quán)限不足的操作頁面等行為;混亂邏輯漏洞[8],描述編碼存在問題,程序沒有按照指令進行工作,部分安全機制和權(quán)限被繞過。
3)軟件配置漏洞,是指由于存在危險內(nèi)在配置文件、外在不良硬件環(huán)境引發(fā)的安全漏洞。攻擊者可遠距離非法訪問和攻擊用戶隱私信息,導(dǎo)致機密數(shù)據(jù)被泄露。
基于軟件漏洞等級和類型可知,軟件多類漏洞定義是抽象意義上的值,無法作為量化數(shù)據(jù)輸入至機器學(xué)習(xí)算法中進行并行挖掘,為此,采集已有多類漏洞數(shù)據(jù)集,按序列映射到特征向量空間,明確不同類漏洞對應(yīng)的屬性特征值??紤]到不同開發(fā)和編碼人員思想和行為的多樣性[9],將海量漏洞中代碼函數(shù)、參數(shù)、目標(biāo)變量等信息進行歸一化預(yù)處理,憑借統(tǒng)一格式方便計算。
首先過濾樣本數(shù)據(jù)集合中與軟件漏洞無聯(lián)系的非ASⅡ字節(jié),將代碼函數(shù)、參數(shù)、目標(biāo)變量等信息一一映射到符號名稱中,統(tǒng)一編碼命名[10,11],經(jīng)過歸一化處理后,投影到特征向量空間中。通過自然文本語言量化不同類型漏洞中關(guān)鍵區(qū)域出現(xiàn)頻率,即可得到對應(yīng)特征值。
假設(shè)通過掃描系統(tǒng)得到任意軟件X存在的代碼函數(shù)序列為X={x1,x2,…,xn},對應(yīng)任意源代碼文件的關(guān)鍵節(jié)點的結(jié)合表示為A,且能夠組建X詞典A={a1,a2,…,am},n、m均表示不為0的整數(shù)。映射過程表示為
ψ(x)=λ(x,a)·υa,A
(1)
(2)
式中,υa,A表示逆文檔的術(shù)語頻率參數(shù),可消除一部分軟件漏洞序列的相似度,降低非發(fā)生漏洞的關(guān)鍵節(jié)點對漏洞特征提取影響。計算公式為
(3)
式中,dfa表示為節(jié)點a出現(xiàn)的文件次數(shù),tfa,A描述在集合A中出現(xiàn)次數(shù)dfa與節(jié)點總數(shù)之間的比值。
以軟件漏洞信息的歸一化處理結(jié)果為基礎(chǔ),引入機器學(xué)習(xí),完成軟件數(shù)據(jù)特征的分類。軟件數(shù)據(jù)涵蓋了漏洞并行挖掘所需全部信息,但軟件編程復(fù)雜、信息維度高,為提高挖掘算法性能,使用機器學(xué)習(xí)中KNN(K-NearestNeighbor)深度聚類算法[12,13],明確樣本數(shù)據(jù)的鄰近函數(shù)域,融合自動編碼器壓縮特征。
深度聚類過程主要包括軟件特征提取、特征降維、特征聚類三步驟。特征提取的同時還要去除干擾噪聲和重復(fù)、缺失數(shù)據(jù)。若待挖掘軟件樣本數(shù)量是M,集合中第α個特征的值表示為Q=(qα1,qα2,…,qαM),樣本規(guī)范化表示為
(4)
深度學(xué)習(xí)規(guī)范化后特征內(nèi)抽象信息,將高維數(shù)據(jù)重構(gòu)到低維空間內(nèi),提高挖掘算法性能。這步驟分為:輸入層、輸出層、隱含層,降維過程為
z=fθ(q)=?(Wq+b)
(5)
p=gθ′(z)=?′(Wz+b′)
(6)
式中,q表示輸入特征,p表示降維后特征,fθ(q)表示輸入至隱含層中的非線性函數(shù),用來處理輸入的無關(guān)聯(lián)特征,z表示輸入至隱含層的中間結(jié)果,gθ′(z)表示輸入至輸出層中的非線性函數(shù),用來處理隱含層輸入的無關(guān)聯(lián)特征。?、?′描述不同層激活函數(shù),W、W′描述特征編碼、解碼權(quán)重,b、b′描述不同層偏移向量。
考慮到本文為基于多類漏洞的并行挖掘算法,將低維特征以不同“特征源”進行深度聚類,以軟件代碼片段間的差異特征作為聚類指標(biāo)。j為待挖掘樣本q中的任意特征種類集合,o表示聚類中心,深度聚類可描述為
(7)
式中,sim(q,oα)表示q和oα之間的余弦距離。
利用分類挖掘算法能夠分類并識別不同“特征源”的最近鄰居特征集合。
將軟件劃分為不同特征源后,使用相似性度量方法比較計算特征源和多類漏洞信息資源庫相似程度,即度量二者中任意數(shù)據(jù)pl和xk間歐式距離[14]為
(8)
式中,r=(1,2,…,j)。
由于不同特征源之間的量綱是一致的,所以難以度量出不同特征間細微差距,為此,使用式(4)規(guī)范化處理去除其量綱限制,并行挖掘出準(zhǔn)確軟件漏洞問題解[15]。此時不同特征源間規(guī)范化歐式距離為
(9)
為驗證基于機器學(xué)習(xí)的軟件多類漏洞并行挖掘方法的有效性,進行仿真。選取來自開源數(shù)據(jù)庫Tera-PROMISE的4組NASA軟件多類漏洞數(shù)據(jù)集作為實驗樣本,任意數(shù)據(jù)集包含漏洞常量、干擾、重復(fù)等特征都不一致。具體如表2所示。
表2 實驗數(shù)據(jù)集
在軟件漏洞挖掘?qū)崿F(xiàn)過程中,必須挑選指標(biāo)來驗證所提方法挖掘性能。評價挖掘結(jié)果可描述為一個二分類問題,即挖掘無錯誤為正例、有錯誤為負例,各個指標(biāo)的具體計算公式為:
1)精準(zhǔn)度描述軟件漏洞被正確挖掘出的數(shù)量與所有被挖掘的數(shù)量的比值,計算公式為
(10)
2)召回率描述軟件漏洞被正確挖掘出的數(shù)量與真實軟件漏洞數(shù)量的比值,計算公式為
(11)
3)F1值描述召回率與精準(zhǔn)度間的調(diào)和平均值,因為二者間存在非線性關(guān)系,會存在召回率高但精準(zhǔn)度低的情況。這樣F1值越大,表示二者值不一致情況越小,計算過程為
(12)
式中,真正例TP(實際結(jié)果為漏洞且被挖掘出的數(shù)據(jù))、真負例TN(實際結(jié)果為漏洞未被挖掘出的數(shù)據(jù))、假正例FP(實際結(jié)果不是漏洞卻被挖掘出的數(shù)據(jù))、假負例FN(實際結(jié)果不是漏洞也沒被挖掘出的數(shù)據(jù))。
將4組實驗數(shù)據(jù)集內(nèi)數(shù)據(jù)放置在低維空間內(nèi),完成特征深度聚類,文獻[5]提出的基于改進ASTNN網(wǎng)絡(luò)的軟件漏洞挖掘方法、文獻[6]提出的基于加權(quán)組合模型的軟件漏洞挖掘方法、研究方法分類結(jié)果如圖1所示。圖中,黑點為CM1數(shù)據(jù)集、白點為CM2數(shù)據(jù)集、黑矩形為KC2數(shù)據(jù)集、黑三角為MW1數(shù)據(jù)集。
圖1 不同方法的軟件特征聚類結(jié)果對比
觀察圖1可知,CM1、CM2軟件數(shù)據(jù)相似程度高,加權(quán)組合模型在分類過程中出現(xiàn)錯分情況,改進ASTNN網(wǎng)絡(luò)方法未發(fā)生錯分但二者聚類中心聚類過近,在后續(xù)多類漏洞挖掘中很難提供明確特征信息。相比之下,所提方法,不僅分類邊界清晰、聚集,CM1、CM2聚類中心距離最遠,最大程度避免了后期錯誤漏洞挖掘情況發(fā)生。
三種方法挖掘結(jié)果的F1值如圖2所示。
圖2 不同方法的F1值對比
根據(jù)圖2能夠看出,研究方法F1值隨著實驗次數(shù)增加出現(xiàn)了一定震蕩,總體穩(wěn)定在[0.86,0.89]之間,文獻方法相比F1值低且更加穩(wěn)定。說明所提方法召回率高且挖掘精準(zhǔn),二者值相差較小、均勻調(diào)和。
ROC曲線下面積為AUC,取值范圍在為比較挖掘方法在[0,1]之間,通常會大于0.5,值越大表示挖掘算法的錯誤負例越少,性能越好。三種方法挖掘結(jié)果AUC值如圖3所示。
圖3 不同方法的AUC值對比
根據(jù)圖3可知,能夠看出對于不同數(shù)據(jù)集,研究方法最終AUC值均高于文獻方法,且在特征數(shù)初期上升趨勢明顯,隨著特征數(shù)增加曲線趨于平穩(wěn),本次實驗結(jié)果可證明所提方法錯誤負例少、誤報率低。
提出一種基于機器學(xué)習(xí)的軟件多類漏洞并行挖掘方法。建立多類漏洞資源數(shù)據(jù)庫,通過深度聚類和歐式距離加快挖掘方法自學(xué)習(xí)速度,經(jīng)過仿真證明所提方法面向大規(guī)模多類型軟件系統(tǒng)時,也能精準(zhǔn)、快速挖掘出漏洞信息??蓪⒀芯糠椒☉?yīng)用于軟件開發(fā)設(shè)計、編碼程序、仿真測試以及發(fā)布使用等多個環(huán)節(jié),全面考慮不同階段可能出現(xiàn)的漏洞問題。