999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

PDGcross:基于跨文件圖表征的源代碼漏洞檢測

2023-08-15 02:02:10熊可欣喬夢晴
計算機技術與發展 2023年8期
關鍵詞:檢測

熊可欣,李 濤,余 琴,喬夢晴

(1.武漢科技大學 計算機科學與技術學院,湖北 武漢 430065;2.智能信息處理與實時工業系統湖北省重點實驗室,湖北 武漢 430065)

0 引 言

隨著軟件的復雜性不斷提高,漏洞的形態變得多樣化,軟件漏洞檢測技術需求不斷增加。為了實現漏洞檢測的高準確率、低誤報率,大量的深度學習方法被嘗試用于檢測源代碼漏洞問題中,以實現漏洞檢測的自動化和智能化[1-3]。在目前的漏洞檢測中,重點關注于單個文件內部是否存在漏洞。然而在實際的項目開發中代碼規模大,存在多種復雜的函數調用與參數傳遞,在單文件范圍內有較好的檢測效果,然而檢測過程中都忽略了文件與文件之間可能存在的調用關系以及可能由于該類調用關系而產生的漏洞[4-5],多文件間的函數調用關系而產生的漏洞危害性較高但關注度較低,檢測難度較高[6-8]。因此,該文將關注多文件間的函數調用,檢測因調用關系而導致的漏洞。

在基于源代碼的漏洞檢測中,需要將源代碼中的有效部分提取出并進行抽象表示,再進行向量化處理供給模型訓練[9-11]。目前代碼的特征表示方式可以大致分為文本、序列、圖、抽象語法樹和混合五種,不同的代碼表征方式有其不同的優勢[12-13]。

文獻[14-16]將文本表示和深度學習相結合,從源代碼中提取有效的特征信息,利用詞頻統計方法構建特征向量,采用深度學習對特征向量進行學習和訓練。但普通的詞法分析忽略了代碼的上下文結構,無法確定代碼內的函數調用關系。

序列表征是在源代碼基礎上提取字符流相關的標識符、函數名等關鍵特征信息,同時也包含一定的函數調用和語句調用等信息。在文獻[17-20]通過序列表征進行漏洞檢測,從函數調用序列出發,采用深度學習自動獲取序列特征。文獻[18]利用雙向長短期記憶循環神經網絡構建了一個VulDeePecker漏洞檢測系統,文獻[19]在文獻[18]的基礎上添加了控制依賴關系,但對全局特征和局部特征存在一定的學習偏差,文獻[18-19]誤報率都較大。文獻[20]在程序執行過程中進行收集函數調用序列作為特征用來訓練模型,可以更好地挖掘出更多的特征信息。

抽象語法樹是源代碼抽象語法結構的樹狀表現形式,樹的每個節點中都包含源代碼的語義和結構信息。文獻[21]在抽象語法樹的基礎上進行項目內的漏洞預測。基于抽象語法樹的檢測可以在節點上進行標記,可以對漏洞的定位工作有一定的幫助。然而對于多文件之間的函數調用,抽象語法樹的生成時間和空間復雜度都較高,難以適用于規模較大的系統。

基于圖的表征方式可以通過圖結構表示源代碼的語義和詞法,能夠有效保留代碼的上下文結構信息。相比于抽象語法樹的表征方式,圖表征中包含了更多的源代碼內部結構信息。文獻[22]提出獲取Sink函數調用的代碼子圖,Sink函數即在源代碼中可能導致漏洞的調用函數,但該檢測僅局限于Sink函數內部有無漏洞,無法檢測無漏洞文件間的函數調用導致的漏洞。文獻[23]在代碼屬性圖的基礎上,學習圖的局部和全局信息,利用程序切片技術簡化圖結構。

該文的漏洞檢測重點關注多個無漏洞文件間因函數調用和參數傳遞而導致的漏洞,因此在將JAVA源代碼轉化為程序依賴圖(PDG),保留源代碼的上下文結構關系,提出了一種通過圖節點信息觀察函數調用關系、融合多文件的圖特征為PDGcross特征、再進行深度學習的模型訓練和預測的漏洞檢測方法,實現了檢測文件間函數調用而產生的漏洞。與傳統的漏洞檢測相比,該文的創新點在于更關注文件之間的函數調用關系,實現檢測因函數調用和參數傳遞而導致的該類漏洞的高準確率和低漏報率。

