国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于重點變異區(qū)域智能識別的模糊測試技術

2019-09-28 01:25董雨良秦曉軍甘水滔
計算機技術與發(fā)展 2019年9期
關鍵詞:訓練樣本變異節(jié)點

董雨良,董 博,秦曉軍,甘水滔

(數(shù)學工程與先進計算國家重點實驗室,江蘇 無錫 214125)

0 引 言

當前,主流的軟件脆弱性自動化檢測技術包括靜態(tài)分析、符號執(zhí)行、污點分析[1]及模糊測試[2-3],每種方法都存在各自的優(yōu)缺點。例如,靜態(tài)分析分析速度快,能適應于大規(guī)模代碼,但誤報率高,無法動態(tài)驗證脆弱性的正確性;符號執(zhí)行和污點分析精度高,但受限于代碼規(guī)模和環(huán)境,對于絕大部分的軟件對象無法發(fā)揮效用;模糊測試是當前使用最廣泛和有效的方法,可以適應各種類型和規(guī)模的軟件,但代碼覆蓋和輸入覆蓋能力較弱。從多個主流的公開漏洞數(shù)據(jù)庫中可以得知,利用自動化方法發(fā)現(xiàn)和披露的脆弱性中,絕大部分來源于模糊測試(Fuzzing)方法。因此,模糊測試方法一直是最受關注的軟件安全自動化測試技術之一。

模糊測試方法的核心思想是針對被測程序,自動或半自動地生成隨機測試用例作為輸入,監(jiān)視程序執(zhí)行情況,篩選出其中能夠觸發(fā)程序崩潰或斷言失敗異常的測試例。傳統(tǒng)模糊測試存在用例生成過于簡單隨機,測試效率低下;無明確的變異指導方法,變異過于盲目,難以發(fā)現(xiàn)深度脆弱點等問題,使得傳統(tǒng)Fuzzing測試效果不盡如人意。為提升模糊測試效率,研究人員嘗試將符號執(zhí)行[4-5]、遺傳算法[6]、動態(tài)污點分析[7]、神經(jīng)網(wǎng)絡[8]等各種技術引入測試過程。這些方法雖然都取得了一定的效果,但問題仍未完全解決,有待進一步研究。

文中提出了基于重點變異區(qū)域智能識別的模糊測試技術,通過深度學習方法訓練預測模型,指導種子文件有針對性地變異,減少無效測試用例的生成,從而提升模糊測試性能。

1 背景及相關工作

AFL是一款由谷歌公司開發(fā)的反饋式模糊測試框架,以算法簡潔、高效著稱。其核心思想是變異合法輸入文件,生成測試用例,通過插樁指令監(jiān)測測試用例對被測程序執(zhí)行路徑的影響,記錄路徑覆蓋變化情況,若被測程序執(zhí)行到了新的路徑,則將此測試用例加入種子集合中,等待進一步變異。如此迭代,以求覆蓋最多的執(zhí)行路徑,盡可能多地觸發(fā)程序執(zhí)行異常。

AFL的測試策略簡潔、高效,取得了很好的測試效果,但依然存在不足,如路徑?jīng)_突、變異策略和種子選擇策略隨機性太強等。研究人員基于AFL框架做了眾多改進,取得了十分明顯的效果。CollAFL[9]重新設計路徑邊ID的分配策略,實現(xiàn)邊的編號的唯一性,從而解決了AFL路徑?jīng)_突問題。在種子選擇策略上,AFLFast[10]將種子變異引起路徑相應變化的概率建模成馬爾可夫模型,設計多種種子選擇策略,增加低頻路徑對應種子的變異機會,此外,不同于AFL所有種子每次變異的次數(shù)一定的策略,AFLFast通過指數(shù)提高變異次數(shù)的方式,盡量減少無效測試用例的數(shù)量,從而提升測試效率;Vuzzer[11]基于輕量級的靜態(tài)分析和動態(tài)分析,利用控制流特征調(diào)整種子文件優(yōu)先級,使深層路徑對應的種子優(yōu)先變異,頻繁路徑對應種子優(yōu)先級降低;CollAFL提出了三種種子選擇策略,分別以未訪問的鄰近分支數(shù)量、未訪問的鄰近子孫數(shù)量及內(nèi)存操作數(shù)量的大小來確定種子的優(yōu)先級,大幅提升了測試效果。

