亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于源碼與二進(jìn)制文件的漏洞挖掘技術(shù)

        2018-08-13 09:44:08
        軟件 2018年7期
        關(guān)鍵詞:源碼源代碼二進(jìn)制

        傅 濤

        ?

        基于源碼與二進(jìn)制文件的漏洞挖掘技術(shù)

        傅 濤

        (江蘇博智軟件科技股份有限公司,江蘇 南京 210044)

        基于源碼的漏洞挖掘分析技術(shù)是源代碼審核技術(shù),它通過對(duì)程序的源碼閱讀分析,檢測(cè)程序中可能存在的安全漏洞。而基于二進(jìn)制文件的漏洞挖掘分析技術(shù),則是著眼目標(biāo)文件中的函數(shù)、庫(kù)函數(shù)以及各種間接跳轉(zhuǎn),獲得程序的控制流圖,分析反匯編出來的代碼或者腳本語言,從而識(shí)別出可疑的匯編代碼序列,進(jìn)而發(fā)現(xiàn)漏洞信息,為科學(xué)實(shí)現(xiàn)漏洞挖掘提供有效思路。

        漏洞挖掘;源碼;二進(jìn)制文件;虛擬堆棧;動(dòng)靜態(tài)結(jié)合

        0 引言

        漏洞挖掘分析技術(shù)是指對(duì)未知漏洞的探索,綜合應(yīng)用各種技術(shù)和工具,盡可能地找出軟件中的潛在漏洞,然后對(duì)已發(fā)現(xiàn)漏洞的細(xì)節(jié)進(jìn)行深入分析,為漏洞利用、補(bǔ)救等處理措施作鋪墊。根據(jù)漏洞挖掘分析的自動(dòng)化程度,可分為手工分析、半自動(dòng)或自動(dòng)化分析;根據(jù)軟件源代碼的開放性,可分為白盒分析、黑盒分析和灰盒分析三類;根據(jù)目標(biāo)軟件的運(yùn)行狀態(tài),又可分為靜態(tài)分析和動(dòng)態(tài)分析。本文主要研究基于源碼的漏洞挖掘分析技術(shù)虛擬堆棧分析漏洞挖掘技術(shù)。

        1 基于源碼的漏洞挖掘分析技術(shù)

        基于源碼的漏洞挖掘分析技術(shù)是源代碼審核技術(shù),該技術(shù)是指對(duì)程序的源碼通過人工或者運(yùn)用半自動(dòng)化、自動(dòng)化工具進(jìn)行閱讀分析,檢測(cè)程序中可能存在的安全漏洞的關(guān)鍵點(diǎn)。目前使用最為廣泛的是詞法分析、控制流分析和數(shù)據(jù)流分析等。

        詞法分析的核心是特征數(shù)據(jù)庫(kù),特征數(shù)據(jù)庫(kù)中包含了從詞法、語法、語義等方面進(jìn)行分析得出的可能產(chǎn)生安全問題的函數(shù),如strcpy、gets、malloc等。再在特征數(shù)據(jù)庫(kù)的基礎(chǔ)上對(duì)程序進(jìn)行分析,尤其對(duì)那些囊括函數(shù)的地方進(jìn)行重點(diǎn)分析[1]。

        控制流分析主要是用來發(fā)現(xiàn)程序的執(zhí)行流與數(shù)據(jù)操作相關(guān)的特征。它的基本方法是對(duì)程序的基本塊進(jìn)行標(biāo)識(shí),標(biāo)識(shí)出程序最基本的模塊,以及模塊之間的調(diào)用關(guān)系。它包含了基本模塊和控制流程兩個(gè)部分。通過對(duì)基本模塊的分析,得出函數(shù)、變量、緩沖區(qū)等重要的信息,再結(jié)合對(duì)控制流程分析而得到的程序控制結(jié)構(gòu)的信息,進(jìn)行宏觀和微觀的分析。這種分析方法能夠得到比較全面的分析結(jié)果。

        而數(shù)據(jù)流分析是建立在控制流分析的基礎(chǔ)上的,在控制流分析得到程序的基本模塊和控制流程后,利用這些信息對(duì)程序的函數(shù)和進(jìn)程的數(shù)據(jù)信息進(jìn)行全局性的分析。其具體的實(shí)現(xiàn)方法是在通過建立程序各個(gè)節(jié)點(diǎn)的數(shù)據(jù)流方程,然后通過求解來收集系統(tǒng)的數(shù)據(jù)流信息。

        基于源碼的漏洞挖掘分析可以檢測(cè)出很多漏洞,但同時(shí)也存在很多漏報(bào)以及誤報(bào)?,F(xiàn)在市面上比較常見的檢測(cè)工具有很多,比如免費(fèi)開源的ITS4,F(xiàn)lawFinder,Splint以及一些商業(yè)軟件如Fortify等。

        ITS4[2]是第一款用于檢測(cè)軟件源碼中安全問題的代碼審計(jì)工具,它以命令行方式工作在Linux和 Unix 環(huán)境中的一種靜態(tài)掃描 C/C++語言源代碼中安全漏洞的簡(jiǎn)單工具,可以集成到軟件開發(fā)環(huán)境中。ITS4構(gòu)造了一種對(duì)安全具有威脅的模型結(jié)構(gòu)的數(shù)據(jù)庫(kù),然后使用詞法分析技術(shù)對(duì)源碼進(jìn)行對(duì)應(yīng)模式的搜索匹配。這類檢測(cè)技術(shù)的特點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單、算法效率高,但是由于沒有考慮到語法和語義層面的信息,容易出現(xiàn)漏報(bào)和誤報(bào)的情形。

        Flawfinder[3]主要用以審查C/C++源代碼然后以風(fēng)險(xiǎn)等級(jí)來報(bào)告可能存在的脆弱點(diǎn)(錯(cuò)誤)。它基于Unix/ Linux系統(tǒng),內(nèi)嵌了一個(gè)C/C++有問題的函數(shù)數(shù)據(jù)庫(kù),包括緩沖區(qū)溢出危險(xiǎn)(strcpy(), strcat()函數(shù)等),格式化字符串問題(printf()函數(shù)等),競(jìng)爭(zhēng)條件(access(),chown()函數(shù)等),shell元字符危險(xiǎn)(exec()函數(shù)家族,system()等),以及低劣隨機(jī)數(shù)值獲?。╮andom()函數(shù))。然后掃描源代碼文件,通過比對(duì)數(shù)據(jù)庫(kù)函數(shù),得得到潛在的安全漏洞,最后以HTML格式生成報(bào)告。

        Splint[4]是用來靜態(tài)檢查 C 語言程序安全弱點(diǎn)和編寫錯(cuò)誤的工具,能進(jìn)行多種常規(guī)的檢查,其中包括未使用的變量、使用未定義變量、無法執(zhí)行的代碼、忽略返回值、類型不一致、執(zhí)行路徑未返回、無限循環(huán)等錯(cuò)誤等。同時(shí)它還會(huì)通過在源碼中添加注記給出的附加信息,使其可以進(jìn)行功能更加強(qiáng)大的檢查。同一般的程序分析工具相比,Splint 可以檢查抽象邊界問題,全局變量非法使用問題等,因而可以作為檢測(cè)源代碼中緩沖區(qū)溢出漏洞的基礎(chǔ)之一。但是,由于條件約束分析的要求比較嚴(yán)格,所以檢測(cè)范圍不廣。

        Fortify是一款在編譯階段掃描C++/JAVA語言的若干種安全風(fēng)險(xiǎn)的源代碼審計(jì)工具,它是集合了Fortify開發(fā)工具包和擁有超過了500個(gè)漏洞比較代碼的Fortify源代碼分析服務(wù)的一套產(chǎn)品,其列舉所有可以采取行動(dòng)或執(zhí)行的計(jì)算機(jī)代碼的路徑,并且迅速發(fā)現(xiàn)計(jì)算機(jī)代碼的敏感區(qū),然后確定精確的漏洞限制。Fortify開發(fā)工具包會(huì)產(chǎn)生一個(gè)類似于編譯器生成的輸出,它會(huì)停在明顯會(huì)產(chǎn)生安全危險(xiǎn)的軟件開發(fā)函數(shù)前,會(huì)提示代碼使用了危險(xiǎn)函數(shù),將會(huì)發(fā)生什么以及為什么不要使用這些函數(shù)。此外,F(xiàn)ortify源代碼分析服務(wù)可以在整合構(gòu)造時(shí)生成軟件代碼存在的漏洞和安全錯(cuò)誤分析,也可以分析發(fā)現(xiàn)由軟件函數(shù)接受的外部輸入引起的漏洞,同時(shí)讓產(chǎn)品發(fā)現(xiàn)在離散的分段代碼中不存在但是結(jié)合其他脆弱的內(nèi)容便會(huì)產(chǎn)生的漏洞。

        2 基于二進(jìn)制文件的漏洞挖掘分析技術(shù)

        由于不是所有的程序都公開源代碼,很多商業(yè)的軟件只能得到已經(jīng)編譯好的二進(jìn)制文件,所以就需要逆向工程的處理,在二進(jìn)制級(jí)上進(jìn)行審核或者比對(duì)。

        基于二進(jìn)制文件的漏洞挖掘分析技術(shù),第一步是識(shí)別出目標(biāo)文件中的函數(shù)、庫(kù)函數(shù)以及各種間接跳轉(zhuǎn),獲得程序的控制流圖;然后再跟蹤分析反 匯編出來的代碼或者腳本語言,從而識(shí)別出一些可疑的匯編代碼序列,進(jìn)而發(fā)現(xiàn)一些存在漏洞的關(guān)鍵信息。

        目前基于二進(jìn)制文件的漏洞挖掘分析技術(shù)包括二進(jìn)制補(bǔ)丁比對(duì)、有向圖分析、污點(diǎn)數(shù)據(jù)傳播分析、IDC腳本分析技術(shù)等。

        2.1 二進(jìn)制補(bǔ)丁比對(duì)技術(shù)

        目前常用的二進(jìn)制補(bǔ)丁比對(duì)方法主要分為基于文本的比對(duì),基于匯編指令的比對(duì)以及基于結(jié)構(gòu)化的比對(duì)。前種方法只適用于若干字節(jié)變化的比較,不適合文件修改較多的情況。而第二種方法可以圖形化的顯示比對(duì)結(jié)果,同時(shí)可以發(fā)現(xiàn)一些非結(jié)構(gòu)化的變化(如緩沖區(qū)大小改變等),但是仍然存在輸出結(jié)果范圍大,誤報(bào)情況多和漏洞定位不精確的缺點(diǎn)。結(jié)構(gòu)化比對(duì)從邏輯結(jié)構(gòu)的層次上對(duì)補(bǔ)丁文件進(jìn)行分析,但是當(dāng)比對(duì)的兩個(gè)二進(jìn)制文件較大時(shí)程序的執(zhí)行效率會(huì)非常低。

        2.2 有向圖分析技術(shù)

        有向圖分析技術(shù)利用反匯編軟件IDA得到反匯編文件,然后直接通過廣度或者深度優(yōu)先搜索算法,搜索匯編代碼中的Ret,Call指令。根據(jù)軟件邏輯流程得出函數(shù)調(diào)用有向圖,用每個(gè)調(diào)用函數(shù)點(diǎn)作為有向圖的節(jié)點(diǎn),其中包含了函數(shù)的入口地址,局部變量使用情況,分配的堆??臻g大小,調(diào)用者傳遞的參數(shù)以及返回地址等信息。然后在有向圖中判斷每個(gè)調(diào)用函數(shù)是否進(jìn)行了參數(shù)邊界檢測(cè),特別是那些容易引發(fā)漏洞的函數(shù)調(diào)用。圖1顯示了一個(gè)簡(jiǎn)單的有向圖。

        需要指出的是,由于編譯器的不同,不同函數(shù)被編譯后采用的尋址方式又不盡相同,致使程序在反匯編后,提取相關(guān)函數(shù)的匹配搜索變得比較困難,而如何對(duì)編譯器進(jìn)行優(yōu)化又是一個(gè)難以解決的問題。

        圖1 簡(jiǎn)單有向圖示例

        2.3 污點(diǎn)數(shù)據(jù)傳播分析技術(shù)

        污點(diǎn)數(shù)據(jù)傳播分析技術(shù)可以分為靜態(tài)分析和動(dòng)態(tài)分析兩類,這里只對(duì)其靜態(tài)分析技術(shù)進(jìn)行介紹。

        靜態(tài)的污點(diǎn)數(shù)據(jù)傳播分析涉及數(shù)據(jù)流和控制流等多個(gè)方面,首先通過反匯編軟件得到反匯編文本,然后抽取其中的語法、語義特征,記錄數(shù)據(jù)流向,監(jiān)控污染數(shù)據(jù)的產(chǎn)生、傳播軌跡。

        對(duì)于沒有源碼的二進(jìn)制文件,污點(diǎn)數(shù)據(jù)傳播分析通過雙向數(shù)據(jù)流分析,從污點(diǎn)數(shù)據(jù)輸入開始,自上而下形成一棵傳播樹;再?gòu)姆磪R編文本中搜索可疑函數(shù)的調(diào)用,然后從這些函數(shù)調(diào)用的地方開始向上回溯,找到兩者相交的位置(可能不存在交點(diǎn)),從而產(chǎn)生污染流路徑。將污染數(shù)據(jù)標(biāo)記為“tainted”,通過程序語句傳播“tainted”數(shù)據(jù),凡是對(duì)“tainted”數(shù)據(jù)進(jìn)行添加、插入、合并等操作,那么它的結(jié)果值也肯定是“tainted”。最后再分析交點(diǎn)處指令,判斷是否進(jìn)行了污點(diǎn)數(shù)據(jù)的長(zhǎng)度檢查,進(jìn)而判斷漏洞是否存在。

        污點(diǎn)數(shù)據(jù)傳播分析技術(shù)在搜索字符串操作函數(shù)時(shí)受到編譯器優(yōu)化的影響,同時(shí)構(gòu)造完整的污染點(diǎn)數(shù)據(jù)也是一個(gè)難點(diǎn)。

        2.4 IDC腳本分析技術(shù)

        IDC 腳本分析技術(shù)主要是基于IDA Pro 的靜態(tài)分析技術(shù),在漏洞挖掘分析時(shí)對(duì)于緩沖區(qū)溢出漏洞方面的檢測(cè)要比前兩種技術(shù)更有效[5]。IDC腳本分析技術(shù)的關(guān)鍵是在匯編代碼中搜索諸如ReadFile,recv等數(shù)據(jù)輸入函數(shù)的調(diào)用,在這些函數(shù)后面如果能夠搜索到容易產(chǎn)生漏洞的關(guān)鍵函數(shù),比如strcpy(),sprintf()等函數(shù)的調(diào)用,則記錄相應(yīng)的內(nèi)存地址,并且檢查在調(diào)用函數(shù)前是否進(jìn)行了數(shù)據(jù)長(zhǎng)度的檢查,如果沒有就有可能存在潛在的安全漏洞。

        3 虛擬堆棧分析漏洞挖掘技術(shù)

        虛擬堆棧分析是挖掘緩沖區(qū)溢出漏洞常用的動(dòng)態(tài)分析技術(shù)[6]。它首先進(jìn)行格式化分析,然后在這基礎(chǔ)上通過動(dòng)態(tài)攔截軟件運(yùn)行時(shí)的可疑函數(shù)調(diào)用,創(chuàng)建記錄所有函數(shù)緩沖區(qū)使用情況的虛擬堆棧表;其次判斷緩沖區(qū)是否在堆中,如果緩沖區(qū)在堆中則定位堆指針,而如果緩沖區(qū)在棧中則通過查詢虛擬棧表,來獲得緩沖區(qū)位置、大小以及函數(shù)的返回地址等信息;最后將得到的信息與限定條件進(jìn)行比較,得到分析的結(jié)果,進(jìn)而判斷是否存在安全問題,圖2顯示了虛擬堆棧分析的流程。

        雖然虛擬堆棧分析的方法比較簡(jiǎn)單,但是在虛擬堆棧分析中,如果沒有后期人工分析的有效介入,還是很難實(shí)現(xiàn)漏洞的挖掘,因此,漏洞挖掘的成功率在很大程度上依靠人的經(jīng)驗(yàn),要實(shí)現(xiàn)系統(tǒng)化困難很多。

        圖2 虛擬堆棧分析流程

        4 基于靜、動(dòng)態(tài)結(jié)合的漏洞挖掘分析技術(shù)

        單純地通過靜態(tài)或者動(dòng)態(tài)地分析挖掘漏洞,總是不可避免的存在一些缺陷和問題。動(dòng)態(tài)分析和靜態(tài)分析又有著各自的優(yōu)勢(shì),可以通過將靜態(tài)與動(dòng)態(tài)分析方法相結(jié)合進(jìn)行漏洞挖掘分析,以求更好的彌補(bǔ)各自的缺陷,發(fā)揮各自的優(yōu)勢(shì),達(dá)到更好地漏洞挖掘分析效果。

        下面以緩沖區(qū)溢出漏洞的挖掘分析為例,詳細(xì)闡述這種方法的處理流程,具體方法為:

        (1)首先,對(duì)于有源代碼的軟件程序,將 目標(biāo)程序通過源代碼掃描軟件進(jìn)行分析,查找目 標(biāo)程序中存在的容易發(fā)生緩沖區(qū)溢出的函數(shù),比如strcpy()、sprintf()等,如果發(fā)現(xiàn)直接進(jìn)行修改直至沒有。然后將目標(biāo)程序進(jìn)行編譯,編譯成為可以執(zhí)行的二進(jìn)制文件,進(jìn)而轉(zhuǎn)為執(zhí)行第二步的漏洞挖掘分析。

        (2)對(duì)于沒有源代碼的二進(jìn)制文件,通過反匯編軟件獲得反匯編代碼,然后根據(jù)strcpy()、sprintf()等函數(shù)的特征代碼在目標(biāo)軟件的反匯編代碼中搜索strcpy()、sprintf()等容易發(fā)生緩沖區(qū)溢出的函數(shù)。再結(jié)合IDA或者Ollydbg 動(dòng)態(tài)加載目標(biāo)軟件,接著在所有搜索到的關(guān)鍵函數(shù)處設(shè)置斷點(diǎn),通過改變輸入數(shù)據(jù)不斷觀察調(diào)試器異常行為,最后確認(rèn)脆弱點(diǎn)。

        5 結(jié)語

        本文討論了基于源碼、基于二進(jìn)制文件和基于靜以及動(dòng)態(tài)結(jié)合的漏洞挖掘分析技術(shù)。不同的漏洞挖掘技術(shù)在漏洞挖掘分析中存在不同的特點(diǎn),將靜態(tài)分析與動(dòng)態(tài)分析相結(jié)合的漏洞挖掘分析方法相可以更好地發(fā)揮各自的優(yōu)勢(shì),達(dá)到更好地漏洞挖掘分析效果。

        [1] 周英. 基于詞法分析的源代碼自動(dòng)分析技術(shù)[J]. 計(jì)算機(jī)與信息技術(shù), 2010(4): 61–62.

        [2] Cigital. ITS4. [EB/OL]. http://www.cigital.com/its4.

        [3] Cigital. FlawFinder. [EB/OL]. http://www.dwheeler.com/ flaw-finder.

        [4] Splint. [EB/OL]. http://splint.org/.

        [5] 唐正軍. 網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[M]. 北京: 電子工業(yè)出版社, 2002: 103-251.

        [6] 吳晨, 張量, 張靜. ASP. NET+SQLSERVER 數(shù)據(jù)庫(kù)開發(fā)與實(shí)例[M]. 北京: 清華大學(xué)出版社, 2004: 351–422.

        [7] 徐欣明. 一種緩沖區(qū)溢出漏洞自動(dòng)挖掘及漏洞定位技術(shù)[D]. 華中科技大學(xué)碩士論文, 2008.

        [8] 曹軍. Wnidows危急級(jí)漏洞挖掘及分析技術(shù)研究[D]. 四川大學(xué)碩士學(xué)位論文, 2006.

        [9] 羅鴻彥. 基于逆向分析的緩沖區(qū)溢出漏洞挖掘技術(shù)[D]. 上海交通大學(xué)工學(xué)碩士學(xué)位論文, 2008.

        [10] 史尤昭. 數(shù)據(jù)挖掘技術(shù)研究與應(yīng)用[J]. 軟件, 2015, 36(11): 38-42.

        [11] 印杰, 李千目. 軟件代碼漏洞的電子取證技術(shù)綜述[J]. 軟件, 2015, 36(12): 49-59.

        Vulnerability Mining based on Source Code and Binary Files

        FU Tao

        (Jiangsu Elex Software Technology Co., LTD, Nanjing 210044)

        The vulnerability mining analysis technology that based on source code is the source code review technical,which attempts to detect possible security vulnerability by reading and analyzing the source code. Moreover, vulnerability mining that based on binary files, which is aimed at the functions, library functions, and various indirect jumps of the object file, obtaining the control flow diagram of the program and analyzing the disassembled code or script language. Accordingly, this vulnerability mining can identify the suspicious assembly code sequence, and then discover the vulnerability information, which provide effective ideas for the scientific implementation of vulnerability mining.

        Vulnerability mining; Source code; Binary files; Virtual stack; Dynamic and static combination.

        TP311

        A

        10.3969/j.issn.1003-6970.2018.07.019

        傅濤(1980-),男,博士,副研究員,高級(jí)工程師,曾獲中國(guó)人民解放軍和江蘇省政府科技進(jìn)步獎(jiǎng)。主要研究方向:計(jì)算機(jī)網(wǎng)絡(luò),信息安全。

        本文著錄格式:傅濤. 基于源碼與二進(jìn)制文件的漏洞挖掘技術(shù)[J]. 軟件,2018,39(7):95-97

        猜你喜歡
        源碼源代碼二進(jìn)制
        人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
        基于網(wǎng)頁(yè)源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲代碼生成方法
        基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測(cè)方法
        用二進(jìn)制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
        基于TXL的源代碼插樁技術(shù)研究
        企業(yè)如何保護(hù)源碼
        有趣的進(jìn)度
        二進(jìn)制在競(jìng)賽題中的應(yīng)用
        軟件源代碼非公知性司法鑒定方法探析
        基于數(shù)據(jù)結(jié)構(gòu)教輔系統(tǒng)的實(shí)驗(yàn)課程改革
        日韩欧美第一页| 在线观看免费无码专区| 精品人妻伦九区久久aaa片| 手机看片久久国产免费| 亚洲中文字幕有码av| 亚洲一区二区三区地址| 国产乱人激情h在线观看| 可以免费观看的毛片| 中文字幕精品永久在线| 蜜桃av人妻精品一区二区三区| 久久99精品久久水蜜桃| 91久久青青草原线免费| 亚洲精品中文有码字幕| 国产一区av男人天堂| 亚洲一区二区三区播放| 四虎精品免费永久在线| 日本二区三区视频在线观看| 欧美高清精品一区二区| 国产精品va无码一区二区| 国产视频网站一区二区三区| 日本视频一区二区三区| 国内少妇毛片视频| av人摸人人人澡人人超碰小说| 亚洲亚洲亚洲亚洲亚洲天堂| 日韩中文字幕一区二区二区| 欧美亚洲熟妇一区二区三区| 国产精品偷伦视频免费手机播放| 亚洲黑寡妇黄色一级片| 欧美性猛交aaaa片黑人| 一本大道久久香蕉成人网| 2020最新国产激情| 亚洲国产精品高清在线| 免费人成视频在线| 69天堂国产在线精品观看| 亚洲精品一区二区网站| 免费无码av一区二区| 亚洲丁香婷婷综合久久小说| 国产伦一区二区三区久久| 永久天堂网av手机版| 亚洲精品成人片在线观看| 久久精品人妻嫩草av蜜桃|