1 基于PDGcross的源代碼漏洞檢測

1.1 整體架構

提出的基于PDGcross特征和LSTM模型的漏洞檢測方法的整體架構如圖1所示。

圖1 基于PDGcross的源代碼漏洞檢測整體架構

首先,將源代碼通過開源工具Sourcedg[24]轉為程序依賴圖(PDG);在程序依賴圖的基礎上遍歷圖節點,判斷代碼中有無跨文件的函數調用事件,若無則不做處理,若有函數調用事件則需要確定被調用文件,形成一個代碼群;在當前文件所擁有的代碼群中,通過數據流分析和控制流分析,融合被調用文件的節點,通過節點間數據依賴關系和控制依賴關系添加邊信息,為當前文件形成一個新的PDGcross圖表征,在PDGcross的基礎上利用圖嵌入將圖表征轉為特征矩陣,訓練LSTM模型實現跨文件的漏洞檢測。

1.2 基于程序依賴圖的特征提取

在目前的圖表征中,常用的圖表征包含數據流圖、控制流圖、程序依賴圖(Program Dependence Graph,PDG)、數據依賴圖和數據屬性圖等,不同的圖表征結構包含的源代碼信息各有不同。程序依賴圖主要包括控制依賴圖(Control Dependence Graph,CDG)和數據依賴圖(Data Dependence Graph,DDG),是源代碼的一種圖形表示,是帶有標簽的有向圖,節點代表語句,邊表示兩種依賴關系。由于程序依賴圖(PDG)通過在節點標簽中保留代碼信息,用圖的有向邊保留程序之間的上下文關系,可以更多地保留程序的控制依賴和數據依賴關系,因此該文選用了程序依賴圖(PDG)的表征方式。

在Sourcedg通過JAVA源代碼生成程序依賴圖(PDG)的過程中,為了更好地表達節點信息,去除冗余信息,保留上下文關系,將程序依賴圖的節點和邊劃分為多種類型,通過不同類型之間的關系進行圖的繪制,有選擇地保留節點和邊。Sourcedg生成程序依賴圖的過程中更多地關注于類型為類聲明、實參的傳入傳出、形參的傳入傳出、方法入口和賦值等操作節點,對于其他類型的節點則較多的省略。在程序依賴圖的邊中,分為實際控制邊和非實際控制邊,實際控制邊是指上下文中確實存在著控制關系,用實線邊表示;為了更好地表達數據流和控制流,PDG中會產生一些與源代碼無關的僅表示圖結構的節點,在該類節點的關系中,這類則為非實際控制邊,常用虛線邊表示。

盡管Sourcedg工具生成的程序依賴圖已經很大程度地保留了原代碼的有價值內容,盡可能通過控制流和數據流表達了上下文關系。但當源文件中存在調用其他文件的操作時,在源文件的程序依賴圖中并沒有任何表達,僅將該類調用語句作為一個普通節點,不考慮調用產生的數據流和控制流。對于跨文件的函數調用,Sourcedg無法發現文件之間及函數之間的關系,僅僅依靠PDG的表征方法對多文件的函數調用產生的漏洞檢測效率低下。

1.3 基于PDGcross的特征提取

以圖2所示的代碼為例,源文件A調用BC源文件,ABC源文件在單個檢測時并無漏洞,但由于A調用了BC,導致在參數傳遞之后在A中形成了一個較為典型的SQL注入漏洞語句。在常見的漏洞檢測方法中,一般在文件粒度上進行檢測,即ABC分別檢測,A中調用語句產生的數據流和控制流并不會被過多關注,僅僅是作為普通的語句進行檢測。對于單個文件即造成漏洞的對于ABC該種文件間調用傳參而造成的代碼漏洞則被一定程度上忽略,可能變成漏洞攻擊的薄弱之處。因此,該文的主要研究目的是要捕獲ABC代碼塊之間的調用關系,通過觀察調用關系而產生的數據流和控制流進一步進行漏洞檢測。

圖2 代碼示例