目前缺乏針對AFL變異策略的高效優(yōu)化方案,Vuzzer利用污點分析提取數(shù)據(jù)流特征確定變異位置及方式,從而能更精準地生成測試用例,但由于污點分析的高開銷,在實際軟件對象測試中很難帶來效果,缺乏實用性。微軟研究人員提出采用深度學習來預測不同種子的重點變異區(qū)域,從實驗結果上看,獲得了少量的性能提升,但該工作存在以下不足:訓練樣本的采集模型粗糙,沒有針對生成訓練樣本的種子選擇模型,減少了訓練樣本的有效信息總量;采樣過程引入了過多無效信息,對預測結果造成干擾,且時間開銷巨大;預測結果的使用方式過于簡單,沒有針對性且效率較低;無法適應于二進制程序?qū)ο蟮臏y試。

針對以上變異策略的不足,文中設計了一個具備重點變異區(qū)域智能識別能力的二進制程序模糊測試系統(tǒng):基于AFL實現(xiàn)了并行訓練樣本采集模型Sampling-AFL;通過深度學習預測模型智能識別不同種子的重點變異區(qū)域,并基于此實現(xiàn)了模糊測試工具DL-AFL。

2 基于重點變異區(qū)域智能識別的二進制程序模糊測試技術

2.1 總體思路

為便于描述,將模糊測試過程中能夠引起被測程序執(zhí)行變化的變異位置定義為有效變異位置。有效變異位置可能是種子文件中的某1位、2位、3位……甚至是幾個不同位置的組合。將所有有效變異位置中涉及的種子文件的位置的集合定義為有效變異位圖。假設種子文件x的有效變異位置集合S為{(a),(a,b),(b,c,d)},則其有效變異位圖S'為{a,b,c,d}。

一般來說,每個種子文件都與一個確定的有限有效變異位置集合相對應。則可將這種對應關系抽象為函數(shù)關系:

f:x→S

(1)

其中,x表示種子文件;S表示文件x的有效變異位置集合。

若能夠通過某種方式掌握這種函數(shù)關系,則對于任意種子可直接通過函數(shù)求得有效變異位置集合,然后測試所有有效變異位置即可完成程序測試。而目前的技術還無法準確得出此函數(shù)關系,但若能近似地預測出此關系,以較高的概率按預測結果變異,也能有效地提升變異準確率和測試效率?;谝陨纤悸罚瑢⒑瘮?shù)1近似轉化為:

g:x→S'

(2)

其中,x表示種子文件;S'表示文件x的有效變異位圖。盡管轉化為函數(shù)2,但仍然無法得到函數(shù)g的準確表示。

深度學習具有強大的擬合能力,可以實現(xiàn)對復雜函數(shù)的逼近。此時,假如有大量的<種子文件,有效變異位圖>數(shù)據(jù),就可以借助深度學習強大的學習能力,近似地學習出函數(shù)g,從而能夠大致地預測出種子文件對應的有效變異位圖。

基于上述分析,文中設計了重點變異區(qū)域智能識別的二進制程序模糊測試方案,整體框架包括數(shù)據(jù)采樣、模型訓練、位圖預測、模糊測試四部分。數(shù)據(jù)采樣模塊采用分布式結構獲取大量<種子文件,有效變異位圖>數(shù)據(jù)對,提供給模型訓練模塊作為訓練數(shù)據(jù);模型訓練模塊通過深度學習訓練能夠預測種子對應的有效變異位圖的預測模型;最后,在模糊測試過程中,基于預測結果,重點變異位圖標識區(qū)域,減少未標識區(qū)的變異,提升測試用例的有效性。

2.2 Sampling-AFL:訓練數(shù)據(jù)采樣模型

深度學習是基于對數(shù)據(jù)進行表征學習的方法,訓練效果在很大程度上依賴于訓練樣本的質(zhì)量。一個好的訓練樣本集首先要能夠很好地反映出實際的數(shù)據(jù)分布情況,其次要有足夠的數(shù)據(jù)量?;谶@兩點考慮,制定如圖1所示的訓練數(shù)據(jù)采樣模型。

