近年來,深度學(xué)習(xí)模型(DLM)在軟件漏洞檢測領(lǐng)域的應(yīng)用探索引起了行業(yè)廣泛關(guān)注,在某些情況下,利用DLM模型能夠獲得超越傳統(tǒng)靜態(tài)分析工具的檢測效果。然而,雖然研究人員對DLM模型的價(jià)值預(yù)測讓人驚嘆,但很多人對這些模型本身的特性并不十分清楚。
為了從應(yīng)用角度對DLM模型在漏洞檢測場景下的能力與價(jià)值進(jìn)行驗(yàn)證,Steenhoek等人發(fā)表了《An Empirical Study of Deep Learning Models for Vulnerability Detection》(《漏洞檢測的深度學(xué)習(xí)模型實(shí)證研究》)論文。該論文全面回顧了近年來公開發(fā)表的DLM在源代碼漏洞檢測方面的相關(guān)研究,并實(shí)際復(fù)現(xiàn)了多個(gè)SOTA深度學(xué)習(xí)模型(見表1)。通過將這些模型在兩個(gè)廣泛使用的漏洞檢測數(shù)據(jù)集上進(jìn)行充分實(shí)驗(yàn),論文作者從模型能力、訓(xùn)練數(shù)據(jù)和模型解釋等方面進(jìn)行了6個(gè)專項(xiàng)課題的研究分析。
為了驗(yàn)證模型的準(zhǔn)確性,作者使用了與原始資料中相同的數(shù)據(jù)集和參數(shù)設(shè)置,對這些模型的運(yùn)行結(jié)果進(jìn)行了再次測試驗(yàn)證(見表 II)。其中A、P、R、F分別代表深度學(xué)習(xí)中常見的準(zhǔn)確率(accuracy)、精確度(precision)、召回率(recall)和F1分?jǐn)?shù)。總體而言,復(fù)現(xiàn)的結(jié)果差異在合理范圍內(nèi)(上下2%)。
需要說明的是,為了更精確地比較模型,作者優(yōu)化了模型的實(shí)現(xiàn),使它們可以同時(shí)支持Devign和MSR數(shù)據(jù)集。然而,在本論文所列舉的研究問題分析中,作者僅使用了上述模型中的9個(gè)而排除了VulDeeLocator和SeSyVR兩種模型,原因是它們不容易針對Devign和MSR數(shù)據(jù)集進(jìn)行優(yōu)化。通過對深度學(xué)習(xí)漏洞檢測模型進(jìn)行實(shí)證研究,作者詳細(xì)分析了六個(gè)研究問題,并在以下方面取得收獲:
RQ1:不同模型之間的漏洞檢測結(jié)果是否具有一致性?單個(gè)模型的多次運(yùn)行和多個(gè)模型間的差異點(diǎn)是什么?
研究動(dòng)機(jī):揭示深度學(xué)習(xí)模型漏洞檢測結(jié)果的不確定性,幫助研究人員更好地理解這些模型的表現(xiàn)。
實(shí)驗(yàn)設(shè)計(jì):實(shí)驗(yàn)人員在Devign數(shù)據(jù)集上使用三個(gè)不同的隨機(jī)種子對11種DLM模型進(jìn)行訓(xùn)練,然后測量它們在漏洞檢測方面的性能,并比較它們之間的一致性。作者測量了在所有三個(gè)隨機(jī)種子下具有相同二進(jìn)制標(biāo)簽的輸入所占的百分比,并將其稱為“穩(wěn)定輸入”。然后,作者比較了這些穩(wěn)定輸入在不同模型之間的一致性。
研究發(fā)現(xiàn):研究發(fā)現(xiàn),不同模型在漏洞檢測方面的表現(xiàn)存在一定的差異性?,平均有34.9%的測試數(shù)據(jù)(30.6%總數(shù)據(jù))因?yàn)殡S機(jī)種子的不同而產(chǎn)生不同的預(yù)測結(jié)果。其中,基于屬性圖(Property Graph)的GNN模型的差異性排名在前兩位,而ReVeal模型在50%的測試數(shù)據(jù)中輸出會(huì)在不同運(yùn)行之間發(fā)生變化。相比之下,Code2Vec模型表現(xiàn)出最小的變異性。此外,作者還發(fā)現(xiàn),不穩(wěn)定輸入與更多錯(cuò)誤預(yù)測成正相關(guān)。
總的來看,雖然每次運(yùn)行結(jié)果之間存在預(yù)測差異,但F1測試分?jǐn)?shù)并沒有顯著變化,并且平均標(biāo)準(zhǔn)差僅為2.9(見?表 III)。因此,雖然當(dāng)使用不同的隨機(jī)種子來訓(xùn)練和測試模型時(shí),模型的性能可能會(huì)有所變化,但這種變化應(yīng)該是可以接受的,并且不會(huì)對整體性能產(chǎn)生太大影響。
另外,?不同架構(gòu)的DLM模型在測試結(jié)果上表現(xiàn)出了較低的一致性:因?yàn)橹挥?%的測試數(shù)據(jù)(和7%的總數(shù)據(jù))被所有模型所認(rèn)可。三個(gè)GNN模型僅在20%的測試示例(和25%的總數(shù)據(jù))上達(dá)成了一致,而三個(gè)表現(xiàn)最佳的transformer模型(LineVul、PLBART和VulBERTa-CNN)在34%的測試數(shù)據(jù)(和44%的總數(shù)據(jù))上達(dá)成了一?致。但是,當(dāng)比較所有5個(gè)transformer模型時(shí),只有22%的測試示例(和29%的總數(shù)據(jù))是一致的(見表 IV)。不同模型之間的低一致性意味著:當(dāng)沒有基準(zhǔn)標(biāo)簽時(shí),跨模型比較性能的差異測試方法可能意?義非常有限。
RQ2:是否存在某些類型的漏洞更容易被檢測?是否應(yīng)該為每種類型的漏洞建立單獨(dú)模型,還是訓(xùn)練一個(gè)可以檢測所有漏洞的模型?哪種方式訓(xùn)練出的模型性能更好呢?
研究動(dòng)機(jī):研究人員將漏洞分為不同的類型,探索這些類型對模型性能和準(zhǔn)確性的影響。這有助于更好地理解 DLM處理不同類型漏洞的表現(xiàn),并為改進(jìn)模型提供指導(dǎo)。
實(shí)驗(yàn)設(shè)計(jì):作者借助CWE漏洞分類系統(tǒng),把漏洞數(shù)據(jù)分成5類(見表 V)。然后,使用多個(gè)DLM來檢測這?些漏洞,從而對比它們在不同漏洞類型上的表現(xiàn)。為了減少偏差,研究人員進(jìn)行了交叉驗(yàn)證。具體的分類包括:緩沖區(qū)溢出(Buffer overflow)、值錯(cuò)誤(Value error)、資源錯(cuò)誤(Resource error)、輸入驗(yàn)證錯(cuò)?誤(Input validation error)、特權(quán)升級(jí)(Privilege escalation)。
研究發(fā)現(xiàn):不同類型的漏洞對于DLM的性能和準(zhǔn)確性有著不同的影響?(見圖1)。具體而言, 一些漏洞類型比其他類型更容易被檢測到,例如值錯(cuò)誤和緩沖區(qū)溢出,而一些漏洞類型則更難以被檢測到,例如輸入驗(yàn)證錯(cuò)誤和特權(quán)升級(jí)。此外,研究人員還發(fā)現(xiàn),混合模型(棕色柱狀圖)的性能通常弱于單模型-單漏洞類型?的方式?,也就是說,在處理不同類型漏洞時(shí),建立單個(gè)模型可能不如建立專門針對每種漏洞類型的模型來得 有效。同時(shí),跨漏洞類型的性能往往低于相同漏洞類型的性能(圓形)。
“cross-bugtype” 和?“same-bugtype” 是用于評(píng)估混合模型性能的兩種方法。在?“cross-bugtype” 中,測試數(shù)據(jù)和訓(xùn)練數(shù)據(jù)屬于不同的漏洞類型,而在?“same-bugtype” 中,測試數(shù)據(jù)和訓(xùn)練數(shù)據(jù)屬于相同的漏洞類型。這兩種方法可以幫助我們了解混合模型在不同漏洞類型上的性能表現(xiàn)。如果混合模型在?“cross-bugtype” 和?“same-bugtype” 上都表現(xiàn)良好,則說明該模型具有更廣泛的適用性和魯棒性。
RQ3:目前的DLM是否能夠精準(zhǔn)預(yù)測某些具有特定代碼特征的程序,如果不能,這些代碼特征是什么?
研究動(dòng)機(jī):在傳統(tǒng)的程序分析中,我們知道一些漏洞特征很難被捕捉,例如循環(huán)和指針。類似地,研究人員想要了解哪些特征能夠被DLM準(zhǔn)確捕捉,哪些屬于難以捕捉的特征。
實(shí)驗(yàn)設(shè)計(jì):首先,研究人員將Devign數(shù)據(jù)集分為易于處理和難以處理的兩個(gè)子集。然后使用一個(gè)基于邏輯回歸(Logistic Regression)的模型公式來計(jì)算每個(gè)函數(shù)的難度得分,并將其用作選擇簡單和困難訓(xùn)練和測試樣本的依據(jù)。接下來,研究人員對數(shù)據(jù)進(jìn)行了特征提取,并使用了一些常見的代碼特征(如控制流結(jié)構(gòu)、字符串操作等)。最后,他們使用了5折交叉驗(yàn)證(5 fold cross validation)來評(píng)估不同深度學(xué)習(xí)模型在Devign數(shù)據(jù)集上的性能,并比較了它們在易/難子集上的性能差異。
研究發(fā)現(xiàn):DLM在簡單子集上的性能強(qiáng)于原始數(shù)據(jù)集和困難數(shù)據(jù)集,這說明邏輯回歸和難度系數(shù)計(jì)算出的難?度得分可以有效判定DLM對簡單、困難的識(shí)別性能。
研究人員發(fā)現(xiàn),所有DLM針對call、length和pointers的重要性評(píng)估是一致性的(認(rèn)為它們并沒有太大的影響)。此外,控制流相關(guān)結(jié)構(gòu)(如for、goto、if、jump、switch和while)在不同模型之間的重要性評(píng)估有所不同,但大體被分類為困難類型。同時(shí),所有DLM都認(rèn)為arrays和switch屬于簡單類型(圖 3)。
RQ4:增加數(shù)據(jù)集的大小是否可以提高模型漏洞檢測表現(xiàn)?
研究動(dòng)機(jī):高質(zhì)量的漏洞檢測數(shù)據(jù)通常難以獲取。一般來說,程序自動(dòng)標(biāo)記容易導(dǎo)致錯(cuò)誤標(biāo)簽。而手動(dòng)標(biāo)記耗費(fèi)大量人力和時(shí)間。因此,如果知道這個(gè)問題的答案,研究人員可以較準(zhǔn)確地評(píng)估當(dāng)前的數(shù)據(jù)量是否足以訓(xùn)練成功的模型,從而節(jié)約成本。
實(shí)驗(yàn)設(shè)計(jì):通過組合兩個(gè)數(shù)據(jù)集(Devign和MSR)生成了一個(gè)不平衡數(shù)據(jù)集(Imbalanced-dataset)和一個(gè)平衡數(shù)據(jù)集(balanced-dataset)。
研究發(fā)現(xiàn):總體來說,所有模型都在增加數(shù)據(jù)量時(shí)提高了性能(圖 4)。然而,某些情況下的提升并不明顯。10%的平衡數(shù)據(jù)和100%的平衡數(shù)據(jù)對比,平均來說并沒有性能提升。對于不平衡數(shù)據(jù)來說,平均提升僅為0.16的F1分?jǐn)?shù)。只有LineVul,每增加10%數(shù)據(jù)集性能同步穩(wěn)定增加。而其他模型則是性能波動(dòng),代表在一定區(qū)間內(nèi)增加數(shù)據(jù)不一定帶來性能提升。
RQ5:訓(xùn)練數(shù)據(jù)集中的項(xiàng)目構(gòu)成是否影響模型的性能?如果是,以何種方式影響?
研究動(dòng)機(jī):不同的項(xiàng)目可能具有不同的代碼風(fēng)格和結(jié)構(gòu),這可能會(huì)影響模型在新項(xiàng)目上的泛化能力。因此,他們希望通過研究不同項(xiàng)目組成對模型性能的影響來了解這個(gè)問題。
實(shí)驗(yàn)設(shè)計(jì):進(jìn)行兩組實(shí)驗(yàn),第一組實(shí)驗(yàn)將數(shù)據(jù)集分為多樣數(shù)據(jù)集(Diverse)和非多樣(Non-diverse);第二組實(shí)驗(yàn)將數(shù)據(jù)集分為混合數(shù)據(jù)集(Mixed)和跨項(xiàng)目(Cross-project)數(shù)據(jù)集。
實(shí)驗(yàn)發(fā)現(xiàn):實(shí)驗(yàn)1表明(圖5a)?,幾乎所有模型(6個(gè)模型中的5個(gè))的Diverse數(shù)據(jù)集性能都弱于單一的Non-diverse數(shù)據(jù)集。
實(shí)驗(yàn)2表明(圖 5b)?,針對所有模型,混合數(shù)據(jù)集的性能超過跨項(xiàng)目數(shù)據(jù)集。這說明了使用同一項(xiàng)目不同數(shù)據(jù)源確實(shí)可以提高同項(xiàng)目的預(yù)測性能。
RQ6:模型基于什么源代碼信息進(jìn)行漏洞預(yù)測?不同模型之間是否在重要的代碼特征上達(dá)成一致?
研究動(dòng)機(jī):LineVul模型達(dá)到驚人的91%F1分?jǐn)?shù),這恐怖數(shù)字后的原因是什么?例如,為了檢測緩沖區(qū)溢出,基于語義的傳統(tǒng)程序分析工具會(huì)識(shí)別相關(guān)語句,并對字符串長度和緩沖區(qū)大小進(jìn)行推理。DLM利用的原理有哪些?是否使用了漏洞的語義方面來作出決策?不同的模型是否一致地認(rèn)為某些特征更重要?
實(shí)驗(yàn)設(shè)計(jì):使用SOTA深度學(xué)習(xí)解釋工具:GNNExplainer和LIT。GNNExplainer和LIT都提供了一種評(píng)分機(jī)制來衡量代碼特征的重要性。GNNExplainer會(huì)為每個(gè)節(jié)點(diǎn)中的每個(gè)標(biāo)記(token)計(jì)算一個(gè)分?jǐn)?shù),而LIT則會(huì)為每行代碼計(jì)算一個(gè)分?jǐn)?shù)。對于測試數(shù)據(jù)集中的每個(gè)示例,這些工具會(huì)選擇得分最高的前10行代碼作為最重要的特征集合,并將其用于模型做出決策。
研究發(fā)現(xiàn):盡管不同模型在個(gè)別預(yù)測上可能存在很大分歧,但它們所使用的代碼信息卻有很大重疊。所有模型對于重要特征都至少有3行相同代碼(表 VI)。其中,Linevul和ReGVD在重要特征集合方面具有最高的相似性,平均共享6.88行代碼。而Devign作為唯一基于屬性圖(property graph)的GNN模型,則與其他模型具有較低的重疊性,與PLBART之間的平均重疊率最低,僅為3.38行。
作者還檢查了被所有模型都忽略的漏洞,并且學(xué)習(xí)了其對應(yīng)的特征點(diǎn)。結(jié)果發(fā)現(xiàn):這些漏洞特定于具體的應(yīng)用,不具備通用性?,因此,作者們認(rèn)為這些漏洞漏報(bào)可能只是因?yàn)闆]有足夠的訓(xùn)練數(shù)據(jù)。
有趣的是,Transformer架構(gòu)模型有時(shí)不依賴漏洞的實(shí)際原因來進(jìn)行預(yù)測。此結(jié)論的支撐是:因?yàn)門ransformer模型采用固定大小的輸入,有時(shí)會(huì)截?cái)嘁恍╆P(guān)鍵代碼,包括可能是根本原因的代碼。但模型仍?然可以獲得高分F1分?jǐn)?shù)來預(yù)測漏洞。作者展示了一個(gè)代碼示例(Listing 1),雖然模型的預(yù)測結(jié)果是正確的,但使用的特征點(diǎn)并不是造成漏洞的實(shí)際原因。
這個(gè)例子揭示了模型試圖捕捉一些特征模式( Pattern),而不是分析值傳遞、語義等造成錯(cuò)誤的實(shí)際原因,為了證實(shí)這一點(diǎn),作者讓DLM預(yù)測和listing 1類似特征的代碼。不出意外地,模型誤報(bào)此代碼包含漏洞(Listing 2)。這說明了DLM基于重要特征的規(guī)律模式做預(yù)測的方式,有時(shí)候會(huì)帶來誤報(bào)。
來源:安全牛