在PDG的基礎上進行節點的遍歷,確定當前文件是否調用了其他文件,若有調用,則將被調用文件劃分在當前文件的代碼群中,存放在一個序列中。在構建代碼群時的過程中,用字典的形式來存儲任一單文件內的方法和聲明方法的節點地址,即字典名{方法名:節點地址}。在產生調用關系之后,查找被調用文件中該方法的節點地址,最后存儲為{調用節點地址:被調用地址}的格式,即為圖融合中需要新增的邊信息。在多文件中反復多次調用某一方法時,并不需要重復多次添加該方法相關節點,僅需添加相應的邊來表達之間的調用關系。提取PDGcross特征的算法偽代碼如算法1-3所示。

算法1:PDGcross生成算法

輸入:輸入樣本的PDG特征集X={X1={nodes={n1,n2,…,nM},edges={e1,e2,…,eN}},…,Xq}

輸出:輸出樣本的PDGcross特征O={O1={nodes={N1,N2,…,Nk},edges={E1,E2,…,ET}},…,Oq}

1.union←[] //初始化代碼群列

2.entryDict←{}//初始化方法字典

3.dependeOther←{}//初始化依賴關系字典

4.forx←X1toXqdo//遍歷PDG特征集

5.list←[]

6.調用算法2生成entryDict

7.調用算法3生成list和dependeOther

8.union.append(list)

9.end for

10.for files[]in union do//將屬于同一代碼群中的文件融合

11.if files[]長度>1 then//說明該文件存在調用關系

12.for file in files[]do//遍歷文件代碼群

13.融合該代碼群中的PDG圖節點和邊

14.for nodes in dependeOther[file]do//遍歷節點之間的依賴關系

15.添加相應的表示控制關系的邊

16. end for

17. end for

18.end if

19.存為Oi

20.end for

21.returnO//輸出結果

算法2:方法字典生成算法

輸入:輸入樣本的PDG特征X={nodes={n1,n2,…,nM},edges={e1,e2,…,eN}}

輸出:輸出方法字典entryOne={{labelMeans1:node1},{labelMeans2:node2},…,{labelMeansM:nodeM}}

1.entryOne←{}//初始化方法字典

2.for node←n1tonMdo//遍歷PDG的節點

3.labelType←node中的標簽信息

4.labelMeans←node中的節點內容//包含方法名

5.if(labelType的類別==‘Entry’)(labelMeans not in entryOne)then//該節點為方法節點且該方法為被加入方法字典

6. entryOne[labelMeans]←node//鍵值對為(方法名:節點地址)

7.end if

8.end for

9.entryDict[]=entryOne

算法3:依賴關系生成算法

輸入:輸入樣本的PDG特征X={nodes={n1,n2,…,nM},edges={e1,e2,…,eN}}

輸出:輸出依賴關系字典dependes

1.dependes←{}//初始化依賴關系字典

2.list.append(X)//把當前文件添加至代碼群

3.for node←n1tonMdo//遍歷PDG的節點

4.labelType←node中的標簽信息

5.labelMeans←node中的節點內容//包含方法名

6.if labelMeans用正則表達式匹配到調用關系格式 then

7. filename←被調用文件名

8. method←被調用文件名

9. if filename是輸入文件之一 then

10. if filename not in list then

11. filename調用算法2和算法3

12. end if

13. if filename in entryDict then

//依賴關系字典當前節點值列表中添加方法節點地址

14. dependes[node].append(entryDict[filename][method])

15. end if

16. end if

17.end if

18.end for

19.dependeOther[X]←dependes//賦值

1.4 特征矩陣

在圖表征的基礎上,采用了圖嵌入算法將圖表示為低維、實值、稠密的向量形式,以數值化的方式表達圖中的信息,供給學習模型直接使用。圖嵌入的方法主要分為矩陣分解、隨機游走和深度學習,圖基于隨機游走技術的頂點嵌入經典算法包括DeepWalk、Node2Vec、SDNE等,該文則選取了其中的Node2Vec算法。Node2Vec算法在DeepWalk的基礎上改進了隨機游走的生成方式,采用有偏的隨機游走方式獲取頂點的近鄰序列,使得生成的隨機游走可以反映深度優先和廣度優先兩種采樣的特性,再利用word2vec去學習頂點的embedding向量,最后得到45*64的特征矩陣。