圖1 采樣模型

文中所需樣本為<種子文件,有效變異位圖>數(shù)據(jù)對,單個樣本生成時間較長,采用單個服務器采樣無法滿足數(shù)據(jù)量需求。通過分布式結構提升取樣速度,主節(jié)點分為種子生成及任務管理兩個模塊,分別負責種子文件的生成與任務分發(fā)控制,從節(jié)點同樣分為兩模塊,負責樣本生成和任務請求與接收。采樣開始時,主節(jié)點向所有從節(jié)點分發(fā)不同的種子文件進行采樣,同時開始生成新的種子文件。當子節(jié)點完成分配的任務后,主動向主節(jié)點請求任務,主節(jié)點收到任務請求后,從種子集合中選擇未采樣的種子,將其分發(fā)給從節(jié)點。依此進行下去,直至取得所需數(shù)量。采用分布式結構不僅可以協(xié)同多個節(jié)點同時工作,還可以使不同類型節(jié)點的任務更加單一,免去大量不必要的操作,提高數(shù)據(jù)采樣效率。

為確保訓練樣本的差異性與多樣性,必須保證種子文件之間的差異性。AFL隨機變異階段測試用例由多種變異方式組合變異而成,主節(jié)點基于此階段生成備選種子,從而確保了不同種子之間的差異性。此外,通過不同執(zhí)行路徑作為加入種子集合的依據(jù),確保不會產(chǎn)生過多的非法種子,從而降低訓練數(shù)據(jù)噪聲。

對于一個正常的種子而言,由于其變異空間過大,以目前的計算能力無法短時間獲取完整的有效變異位圖。因此,文中以AFL確定性階段變異方式為基礎,采取一種近似代替方式,獲取有效變異位圖的近似值。由于非確定性階段的變異存在較大的隨機性,且變異結果是多種變異的組合并存在刪除、插入等引起整個文件巨大變動的變異方式,無法準確判斷實際有效變異位。因此,從節(jié)點只記錄確定性階段的有效變異的位置。由于內(nèi)存操作變化必然引起執(zhí)行路徑變化,針加對內(nèi)存操作相關位置的變異也有助于測試過程中新路徑的發(fā)現(xiàn)。文中用能引起內(nèi)存寫操作變化的位置近似代替有效變異位圖。從節(jié)點數(shù)據(jù)采樣過程中,種子文件變異前,保存初始內(nèi)存寫操作數(shù),種子文件按照相應的變異規(guī)則變異后,對比初始內(nèi)存寫操作數(shù)據(jù),若發(fā)生變化則記錄下變異位置信息,反之進入下一輪變異。

2.3 深度學習模型

根據(jù)數(shù)據(jù)樣本的特征,選取合適的網(wǎng)絡組件構建深度學習模型。數(shù)據(jù)樣本為<種子文件,有效變異位圖>數(shù)據(jù)對。首先,種子文件長短不一,是變長數(shù)據(jù);其次,可將通過種子文件預測位圖的過程視為序列翻譯過程,且序列中的元素是上下文相關的?;诖耍h(huán)神經(jīng)網(wǎng)絡(RNN)是較為合適的選擇。循環(huán)神經(jīng)網(wǎng)絡是一種深度學習框架,它的提出主要是為了解決序列數(shù)據(jù)元素之間相互依賴的問題。一個簡單的循環(huán)神經(jīng)網(wǎng)絡具有重復神經(jīng)網(wǎng)絡模塊結構,且上一輪的輸出會作為本輪的輸入,從而網(wǎng)絡具有“記憶”功能。假設網(wǎng)絡初始狀態(tài)為h0,上一輪狀態(tài)為ht-1,本輪輸入為xt,則本輪的輸出為:ht=f(Wxt+Uht-1+b),其中W,U表示權重。RNN在語音識別、機器翻譯、圖片識別等領域取得了一定的成功,但單純RNN在處理長期依賴時存在梯度消失和梯度爆炸問題,會使RNN的長時記憶失效。長短期記憶網(wǎng)絡(LSTM)的出現(xiàn)很好地解決了該問題。LSTM[12]是一種特殊的RNN,其重復模塊結構及各門對應數(shù)學表達如圖2中LSTM所示,其中σ表示sigmoid激活函數(shù),W*表示權重向量,b*表示偏移向量,ft,it,Ot分別為遺忘門、輸入門、輸出門,分別控制信息的丟棄、更新、輸出,創(chuàng)建新的候選值向量。GRU是LSTM的一種變體,它保持了LSTM的效果,但結構更加簡單,如圖2中GRU所示。GRU只有更新門zt和重置門rt兩個門,分別用于控制前一時刻信息保留和忽略的程度。

