1. 引言
研究背景:近年來,深度學習漏洞檢測工具取得了可喜的成果。最先進的模型報告了 0.9 的 F1 分數,并且優于靜態分析器。結果令人興奮,因為深度學習可能會給軟件保障帶來革命性的變化。因此,IBM、谷歌和亞馬遜等行業公司非常感興趣,并投入巨資開發此類工具和數據集。
現存問題:盡管深度學習漏洞檢測在前景上很有潛力,但目前尚未達到計算機視覺和自然語言處理的水平。目前大部分研究重點是嘗試新興的深度學習模型,并將其應用于類似 Devign 或 MSR 數據集的數據集。然而,對于模型本身,我們了解甚少,例如,模型能否有效處理哪種類型的程序,我們是否應為每種漏洞類型建立模型,或者應該為所有漏洞類型構建一個統一模型,好的訓練數據集是什么樣的,以及模型在做出決策時使用了哪些信息。了解這些問題的答案可以幫助我們更好地開發、調試和應用模型。然而,考慮到深度學習的黑盒特性,這些問題很難回答。論文的目的不是提供這些問題的完整解決方案,而是探討這些目標。
科學問題:在本文中,論文對一系列最先進的深度學習漏洞檢測模型進行了調查和重現,并建立了研究問題,以便理解這些模型,旨在從中汲取經驗教訓和指導,以更好地設計和調試未來的模型。論文構建了研究問題,并將其分為三個領域,即模型能力、訓練數據和模型解釋。具體來說,論文的首要目標是了解深度學習在漏洞檢測問題中的處理能力,特別關注以下研究問題:
- 問題 1:不同模型在漏洞檢測上是否能達成共識?不同模型之間存在哪些差異?
- 問題 2:某些類型的漏洞是否更容易檢測? 應該為每種類型的漏洞構建模型,還是應該構建一個可以檢測所有漏洞的模型?
- 問題 3:是否存在一些模型難以預測的代碼模式?如果存在這種代碼模式,這是怎樣的一種代碼模式?
論文的第二項研究重點是訓練數據。論文的目標是了解訓練數據的規模和組成是否以及如何影響模型性能。具體來說,論文構建了以下研究問題:
- 問題 4:增加數據集大小是否有助于提高漏洞檢測的模型性能?
- 問題 5:訓練數據集中的項目組成如何影響模型的性能?
最后,論文的第三個研究領域是模型解釋。 論文使用SOTA模型解釋工具來調查:
- 問題 6:模型用于預測的源代碼信息是什么? 模型對重要特征是否一致?
研究內容:為了回答上述問題,論文調查了最先進的深度學習模型,并在它們的原始數據集上成功重現了 11 個模型。這些模型采用了不同的深度學習架構,例如 GNN、RNN、LSTM、CNN 和 Transformers。為了比較這些模型,論文設法讓 9 個模型與 Devign 和 MSR 這兩個流行的數據集一起運行。論文選擇這兩個數據集的原因是:(1) 這兩個數據集都包含真實世界的項目和漏洞;(2) 大多數論文中的模型都是使用 Devign 數據集進行評估和調優的;(3) MSR 數據集包含 310 個項目,其中數據有漏洞類型的注釋,這對我們的研究問題至關重要。通過精心設計的實驗和對威脅的考慮,論文發現了 6 個研究問題的結果。總的來說,論文的研究貢獻包括:
- 貢獻 1:論文對深度學習漏洞檢測模型進行了全面調查。
- 貢獻 2:論文提供了一個代碼倉庫,其中包含 11 個具有各種研究設置的 SOTA 深度學習框架的訓練模型和數據集。
- 貢獻 3:論文設計了 6 個科學問題來理解模型能力、訓練數據和模型解釋。
- 貢獻 4:論文構建了研究并通過實驗獲得了所提科學問題的結果。
- 貢獻 5:論文準備了有趣的例子和數據,以進一步研究模型的可解釋性。
2. 模型復現
為了收集最先進的深度學習模型,論文研究了 2018 年至 2022 年的論文,并參考了微軟的 CodeXGLUE 排行榜以及 IBM 的缺陷檢測 D2A 排行榜。論文使用了所有可獲取的開源模型,并成功復現了 11 個模型。論文的數據復制包中包含了完整的模型列表,以及我們未能重現某些模型的原因。
如上表所示,復現的模型涵蓋了各種深度學習架構。Devign 和 ReVeal 在屬性圖上使用了 GNN,融合了控制流、數據依賴性和 AST。ReGVD 在 token 上采用了 GNN。Code2Vec 在 AST 上使用了多層感知器 (MLP)。VulDeeLocator 和 SySeVR 則是基于 RNN 和 Bi-LSTM 的序列模型。最近的深度學習檢測采用了預訓練的 Transformer,包括 CodeBERT、VulBERTa-CNN、VulBERTa-MLP、PLBART 和 LineVul。
針對論文的研究問題,論文選用了 Devign 和 MSR 數據集。論文研究了這 11 個模型在其原始論文中使用的數據集,這些數據集如上表所示。論文發現 Devign 數據集已被用于對 8 個模型進行評估和調整。該數據集是一個平衡數據集,包含大致相同數量的易受攻擊和非易受攻擊的示例,總共有 27,318 個數據點(每個示例也被稱為一個數據點)。LineVul 使用了 MSR 數據集,這是一個近期可用的數據集。該數據集是不平衡的,包含 10,900 個易受攻擊的示例和 177,736 個非易受攻擊的示例。這些示例具有它們的源項目以及常見弱點枚舉(CWE)條目,顯示了漏洞的類型。論文利用這些數據集特征來制定一些研究問題。
論文根據原始數據集和設置復現了模型的結果,如上表所示。其中,A、P、R、F 列代表深度學習漏洞檢測中常用的指標,包括準確率、精確率、召回率和 F1 分數。論文的復現結果與原始論文相比,通常計算誤差在 2% 以內。特殊情況是 ReVeal,作者確認我們的結果糾正了原始論文中的數據泄漏錯誤,以及 Devign,論文使用了第三方復現代碼(Chakaborthy 等人發布的),因為原始 Devign 代碼并未開源。