1.5 模型訓練

在PDGcross特征的基礎上通過Node2Vec圖嵌入得到特征矩陣后,按照文件是否含有漏洞為該文件對應的特征矩陣添加相應的標簽,1為有漏洞,0為無漏洞,利用長短時記憶神經網絡(LSTM)在含有標簽的數據集上訓練出分類模型,進行漏洞類別的預測。

在實驗中,首先以CWE89類漏洞進行模型訓練。模型的訓練集負樣本選擇Juliet數據集CWE89類別中單文件即構成漏洞的數據集,包含352個樣例;正樣本隨機選擇benchmark數據集中無漏洞的350個樣例。有漏洞文件的特征矩陣標簽為1,無漏洞的則為0,數據集的90%劃分為訓練集,10%劃分為測試集。基于LSTM神經網絡,通過批標準化進行歸一化處理,利用自適應調整學習率,快速又精確地獲得最優模型。最終模型的學習效果十分不錯,在測試集上的精確率和召回率都有很好的表現,最優時可以達到100%的準確率,從另一方面也可以證明圖表征在模型檢測方面有較好的效果。

2 實驗結果與分析

為了驗證所提特征提取的有效性,將其與原PDG圖表征及現有的開源工具檢測的結果進行對比實驗。選用的數據集來自于NIST參考數據集SARD中的Juliet測試數據集JAVA語言版和OWASP組織下的OWASP Benchmark項目中的數據集。Juliet數據集包含了上百種CWE相關漏洞代碼,Benchmark數據集包含了11類漏洞和無漏洞數據,該文選取了Juliet數據集中的三個子集與Benchmark數據集作為實驗數據來源。

2.1 數據集

實驗中選取了Juliet數據集中的CWE 15(External_Control_of_System_or_Configuration_Setting)、CWE 89(SQL_Injection)、CWE 90(LDAP_Injection)三類漏洞代碼,見表1,benchmark數據集中無漏洞文件隨機選取680個。

在Juliet數據集中,名為“****a.java”與“****b.java”的文件劃分為一組,通過入口文件調用其他文件后組合產生一個漏洞,具有一個漏洞標簽,稱這樣的一組為一個多文件樣例。在Juliet數據集的一個多文件樣例中,名為“****a.java”的文件為該組樣例的入口,稱其為該組樣例的入口文件。

將Juliet多文件樣例的入口文件又細分為AGS和G2BS兩類,AGS類為整組樣例中每單個文件并無漏洞,但因調用關系后產生漏洞,G2BS類為入口文件無漏洞但被調用文件有漏洞。實驗重點關注于AGS類數據集的漏洞檢測,針對G2BS類的數據可以作為安全風險提示。以CWE89的多文件樣例為例,數據分布如表2所示。

表2 多文件樣例構成

在人工檢驗后可以認證該類多文件樣例確實包含相應的漏洞,然而在使用第三方檢測工具Fortify和CodeSec掃描后,發現該類代碼在檢測工具中進行掃描時未發現該類漏洞,因此認為進行跨文件的漏洞檢測十分具有必要性。

2.2 評價指標

在實驗中,選取了precision、recall和F1值作為結果的衡量指標。precision為精確率,表示正確預測漏洞種類的樣本數占全部預測為該類漏洞的樣本數的比例;recall為召回率,表示正確預測漏洞種類的樣本數占實際為該類漏洞的樣本數的比例;F1值為和的調和平均數。

(1)

(2)

(3)

其中,TP表示預測為某類漏洞且分類準確的樣本數量,FP為預測為某類漏洞但實際可能不存在漏洞或為其他漏洞的樣本數量,FN為實際為某類漏洞但未被正確檢測的樣本數量。

2.3 實驗結果

首先選取CWE89漏洞數據與benchmark無漏洞數據訓練二分類模型,在訓練得到CWE89漏洞的二分類模型后,抽取CWE89數據集中多文件樣例的119組AGS類樣例的入口文件和92組G2BS類樣例的入口文件及單文件樣例作為測試集進行漏洞分類。在實驗中,特征提取階段分別使用Fortify檢測工具與PDG和PDGcross表征進行對比,檢測結果如表3所示。