圖2 LSTM與GRU細胞單元結構及數(shù)學表達

文中基于Tensorflow開源機器學習框架,分別采用LSTM及GRU來構建兩層循環(huán)神經(jīng)網(wǎng)絡作為深度學習模型,以<種子文件,有效變異位圖>數(shù)據(jù)對作為訓練數(shù)據(jù),進行有監(jiān)督學習,訓練預測模型。由于種子文件中數(shù)據(jù)并不總是以字節(jié)為最小有意義單位,常常出現(xiàn)按位來標識文件狀態(tài)的情況,因此,將種子文件轉換為0、1序列作為訓練模型的輸入向量。由于訓練數(shù)據(jù)規(guī)模較大以及計算資源有限,無法采用批量優(yōu)化,因此選用小批量優(yōu)化。綜合考慮實驗計算資源、訓練樣本大小以及深度學習模型參數(shù)數(shù)量決定每批次訓練樣本數(shù)量(batch_size),訓練樣本的最大長度(max_length)進行預測模型的訓練。訓練樣本為變長數(shù)據(jù),通過dynamic_rnn構建神經(jīng)網(wǎng)絡實現(xiàn)自動對長度不足最大長度的訓練數(shù)據(jù)的部分進行padding。此時每批次輸入的數(shù)據(jù)都為batch_size×max_length的矩陣,每訓練完一個批次,計算一次梯度,并更新網(wǎng)絡參數(shù)值。設置keep_prob控制保留節(jié)點數(shù),防止發(fā)生過擬合,采用指數(shù)衰減的學習率,選用均方誤差作為損失函數(shù),優(yōu)化器采用Adam。

2.4 DL-AFL:具備重點變異區(qū)域預測能力的模糊測試模型

在AFL基礎上,設計基于重點變異區(qū)域智能識別的模糊測試模型,如圖3所示。種子文件變異之前,進行預測及預處理,如圖3虛線框中所示,通過預測模型預測出有效位圖,將有效位圖轉換為關系數(shù)組,變異過程中依據(jù)關系數(shù)組有選擇地進行變異。

圖3 DL-AFL測試模型

由于有效變異位圖并非僅僅表示單比特變異有效位集合,也包含了多種其他變異方式,同時,有效變異位圖不便于直接指導Fuzzing測試的變異過程,因此,需對預測出的有效變異位圖做相應處理。結合AFL測試變異特點,文中將位圖轉換成兩種變異位置與變異長度的關系數(shù)組。第一種關系數(shù)組用于確定性階段,轉換規(guī)則為:將位圖中的位置作為數(shù)組下標,以0/1/3/7/15/31/63為數(shù)組的值分別對應自該位起連續(xù)0/1/2/4/8/16/32位標記為1的情況。第二種關系數(shù)組用于非確定性階段,轉換規(guī)則為:將位圖中所有標記為1的位置與自該位起連續(xù)標記為1的位數(shù)(1/2/4/8/16/32位)的關系分別保存在結構體數(shù)組中。

在獲取變異位置與變異長度關系數(shù)組的基礎上,改進AFL種子變異過程,用關系數(shù)組指導種子變異。在確定性階段變異過程中,若當前變異位置及變異長度在關系數(shù)組中標記為1,則進行變異;反之,則以一定概率進行變異。在非確定性階段變異過程中,以較大的概率選擇關系數(shù)組中標記為1的位置進行組合變異。

