欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種跨架構的二進制程序漏洞函數(shù)關聯(lián)方法與流程

文檔序號:11177040閱讀:334來源:國知局
本發(fā)明涉及二進制程序漏洞挖掘與逆向分析領域,具體涉及一種跨架構的二進制程序漏洞函數(shù)關聯(lián)方法,屬計算機程序檢測
技術領域
:。
背景技術
::隨著全球信息技術的高速發(fā)展和信息化系統(tǒng)、信息化產(chǎn)品的迅速普及,計算機軟件已經(jīng)成為世界經(jīng)濟、科技、軍事和社會發(fā)展的重要組成。實踐表明,絕大部分的信息安全事件都是攻擊者借助軟件漏洞發(fā)起。因此,安全漏洞是直接影響信息安全系統(tǒng)的決定性因素,有必要對軟件漏洞進行分析與利用。漏洞分析按被分析的對象可分為源碼級與二進制級。源碼級的漏洞分析技術是直接對用高級語言編寫的程序進行分析。分析者可以利用源代碼中豐富完整的語義信息,通過一系列漏洞分析技術,發(fā)現(xiàn)程序中的編碼錯誤以及設計缺陷。但在實際應用中大量商業(yè)軟件均以二進制代碼形式存在,源代碼卻難以獲取。因此,二進制程序漏洞分析逐漸成為了信息安全領域的一個重要分支。函數(shù)關聯(lián)技術主要基于二進制代碼相似性檢測。早期的應用場景是計算針對同架構編譯的兩個二進制文件的相似度來進行函數(shù)關聯(lián),由于是針對同架構進行編譯,反匯編后得到的匯編程序是同一個指令集的,因此可以將匯編程序看成是字符串,直接進行相似性分析和處理。2013年,arunlakhotia提出了一種語義模板的方法用于相似代碼片段的快速定位。2014年,yanivdavid采用字符編譯距離來計算基本塊的相似程度。然而,研究人員發(fā)現(xiàn),如果編譯二進制文件時采用的編譯優(yōu)化選項不同,那么即使是同一段源碼反匯編得到的匯編程序也存在很大差異,這就意味著對匯編程序表現(xiàn)形式依賴較強的方法對編譯優(yōu)化選項敏感,所以研究人員將研究點轉向了對匯編程序表現(xiàn)形式依賴較低的語義信息,開始提取程序片段的語義信息作為特征。2014年,jannikpewny提出了一種基于語義簽名的漏洞關聯(lián)算法,將基本塊內(nèi)指令轉化為表達式,并存儲為樹結構,采用樹編譯距離計算相似度,并實現(xiàn)了原型tedem。同年,manuelegele提出了一種基于動態(tài)插裝技術的二進制代碼相似性檢測方法,主要是模擬函數(shù)動態(tài)運行環(huán)境作為函數(shù)的特征來進行代碼檢索,它通過從函數(shù)入口基本塊開始沿某執(zhí)行路線再次執(zhí)行來保證每個基本塊至少被執(zhí)行一次,并實現(xiàn)了原型blex。后來,越來越多的iot廠家將第三方代碼庫編譯并部署在不同的cpu平臺上,這就意味著能夠在針對任意架構編譯的二進制文件中搜索漏洞函數(shù)的需求將會越來越大。已有的函數(shù)關聯(lián)技術或由于方法局限(例如基于檢測匯編程序字符串相似程度的函數(shù)關聯(lián)技術)、或由于工具局限(例如動態(tài)插裝工具pin只面對x86平臺)并不能直接應用到跨架構的場景中來。2015年jannikpewny在s&p上發(fā)表了cross-architecturebugsearchinbinaryexecutables。該論文首次提出了跨架構這個應用場景,采用提升中間語言表示、數(shù)值采樣和最小哈希等方法實現(xiàn)了跨架構的(x86,arm,mips)基本塊語義信息提取。但該方法的準確率并不理想,使用該方法用來比較分別針對arm架構和mips架構的openssl固件的函數(shù)相似程度時rank1剛達到32.4%。因此有必要對跨架構的漏洞關聯(lián)技術進行研究,提出一種準確率較高的關聯(lián)方法。目前,缺少一種實現(xiàn)簡單的,準確率高的,跨架構的二進制程序漏洞關聯(lián)技術。技術實現(xiàn)要素:本發(fā)明目的在于提供一種跨架構的二進制程序漏洞函數(shù)關聯(lián)方法。本發(fā)明涉及的方法流程主要包括:對二進制文件進行逆向分析獲得待測函數(shù)庫,計算待測函數(shù)與漏洞函數(shù)的數(shù)值相似度;從函數(shù)調(diào)用圖中截取待比較的兩個函數(shù)的局部結構信息構成兩個結構子圖;將兩個結構子圖分層抽象為賦權二部圖,采用二部圖匹配算法計算賦權二部圖最大權匹配,加權求和作為兩個函數(shù)的整體相似度,并據(jù)此進行排序;基于roc曲線計算判定閾值,相似度大于判定閾值的函數(shù)被判定為疑似漏洞函數(shù),進行下一步分析,反之判定為正常函數(shù),不作處理。本發(fā)明的技術創(chuàng)新點在于計算相似度時重構函數(shù)控制流圖算法和計算整體相似度時結構化匹配算法。本發(fā)明融合了函數(shù)的數(shù)值信息與結構信息,特征的提取不依賴特定的指令集,可以對不同架構下的二進制文件進行函數(shù)關聯(lián),結果準確率高,實現(xiàn)簡單。為實現(xiàn)上述目的,本發(fā)明采用如下技術方案:一種跨架構的二進制程序漏洞函數(shù)關聯(lián)方法,主要包含以下3個步驟:1)計算待測函數(shù)與漏洞函數(shù)的數(shù)值相似度。首先對二進制文件進行逆向分析獲得待測函數(shù)庫;提取待測函數(shù)間調(diào)用關系信息(即函數(shù)調(diào)用圖)、函數(shù)內(nèi)控制流圖信息、函數(shù)基本屬性信息三方面信息進行數(shù)值化處理,作為函數(shù)的特征向量;采用自編譯的、多平臺、帶符號表的函數(shù)集作為訓練樣本,對集成分類器進行訓練;計算待測函數(shù)與漏洞函數(shù)的各特征的相似度構成相似度向量,帶入集成分類器中進行預測,得到數(shù)值相似度。2)構造賦權二部圖,采用二部圖算法計算整體相似度。從函數(shù)調(diào)用圖中截取待比較的兩個函數(shù)的局部結構信息構成兩個結構子圖,截取的層數(shù)可以根據(jù)實際需要來確定。將兩個結構子圖分層抽象為賦權二部圖,其中節(jié)點集為兩個結構子圖對應層包含的函數(shù),邊集為任意兩個函數(shù)的相似程度,邊權為上一步計算得到數(shù)值相似度,然后采用二部圖匹配算法分層計算賦權二部圖的最大權匹配,加權求和作為待測函數(shù)與漏洞函數(shù)的整體相似度。3)根據(jù)基于roc曲線計算的判定閾值進行判定。獲得待測函數(shù)集與漏洞函數(shù)的整體相似度向量繪制roc曲線,取y-x曲線的最高點對應的閾值作為判定閾值,相似度大于判定閾值的函數(shù)被判定為疑似漏洞函數(shù),反之判定為正常函數(shù)。構成roc曲線的每個點為(x,y),那么(x,y-x)構成的曲線即為基于roc曲線的y-x曲線,其中x定義域為m。本發(fā)明可以獲得以下有益效果:本發(fā)明在計算待測函數(shù)與漏洞函數(shù)的數(shù)值相似度時,主要考慮了調(diào)用關系特征、??臻g特征、字符串特征、代碼規(guī)模特征、路徑序列特征、路徑基本特征,度序列特征、度基本特征,圖規(guī)模特征等9個方面特征,較為完整的反映了一個函數(shù)的典型特征,特征的提取不依賴特定的指令集,因此本發(fā)明可以對針對兩個不同架構編譯的二進制文件進行漏洞關聯(lián)。同時,在提取特征時,采用編寫ida插件的方式從ida分析結果中進行提取,而ida本身對不同架構的二進制文件進行逆向分析構造函數(shù)控制流圖時具有差異,本發(fā)明提出了函數(shù)控制流圖重構算法,一定程度上還原了函數(shù)控制流圖的真實結構,提高了函數(shù)特征提取的準確度。本發(fā)明在在融合函數(shù)的數(shù)值信息和結構信息時,采用了截取函數(shù)調(diào)用圖,構造賦權二部圖計算最大權匹配的方法。假設距離待檢函數(shù)越近的函數(shù)節(jié)點對匹配的貢獻越大,按距離待檢函數(shù)的跳數(shù)對函數(shù)節(jié)點進行分層,使用kuhn-munkres算法對單層函數(shù)節(jié)點進行最小二分圖匹配得到單層的相似度,最后將各層的相似度加權求和得到函數(shù)整體相似度。該方法在計算待匹配函數(shù)的整體相似度時,基于函數(shù)間的調(diào)用信息,考慮到了其他函數(shù)對的相似程度對待匹配函數(shù)對的影響。相比僅用數(shù)值的方法,更為客觀和準確。本發(fā)明與現(xiàn)有的技術比,不依賴特定的指令集,可以對不同架構的二進制文件進行漏洞關聯(lián),實現(xiàn)簡單,易于推廣。附圖說明圖1為方案流程示意圖;圖2為ida對不同架構下的函數(shù)分析的cfg圖差異較大示意圖,其中(a)針對arm架構編譯的busybox-1.20.0的mencap_main函數(shù)的cfg圖,(b)針對mips架構編譯的busybox-1.20.0的mencap_main函數(shù)的cfg圖;圖3為重構函數(shù)控制流圖示意圖;圖4為結構子圖分層示意圖;圖5為構造賦權二部圖示意圖;圖6為基于roc曲線確定最佳閾值示意圖。具體實施方式一種跨架構的二進制程序漏洞關聯(lián)方法,具體實施方式如下:1)編寫ida插件對二進制文件進行逆向分析,獲得待測函數(shù)庫以及函數(shù)基本屬性、函數(shù)調(diào)用圖和函數(shù)控制流圖。2)計算待測函數(shù)與漏洞函數(shù)的數(shù)值相似度。整個過程包括數(shù)值特征提取,相似度計算和神經(jīng)網(wǎng)絡預測相似度三個步驟。在數(shù)值特征提取階段,分別從函數(shù)基本屬性、函數(shù)調(diào)用圖和函數(shù)控制流圖三個方面進行數(shù)值特征提取。主要提取待測函數(shù)的調(diào)用關系特征、字符串特征、??臻g特征、代碼規(guī)模特征、路徑序列特征、路徑基本特征,度序列特征、度基本特征,圖規(guī)模特征等九方面特征。這九方面特征較為完整地反映了一個函數(shù)的典型屬性。分析函數(shù)調(diào)用圖,計算每一待測函數(shù)被其他函數(shù)調(diào)用的次數(shù)、計算該函數(shù)調(diào)用其他函數(shù)的次數(shù)及去重后的次數(shù),構成了調(diào)用關系特征。分析函數(shù)基本屬性,計算??臻g,構成??臻g特征;計算跳轉指令個數(shù)、指令個數(shù),代碼量,構成代碼規(guī)模特征;計算調(diào)用的字符串數(shù)量和調(diào)用的字符串集合,構成字符串特征。在對函數(shù)控制流圖進行分析之前,對不能直接采用ida分析的函數(shù)控制流圖(cfg圖)進行特征提取。在少數(shù)情況下,同一函數(shù)在不同架構下的cfg圖會有很大不同,比如busybox的memcap_main函數(shù),它在arm架構和mips架構下的cfg圖有很大差別,如圖2所示。這是由于,每種平臺的cpu指令集都由對應的ida處理器模塊負責處理。但各平臺處理器模塊生成cfg圖的策略并不相同,例如busybox的rmdir_main函數(shù),arm平臺bl指令對基本塊進行劃分,而mips平臺下的jal(同為函數(shù)調(diào)用指令)不對基本塊進行劃分。為了統(tǒng)一cfg圖的的基本塊劃分規(guī)則,我們需要對cfg圖進行重建,重構算法如下a)識別函數(shù)所有基本塊的頭尾地址和原始邊端點地址。b)按基本塊頭地址升序順序對所有基本塊進行排序,統(tǒng)計每個基本塊的入度和出度。c)按基本塊頭地址升序順序對基本塊從小到大進行掃描。如果第n個基本塊的出度為0且第n+1個基本塊入度為0,則合并這兩個基本塊為新的第n個基本塊,刪除原第n個和原第n+1個基本塊,并對以原第n+1個基本塊的頭地址為端點地址的邊進行重置,改為以第n個基本塊的頭地址作為端點地址;如果第n個基本塊的出度為0且第n+1個基本塊入度不為0,則添加一條由第n個基本塊指向第n+1個基本塊的邊,其端點信息為第n個基本塊的頭地址和端點信息為第n個基本塊的頭地址。d)直至掃描到最后一個基本塊,重構過程結束。用python實現(xiàn)的重構cfg圖算法源碼如下,其中輸入?yún)?shù)bblist指所有基本塊的頭尾構成的列表,edgelist是ida分析的所有原始邊的列表,startpoint是該函數(shù)入口地址,其中輸出todic是重建cfg圖所有邊構成的字典,bbdic是重建cfg圖后所有基本塊構成的字典。對busybox的memcap_main函數(shù)重建效果如圖3所示。分析函數(shù)控制流圖,計算每個節(jié)點(即基本塊)的出入度,構造cfg有向圖鄰接矩陣,將函數(shù)控制流圖轉化為無向圖,計算每個節(jié)點的度,構造cfg無向圖鄰接矩陣。對cfg有向圖鄰接矩陣和cfg無向圖鄰接矩陣進行度分析?;赾fg有向圖鄰接矩陣計算入度升序序列、出度升序序列,基于cfg無向圖鄰接矩陣計算度升序序列,三者構成度序列特征?;诙壬蛐蛄?,計算最大度、平均度和度的概率序列?;诙鹊母怕市蛄杏嬎銏D的熵,構造度基本特征;對cfg無向圖鄰接矩陣進行路徑分析,通過floyd算法或dijkstra算法計算任意兩個節(jié)點(即基本塊)的最小距離,構造路徑序列特征;計算圖平均路徑長度、圖直徑和圖半徑,構成路徑基本特征。對cfg有向圖鄰接矩陣進行基本屬性分析,計算節(jié)點數(shù)、邊數(shù)、圖的鏈路相率、圖密度、圖的聚類系數(shù),構成cfg圖規(guī)模特征。按以上步驟操作,總共提取函數(shù)的調(diào)用關系特征、字符串特征、棧空間特征、代碼規(guī)模特征、路徑序列特征、路徑基本特征,度序列特征、度基本特征和圖規(guī)模特征。在特征相似度計算階段,基于特征的表現(xiàn)形式,采用數(shù)值型相似度計算方法、基于字符串編輯距離算法的序列相似度計算方法和基于jaccard相似度的集合相似度計算方法,計算待比較函數(shù)的每個特征的相似程度作為集成分類器的輸入向量。在集成分類器預測整體相似度階段,首先采用自編譯的、多平臺、帶符號表的函數(shù)集作為訓練樣本,訓練集成分類器。具體方法是:選擇同一份源碼,選擇不同的編譯器,不同的優(yōu)化選項,針對不同的架構進行編譯,獲得多份二進制可執(zhí)行文件。對每一份二進制可執(zhí)行文件進行逆向分析,得到一函數(shù)庫并提取每個函數(shù)的多維特征?;谔卣鳎瑢Σ煌瘮?shù)庫間的每兩個函數(shù)計算相似度作為集成分類器的輸入向量。如果兩個函數(shù)名稱相同,則標簽為1,作為正樣本,如果兩個函數(shù)名稱不同,則標簽為0,作為負樣本。建立若干初始分類器。從初始樣本集中有放回的抽取80%的樣本構造若干獨立同分布的子訓練樣本集,作為每個分類器的訓練樣本。將對應的子訓練樣本集輸入分類器進行訓練,根據(jù)預測結果,調(diào)整分類器的參數(shù)直至預測結果符合要求,此時分類器訓練完畢。然后采用訓練好的集成分類器對數(shù)值相似度進行預測。對該漏洞函數(shù)和每個待測函數(shù)提取特征,計算相似度向量,作為測試樣本。用已經(jīng)訓練好的集成分類器中若干分類器進行預測得到若干預測值,取其加權平均作為最終預測值作為數(shù)值相似度。比如,如果需要得到mips-o2→arm-o2這種匹配模式的訓練樣本。步驟一:對openssl源碼針對mips架構,采用-o2優(yōu)化選項編譯一份二進制文件,命名為openssl-mips-o2;對openssl源碼針對arm架構,采用-o2優(yōu)化選項編譯一份二進制文件,命名為openssl-arm-o2。步驟二:對這兩份二進制文件分別進行逆向分析得到兩個函數(shù)庫。設openssl-mips-o2的函數(shù)庫共有m個函數(shù),名稱為x1-mips-o2,x2-mips-o2,……,xm-mips-o2;openssl-arm-o2的函數(shù)庫共有n個函數(shù),名稱為y1-arm-o2,x2-arm-o2,……,yn-arm-o2。對這兩個庫的所有函數(shù)計算特征,一共得到m+n條特征。步驟三:計算庫間函數(shù)相似度向量,得到m×n個相似度向量,如果xi=y(tǒng)j,那么可以認為openssl-mips-o2庫的函數(shù)xi-mips-o2與openssl-arm-o2庫的函數(shù)yj-arm-o2是同一個函數(shù),則標簽列為1,是正樣本,反之,認為是負樣本。步驟四:為了正負樣本均衡同時也為了增速,每次對100個openssl-mips-o2的函數(shù)和100個openssl-arm-o2的函數(shù),進行兩兩相似度計算和標簽標記,那么會得到100個正樣本和9900個負樣本。收集全部的正樣本和從9900個負樣本中隨機抽取100個作為負樣本。這樣就得到了min(m,n)個正樣本和同樣數(shù)量的負樣本,作為mips-o2→arm-o2這種匹配模式的初始樣本集。3)構造賦權二部圖,采用二部圖匹配算法(例如kuhn-munkres算法)計算整體相似度。整個算法步驟如下:a)從函數(shù)調(diào)用圖中截取待比較函數(shù)的局部結構信息構成兩個結構子圖,其中,截取的層數(shù)可以根據(jù)實驗效果來確定。b)將截取的結構子圖按離待比較函數(shù)的跳數(shù)分層(其中,如果結構子圖來自漏洞函數(shù)所在的二進制文件的函數(shù)調(diào)用圖,此處的待比較函數(shù)指漏洞函數(shù);如果結構子圖來自待測函數(shù)所在的二進制文件的函數(shù)調(diào)用圖,此處的待比較函數(shù)指待測函數(shù)),并按對待比較函數(shù)的重要程度來賦權重,如圖4所示。c)將兩個子圖對應層抽象為賦權完全二部圖,其中節(jié)點集為對應層包含的函數(shù),邊集為節(jié)點集中任意兩個函數(shù)的相似關系,邊權為對應兩函數(shù)的數(shù)值相似度,如圖5所示。這樣便得到了多個賦權二部圖。d)對每個賦權二部圖采用二部圖匹配算法分層計算每一層對應的最大權匹配作為對應層的相似度。e)對每層的相似度加權求和作為待比較函數(shù)的整體相似度。4)根據(jù)基于roc曲線計算的判定閾值進行判定。獲得待測函數(shù)集與漏洞函數(shù)的整體相似度向量繪制roc曲線。其中roc曲線橫軸是假陽率,即偽正例的比率(fp/(fp+tn));縱軸是真陽率,即真正例的比率(tp/(tp+fn))。roc曲線給出的是當閾值變化時假陽率和真陽率的變化情況,它可用于比較分類器的性能。理想情況下,最佳分類器應位于左上角,意味著分類器在假陽率很低時獲得了高的真陽率,即將真正的漏洞函數(shù)檢測了出來,而將很少的正常函數(shù)誤判為漏洞函數(shù)。越靠近左上角的roc曲線的點是錯誤最少的最佳閾值,其在訓練集上的假陽性和假陰性總數(shù)最少,即y-x最大的點,如圖6所示。因此我們將y-x曲線的最高點對應的閾值作為判定閾值,相似度大于判定閾值的函數(shù)被判定為疑似漏洞函數(shù),反之判定為正常函數(shù)。綜上所述,本發(fā)明公開了一種跨架構的二進制程序漏洞關聯(lián)技術。上面描述的應用場景及實施例,并非用于限定本發(fā)明,任何本領域技術人員,在不脫離本發(fā)明的精神和范圍內(nèi),可作各種更動和潤飾。因此,本發(fā)明的保護范圍視權利要求范圍所界定。當前第1頁12當前第1頁12
當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
怀集县| 青浦区| 米林县| 攀枝花市| 安阳市| 手游| 美姑县| 揭西县| 彭州市| 永泰县| 防城港市| 黎平县| 新乡市| 盐津县| 临洮县| 老河口市| 应城市| 门源| 雷州市| 凤山市| 利辛县| 嘉兴市| 黄冈市| 遂溪县| 额济纳旗| 平武县| 肇源县| 望城县| 瓦房店市| 威信县| 武鸣县| 乡城县| 池州市| 冕宁县| 新田县| 桃园市| 永济市| 秦皇岛市| 浏阳市| 乐清市| 页游|