表3 模型檢測結果

由實驗可知,Fortify和PDG特征目前僅在單文件漏洞方面有不錯的效果,但在多文件產生組合漏洞的樣例檢測中漏報率較高。而所提出的特征不論是在檢測單文件漏洞、無漏洞文件因調用而產生漏洞(AGS類)的情況還是警告某一無漏洞文件調用有漏洞文件(G2BS類)的風險時都有較為不錯的效果。因此在實驗中進一步添加了CWE15和CWE90兩類漏洞,訓練了一個四分類模型,進行多文件樣的檢測,取得了91%的精確率和90%的召回率,優于現有的開源工具檢測方法,結果如表4所示。

表4 四分類模型檢測結果

3 結束語

聚焦于多文件間調用產生的漏洞檢測,確定了被調用的文件范圍,利用圖表征技術中的程序依賴圖實現了多文件的融合。采用LSTM神經網絡,利用批標準化進行歸一化處理,學習且訓練出相應的漏洞分類模型。實驗在CWE15、CWE89、CWE90這三種漏洞的小規模數據集上取得了91%的精確率和90%的召回率,在檢測多文件調用漏洞方面更是優于CodeSec和Fortify等工具。但是目前漏洞檢測工作是針對于文件粒度,缺少函數粒度的標簽,無法更進一步的確定漏洞范圍,因此下一步的工作是將代碼粒度細化,減少特征中的冗余信息,做到一定程度的漏洞定位。

猜你喜歡
檢測
QC 檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
“幾何圖形”檢測題
“角”檢測題
“有理數的乘除法”檢測題
“有理數”檢測題
“角”檢測題
“幾何圖形”檢測題
主站蜘蛛池模板: 久久99国产乱子伦精品免| 亚洲日本中文字幕天堂网| 日日拍夜夜嗷嗷叫国产| 国产精品流白浆在线观看| 午夜福利在线观看入口| 一本无码在线观看| 亚洲中文无码h在线观看| 国产精品福利尤物youwu| 四虎免费视频网站| 四虎永久免费地址| 欧洲高清无码在线| a级高清毛片| 中国精品久久| 国产第一福利影院| 一级不卡毛片| 人妻91无码色偷偷色噜噜噜| 四虎国产精品永久一区| av在线无码浏览| 91一级片| 国产在线精彩视频二区| 久久大香香蕉国产免费网站| 亚洲色图在线观看| 一本色道久久88亚洲综合| 99久久成人国产精品免费| 亚洲人成影视在线观看| 伊人激情综合网| 91精品国产一区| 天天躁夜夜躁狠狠躁图片| 亚洲天堂精品视频| 最新精品国偷自产在线| 久久国产精品电影| 亚洲成人一区在线| 亚洲日韩精品无码专区| www精品久久| 欧美一级在线播放| 亚洲熟女偷拍| 国产精品xxx| 久草热视频在线| 久久伊人操| 一级香蕉视频在线观看| 一区二区三区高清视频国产女人| 国产精品30p| 不卡午夜视频| 亚洲精品无码抽插日韩| 国产精品污视频| 国产女人综合久久精品视| 亚洲无码高清一区二区| 欧美午夜视频在线| 婷婷中文在线| 国产午夜福利在线小视频| 欧美午夜一区| 久久特级毛片| 亚洲视频免费在线看| 久久青草免费91观看| 亚洲国产理论片在线播放| 国产网站黄| 国产丝袜91| 日韩免费毛片| 精品人妻无码中字系列| 永久成人无码激情视频免费| 免费国产不卡午夜福在线观看| 成人综合久久综合| 九九热精品视频在线| 成人综合在线观看| 国产欧美精品一区aⅴ影院| 毛片在线播放网址| 久久人人爽人人爽人人片aV东京热 | 国产原创演绎剧情有字幕的| 成人一区专区在线观看| 97视频免费看| 国产成人一区| 欧美亚洲国产日韩电影在线| a级毛片免费看| 欧美午夜在线播放| 亚洲三级影院| 三区在线视频| h视频在线观看网站| 国产一区二区三区日韩精品 | 国产区成人精品视频| 澳门av无码| 福利在线一区| 久久久久久久久亚洲精品|