此外,通過預測結果指導變異之前必須先進行有效變異位圖預測,而預測過程需要耗費一定時間,可能造成測試過程等待時間較長。為減少測試過程的等待時間,對模糊測試過程與有效變異位圖預測過程(圖3點線框所示)進行并行化處理。除測試選取第一個種子之外,將選取下一個種子的操作從下一輪測試開始,提前至本輪確定性階段結束后,不確定性階段開始前,即當前種子A完成確定性階段變異后,立即選擇下一個種子B。選定下一個種子后,繼續(xù)之后的變異測試,預測模塊開始預測選定種子的有效變異位圖,從而減少等待時間。

3 實驗與分析

基于以上思路,實現(xiàn)分布式采樣工具Sampling-AFL、深度學習模型及基于重點變異區(qū)域識別的模糊測試工具DL-AFL,并針對nm、objdump、readelf、bmp2tiff、tiff2pdf、tiff2ps等二進制程序,基于二進制插樁平臺Dyninst[13](開銷遠低于pin[14]、dynamoRIO[15]、valgrind[16]、qemu binary translator[17]等動態(tài)插樁框架)實現(xiàn)程序靜態(tài)插樁,以樣本生成、路徑覆蓋、代碼覆蓋率及bug發(fā)現(xiàn)能力為指標,進行模型性能的對比評估測試。

采用1個主節(jié)點,10個從節(jié)點構建Sampling-AFL,節(jié)點配置為:Intel(R) Core(TM) i7-2600 CPU @ 3.40 GHz CPU,2 G內(nèi)存,Ubuntu 16.04.1 64位操作系統(tǒng),隨機選擇100個初始種子文件,采集10萬個樣本?;赥ensorflow 1.7.0機器學習框架,分別使用LSTM和GRU構建了2層循環(huán)神經(jīng)網(wǎng)絡,初始學習率為0.000 05,隱藏層節(jié)點數(shù)64,batch_size為16,訓練10輪次。模型訓練環(huán)境為:Intel(R) Core(TM) i7-2600 CPU @ 3.40 GHz CPU,32 G內(nèi)存,Ubuntu 16.04.1 64位操作系統(tǒng)。

DL-AFL確定性階段以50%的概率跳過不在關系數(shù)組中的位置,非確定性階段以70%的概率在關系數(shù)組中選擇變異位置及變異長度。隨機選擇初始種子,分別用AFL和DL-AFL測試24小時,測試環(huán)境主機配置與訓練環(huán)境相同。下面從四個方面對比測試結果。

3.1 訓練樣本生成能力

為測試Sampling-AFL取樣速度,分別以2個節(jié)點,4個節(jié)點,8個節(jié)點,10個節(jié)點構建分布式取樣模型,以bmp2tiff為被測對象,與相應數(shù)量的獨立節(jié)點進行24小時取樣速度對比,對比結果如圖4所示。可以看出,兩種模式取樣總數(shù)都與節(jié)點數(shù)成正比;而分布式取樣由于進行了統(tǒng)一調(diào)配,減少了各個節(jié)點獨立維護隊列及隨機變異階段的變異,其單個節(jié)點的速度快于獨立節(jié)點。隨著總節(jié)點數(shù)的增多,分布式取樣模型的優(yōu)勢也愈加突出。

圖4 取樣速度對比

3.2 路徑數(shù)量提升

在相同測試環(huán)境下,用DL-AFL與AFL對相同的程序?qū)ο筮M行測試,執(zhí)行路徑數(shù)量變化情況對比如圖5所示。

圖5 路徑數(shù)量對比

可以看出,所有被測程序在24小時內(nèi),測試效果都有不同程度的提升。其中對于nm、readelf、objdump、tiff2pdf和tiff2ps等5個被測程序,DL-AFL測試發(fā)現(xiàn)的路徑總數(shù)及路徑發(fā)現(xiàn)速度相比AFL都有較明顯的提升,尤其是objdump、readelf及tiff2ps提升極為顯著,分別提升25%、50%和15%以上;nm、tiff2pdf有略微提升,分別提升了4%和5%以上,而bmp2tiff只在測試速度上有一定的提升,但在路徑總數(shù)上卻略微低于AFL,原因可能是nm、tiff2pdf、bmp2tiff程序結構相對簡單,程序復雜執(zhí)行路徑較少,通過正常AFL變異過程便足以覆蓋大多數(shù)路徑。此外,測試時所用種子文件較小,變異空間小,此時大概率地針對預測區(qū)域變異,會導致某些不在預測區(qū)域位置的有效位置被變異的概率減小,從而影響測試效果。

3.3 邊覆蓋率提升

代碼覆蓋率是衡量測試過程中被執(zhí)行過的不同邊的數(shù)量的指標,是反映測試效果的重要指標之一。DL-AFL與AFL測試代碼覆蓋率情況對比如表1所示。DL-AFL和AFL在代碼覆蓋率上的表現(xiàn)與路徑數(shù)量上的表現(xiàn)基本一致,前者均略高于后者。唯一不同的是在bmp2tiff的測試結果中,雖然AFL測試發(fā)現(xiàn)總路徑數(shù)多于DL-AFL(LSTM),但覆蓋率卻低于后者。

表1 代碼覆蓋率對比 %

3.4 bug發(fā)現(xiàn)能力提升

測試過程中發(fā)生崩潰往往預示程序可能存在錯誤,因此,測試過程中出現(xiàn)的崩潰數(shù)量是Fuzzing測試的關鍵指標之一。

圖6 崩潰數(shù)量對比

圖6為DL-AFL與AFL在相同測試環(huán)境下,6個被測程序24小時發(fā)生崩潰的數(shù)量變化對比??梢钥闯觯趎m、objdump測試過程中均未發(fā)生崩潰,readelf、tiff2pdf、tiff2ps三個程序測試結果顯示,DL-AFL相對于AFL,檢測出的崩潰均有較明顯的提升。在bmp2tiff的測試中,DL-AFL(LSTM)檢測出的崩潰數(shù)量明顯高出其他二者,DL-AFL(GRU)略低于AFL。

表2為AFL、Vuzzer及DL-AFL在相同測試環(huán)境下,24小時內(nèi)檢測出的bug數(shù)量對比。可直觀地看出DL-AFL檢測出的bug數(shù)量多于AFL與Vuzzer。

表2 bug數(shù)量對比

綜合以上對比數(shù)據(jù)可以看出,通過深度學習方法預測指導的DL-AFL相較AFL測試效率普遍有所提升,從而表明文中提出的方法可以有效提升Fuzzing測試變異的準確率及測試效率。

4 結束語

針對模糊測試過程中測試用例生成過于隨機而嚴重影響測試效率的問題,在AFL模糊測試框架的基礎上,提出了基于重點變異區(qū)域智能識別的二進制程序模糊測試技術。利用歷史測試數(shù)據(jù)通過深度學習方法訓練重點變異區(qū)域預測模型,并將預測模型與模糊測試相結合構建模糊測試框架DL-AFL,以預測結果指導種子變異過程,減少無效測試用例生成,從而提升測試效率。通過與AFL在多個通用程序上的實驗對比,證明該技術能有效提升模糊測試效率。下一步計劃從提升并行規(guī)模、縮短采樣及訓練時間、提升重點變異區(qū)域智能識別模型的通用性,以及通過反饋式迭代訓練以進一步持續(xù)提升變異區(qū)域識別精準度等方面開展深入研究。

猜你喜歡
訓練樣本變異節(jié)點
基于圖連通支配集的子圖匹配優(yōu)化算法
變異
結合概率路由的機會網(wǎng)絡自私節(jié)點檢測算法
面向復雜網(wǎng)絡的節(jié)點相似性度量*
采用貪婪啟發(fā)式的異構WSNs 部分覆蓋算法*
人工智能
基于小波神經(jīng)網(wǎng)絡的網(wǎng)絡流量預測研究
變異的蚊子
病毒的變異
形的變異與的主題
云林县| 民县| 乳源| 长武县| 济源市| 江永县| 即墨市| 锡林郭勒盟| 东港市| 瑞丽市| 侯马市| 大石桥市| 弥勒县| 图片| 东港市| 盱眙县| 晋江市| 宁德市| 冷水江市| 新乡县| 沂水县| 霍山县| 固阳县| 依安县| 涡阳县| 南开区| 蒙自县| 增城市| 泰来县| 孝昌县| 浙江省| 古蔺县| 同江市| 佛山市| 沾益县| 富阳市| 涪陵区| 青浦区| 富锦市| 巴彦淖尔市| 霞浦县|