• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      軟件漏洞分析中的脆弱點定位方法*

      2015-06-21 12:39:37蔡軍鄒鵬楊尚飛何駿裝備學院復雜電子系統(tǒng)仿真實驗室北京046海軍裝備研究院北京006
      國防科技大學學報 2015年5期
      關鍵詞:污點緩沖區(qū)字節(jié)

      蔡軍,鄒鵬,楊尚飛,何駿(.裝備學院復雜電子系統(tǒng)仿真實驗室,北京046;.海軍裝備研究院,北京006)

      軟件漏洞分析中的脆弱點定位方法*

      蔡軍1,鄒鵬1,楊尚飛2,何駿1
      (1.裝備學院復雜電子系統(tǒng)仿真實驗室,北京101416;2.海軍裝備研究院,北京100161)

      針對二進制程序漏洞成因復雜難以分析的問題,提出運用污點分析的軟件脆弱點定位方法,并實現了一個工具原型SwordChecker。以動態(tài)污點追蹤為基礎,依據漏洞模式通過特征匹配來定位軟件中的脆弱點,運用二分查找定位影響脆弱點的敏感字節(jié)。實驗表明,使用SwordChecker能夠精確快速識別定位軟件中三種類型的脆弱點,已成功分析了多個已公開漏洞的成因,并已輔助挖掘出幾個未公開漏洞。

      污點分析;脆弱點定位;二分查找

      當今時代是信息時代,社會信息化是當今世界發(fā)展的潮流,信息系統(tǒng)已經成為社會發(fā)展的重要戰(zhàn)略資源,信息系統(tǒng)的安全性也越來越重要。軟件安全是信息系統(tǒng)安全的重要組成部分,軟件漏洞則是安全問題的根源之一,層出不窮的軟件安全漏洞給國民經濟和社會生活帶來了負面的影響。軟件漏洞檢測、分析及利用成為信息安全領域的一個研究熱點。

      軟件漏洞是軟件生命周期中涉及安全的設計錯誤、編碼缺陷和運行故障[1]。將對軟件進行已公開漏洞的發(fā)現和未知漏洞的發(fā)掘的技術稱為軟件漏洞檢測技術,將分析漏洞形成原因及利用價值的技術稱為漏洞分析技術,將利用漏洞實施攻擊的技術稱為漏洞利用技術。當前研究較多的是自動化的軟件漏洞檢測技術,涌現出以各種模糊器[2-6]為代表的大量的自動化的漏洞檢測工具,而對漏洞分析和漏洞利用的研究還處于起步階段,仍以手工分析為主,缺乏良好的自動化工具,蔡軍等的目標就是研究自動化的軟件漏洞分析技術。

      脆弱點定位是軟件漏洞分析中的關鍵環(huán)節(jié),所謂脆弱點是指直接導致軟件漏洞產生的某條指令或某個函數。脆弱點受用戶輸入影響,一般情況下不影響軟件正常運行,但在注入特定輸入的情況下會導致軟件產生異常,形成漏洞。脆弱點與漏洞類型相關,漏洞種類很多,每一種漏洞形成的具體原因都不同,其脆弱點類型也不同。蔡軍等主要研究輸入相關漏洞的脆弱點定位。

      蔡軍等提出一種基于污點分析的軟件脆弱點定位方法,核心思想為:(1)以細粒度的動態(tài)在線污點追蹤作為脆弱點定位的基礎;(2)基于已公開漏洞總結漏洞模式,基于漏洞模式建立規(guī)則,查找定位脆弱點;(3)基于二分查找算法定位影響脆弱點的敏感輸入字節(jié)。

      1 相關工作

      雖然軟件開發(fā)人員尤其是通用軟件制造商對軟件安全越來越重視,也加大了軟件發(fā)布前的安全性測試力度,但是軟件漏洞依然或多或少地存在,幾乎不可能完全避免。

      以各種模糊器為代表的軟件漏洞檢測工具通常只能發(fā)現導致軟件崩潰(或異常)的測試用例,但是崩潰的具體原因常常不得而知,需要進一步的分析。簡而言之,發(fā)現軟件崩潰只能算是找到了漏洞的半成品,只有分析清楚了崩潰的原因才算是真正發(fā)現了一個漏洞。目前的軟件漏洞分析以借助于調試器手工分析為主,缺少自動化的分析工具。由于軟件漏洞成因復雜,手工分析十分煩瑣,且需要研究人員具備極強的專業(yè)知識和豐富的經驗。因此,有必要研究自動化的軟件漏洞分析技術來幫助研究人員分析漏洞成因。

      對自動化的軟件漏洞分析的研究還不多。徐欣民[7]提出了一種基于靜態(tài)分析結合動態(tài)跟蹤調試的緩沖區(qū)溢出漏洞定位技術,以一種基于函數調用的緩沖區(qū)溢出漏洞模型為基礎,通過動態(tài)跟蹤調試捕獲溢出并與靜態(tài)反匯編結果比對來定位導致溢出的函數調用。楊濱誠等[8]提出了一種基于數據流分析和邊界檢查的緩沖區(qū)溢出定位技術,通過數據流和別名分析識別可能受外部輸入影響的指針和數組,通過邊界檢查定位溢出。史勝利[9]提出了一種基于代碼插樁的緩沖區(qū)溢出漏洞定位技術,通過代碼插樁捕獲信息,根據系統(tǒng)提供的異常信息,分析產生異常的指令,獲取破壞的內存點,進而查找漏洞所在點。楊羨環(huán)[10]提出了一種基于函數調用序列的漏洞定位技術,通過多次程序執(zhí)行和面向方面編程框架獲取函數調用序列,通過分析函數調用序列定位漏洞。以上幾種方法均只有一個籠統(tǒng)的思路,難以實現精確定位,只能分析緩沖區(qū)溢出漏洞,且未能分析真實應用軟件的漏洞,自動化程度不高。

      2 污點分析概述

      污點分析[11-15]是一種新興的程序分析技術,其主要思想是將用戶輸入作為污點源,在程序執(zhí)行過程中追蹤污點源的傳播,所有直接或間接受污點源影響的變量都是被污染的變量,稱為污點數據。用污點分析來分析軟件漏洞的原理是:任何用戶可控的變量都是不安全的,當一個被污染的變量被用來執(zhí)行危險操作時就可能產生安全漏洞。

      污點分析從是否需要運行軟件的角度可以分為兩種類型:靜態(tài)污點分析和動態(tài)污點分析。靜態(tài)污點分析工作在源代碼級,通過分析程序源代碼來推衍污點的傳播。動態(tài)污點分析則是在程序實際運行過程中追蹤污點的傳播。靜態(tài)污點分析的最大缺陷是依賴于源代碼,然而大多數時候源代碼是不可得到的,且靜態(tài)的污點分析由于缺乏運行時信息,誤報也很多。因此,動態(tài)的污點分析更加實用,但是其實現比較復雜,SwordChecker使用的是動態(tài)污點分析。

      動態(tài)污點分析的實現主要有兩種方式,即通過硬件實現和通過軟件實現。硬件實現方式雖然效率較高,但是需要對硬件進行擴展,實現難度很大且成本高,因而并不常用。軟件實現方式一般通過動態(tài)二進制插樁來實現。動態(tài)二進制插樁是在程序執(zhí)行過程中,在程序實際執(zhí)行的某個基本執(zhí)行單元(指令、基本塊、函數等)前后插入分析代碼來獲取想要的運行時信息,通常借助于二進制插樁平臺來實現?,F有的二進制插樁平臺主要有三個:DynamoRIO[16],Valgrind[17]和Pin[18]。SwordChecker使用Pin來實現。

      3 運用污點分析的脆弱點定位

      運用污點分析的脆弱點定位方法分為三個步驟:第一步是追蹤用戶輸入即污點源在程序執(zhí)行過程中的傳播,第二步是定位程序中的脆弱點,第三步是定位輸入中影響脆弱點的敏感字節(jié)。

      3.1 Pin的二進制程序在線污點追蹤

      Pin是Intel公司研發(fā)的一個動態(tài)二進制插樁平臺,它允許在可執(zhí)行程序的任意位置插入任意代碼,并且代碼在程序運行時動態(tài)添加??梢园裀in比作一個超級即時編譯器,這個超級編譯器的輸入不是字節(jié)碼而是一個可執(zhí)行程序。Pin攔截可執(zhí)行程序要執(zhí)行的第一條指令,并將以這條指令開始的一個直線代碼序列編譯成新的代碼在Pin虛擬機里執(zhí)行,新的代碼和原始代碼基本一致。遇到跳轉指令時,Pin重新接管程序,再編譯下一段要執(zhí)行的代碼??蓤?zhí)行程序要執(zhí)行的所有代碼都被編譯成了新的代碼在Pin虛擬機里執(zhí)行,原始代碼僅供參考,這樣Pin就向用戶提供了向目標程序注入它們自己代碼的機會。

      Pin的結構如圖1所示[19],可以看到Pin由虛擬機、代碼緩存器和插樁API三個部分構成。插樁API是Pin提供給用戶的接口,用戶可以利用它們來編寫自己的插樁工具,稱為“Pintool”;代碼緩存器用來緩存由原始代碼編譯而來的新代碼,這樣可以避免重復編譯,提高效率;虛擬機用來執(zhí)行新代碼。虛擬機又由即時編譯器、仿真器和分派器構成,三者在Pin控制應用程序后通過互相協(xié)同來執(zhí)行程序,即時編譯器負責編譯原始代碼和插樁用戶代碼,分派器負責調度代碼的執(zhí)行,仿真器負責解釋那些不能由虛擬機直接執(zhí)行的指令,如系統(tǒng)調用。

      圖1 Pin結構圖Fig.1 Architecture of Pin

      基于Pin的在線污點追蹤是借助Pin在程序運行過程插入分析代碼來實現污點追蹤邏輯。污點追蹤主要包含污點引入和污點傳播兩個過程。3.1.1污點引入

      由于程序大部分時候都在執(zhí)行與輸入無關的指令,如加載動態(tài)鏈接庫、共享庫等,需要決定在程序執(zhí)行的什么地方來引入污點源,這就是污點引入。污點引入的時刻實際上是程序剛開始操作污點源的時刻。污點源的種類主要有三種,即文件、網絡數據包和命令行參數(常見于Linux系統(tǒng)),如使用Microsoft Word打開一個.doc文件,這個.doc文件就可以作為污點源。

      使用Pin來實現污點引入的方法是通過Pin提供的插樁API來劫持程序執(zhí)行過程中的打開和讀取污點源的系統(tǒng)調用,插入污點引入代碼。如使用文件作為污點源,則需劫持open,read,readv等讀文件相關系統(tǒng)調用,如使用網絡數據包作為污點源,則需劫持socket,accept,recv等socket相關系統(tǒng)調用。SwordChecker當前主要支持文件作為污點源。

      在使用文件作為污點源時,可以將整個文件設置為污點源,也可以將文件中的部分字節(jié)設置為污點源。SwordChecker允許用戶通過一系列參數來定制污點源。對于文件污點源,使用三個參數:“-tf”,“-to”和“-ts”?!?tf”參數指示了需要被設置為污點的文件,“-to”參數指示了污點文件中第一個需要被設置為污點源的字節(jié)的偏移量,“-ts”參數指示了以偏移量為開始需要被設置為污點的字節(jié)數目。

      3.1.2 污點傳播

      污點傳播是在污點引入后,根據一定的傳播策略追蹤污點源被程序指令進行的復制和更改。污點數據被指派一個污點標簽,污點標簽根據指令的語義從原操作數傳播到目的操作數。污點傳播策略直接影響整個污點傳播過程的正確性。

      在污點傳播時有兩個基本問題。一個問題是污點傳播粒度,指最小的污點傳播單元。選擇一個合適的污點傳播粒度很重要。如果粒度選擇太大,如大到一片連續(xù)的內存塊,容易造成污點數據丟失或是不精確的污點傳播。相反,粒度選擇太小,如小到一個位(bit),則容易導致污點傳播過度擴散,且污點傳播的實現邏輯也會變得相當復雜。SwordChecker選取字節(jié)作為污點傳播粒度,因為大部分指令都以字節(jié)為基本單位進行運算,且在大部分計算機體系結構中,最小的內存尋址單元也是字節(jié)。相對于傳統(tǒng)的以四字節(jié)內存單元為最小污點傳播單元的污點追蹤,SwordChecker實施的是更細粒度的污點追蹤。

      另一個問題是污點標簽大小。每一個污點傳播單元都將被指派一個污點傳播標簽。最小的污點標簽大小可以是一個位。如,位為1代表這個污點單元被污染了,位為0代表未被污染。大的標簽雖然功能更多,因為它允許不同類型的數據被唯一標記,但是大的標簽需要更加復雜的傳播邏輯和更大的存儲空間。這一方面會顯著增加內存消耗,另一方面會大幅降低污點追蹤速度。SwordChecker的目標是快速的在線污點追蹤,在不影響污點傳播精度的前提下越快越好,因此選擇一個位大小的標簽。

      在二進制級別上,有兩類對象可被污染:內存位置和寄存器。因此,SwordChecker在兩類數據結構中存儲污點標簽。一個數據結構是“mem_taint_map”,它為每個可尋址的內存單元維持一個位作為標簽。另一個數據結構是“reg_ taint_map”,它為每一個32位寄存器維持一個字節(jié)來存儲標簽,該字節(jié)的低四位存儲了寄存器的四位污點標簽。

      關于污點傳播策略,SwordChecker主要考慮三類指令的污點傳播:(1)數據復制指令(如MOV,PUSH,POP等)。針對這類指令,復制源操作數的標簽到目的操作數。(2)數據運算指令(如ADD,SUB,AND,SHL等)。針對這類指令,將源操作數和目的操作數的標簽一起運算來更新目的操作數的標簽。(3)特殊指令。一些特殊指令可能會導致操作數的污點標簽被清除,如CPUID指令,它是intel IA32架構下獲得CPU信息的匯編指令,可以得到CPU類型、型號、制造商信息、商標信息、序列號、緩存等一系列與CPU相關的東西。它使用eax作為輸入參數,eax,ebx,ecx,edx作為輸出參數,執(zhí)行該指令后,這幾個寄存器都將被立即數填充,而立即數不是污點數據。

      3.2 漏洞模式的脆弱點定位

      所謂漏洞模式是指不同類型漏洞的特征。漏洞類型不同,其脆弱點類型也不同。SwordChecker適用的漏洞類型主要為輸入相關漏洞,所謂輸入相關漏洞是指那些能夠由特定的輸入觸發(fā)的漏洞,這個輸入是由用戶提供的,可以是文件、網絡數據包,也可以是鍵盤輸入。輸入相關漏洞主要包括除0漏洞、整數溢出漏洞、緩沖區(qū)溢出漏洞等。SwordChecker根據漏洞模式建立規(guī)則,通過污點檢查來實現脆弱點的定位,即檢查是否有安全敏感操作操作了污點數據。

      SwordChecker當前支持以下幾種類型的脆弱點定位。

      3.2.1 除法指令

      除法指令是除0漏洞的脆弱點。除0漏洞是指在做除法運算時除數為0導致軟件出現除0異常,這種漏洞經常發(fā)生在一個非預期的值被提供給程序,然后用這個值來計算物理維度,如大小、長度、寬度和高度時。圖2是含有除0漏洞的一段簡單代碼,變量a和b的值從一個輸入文件中讀取,如果a>b且a-b=100,就會在代碼段第2行產生除0異常,因此這段代碼的第2行就是一個脆弱點(注意不是所有的除法操作都是脆弱點,只有受輸入影響的除法操作才是)。

      圖2 含有除0漏洞的代碼片段Fig.2 Code fragment including a division by zero

      要定位這一類脆弱點,只需借助于Pin的API“INS_AddInstrumentFunction”來實施指令級插樁,插入分析代碼,如果是div和idiv指令就檢查它們的除數是否被污染。如果除數存放在內存中,則從mem_taint_map查找對應的污點標簽看是否為1,如果除數存放在寄存器中,則檢查reg_taint_map。

      3.2.2 內存操作函數

      內存操作函數(如malloc,calloc,memcpy等)是整數溢出漏洞的脆弱點。整數溢出是指算術運算的結果超出了整型變量能夠表示的值的范圍(或大于最大值,或小于最小值)。并不是所有的整數溢出都會產生安全問題,只有當溢出值被用來作為安全敏感函數的參數時,才會產生漏洞。例如,將一個溢出值用來作為內存分配函數malloc代表分配內存大小的參數時,就會導致所分配的內存小于實際所需的內存,最終可能導致緩沖區(qū)溢出。

      圖3是含有整數溢出漏洞的一段代碼,整數變量a和b的值也是由用戶輸入決定,而整數變量e的值則由a和b決定。顯然,如果沒有溢出檢查,變量e很可能會溢出。更進一步,如果一個溢出的e被用作內存分配函數“malloc”的參數(第3行),就很有可能導致一個漏洞,因此這段代碼的第3行就是一個脆弱點。

      圖3 含有整數溢出漏洞的代碼片段Fig.3 Code fragment including an integer overflow

      要定位這一類脆弱點,只需借助于Pin的API“RTN_AddInstrumentFunction”來實施函數級插樁,插入分析代碼,檢查函數的有關參數是否為污點數據。以calloc函數為例,其原型為“void *calloc(size_t n,size_t size)”,其功能是在內存的動態(tài)存儲區(qū)中分配n個長度為size的連續(xù)空間,函數返回一個指向分配起始地址的指針;如果分配不成功,返回NULL。由于n過大和size過大都可導致溢出,所以在分析代碼中需要檢查n和size是否被污染。

      3.2.3 字符串操作函數

      字符串操作函數(如strcpy,strcat,sprintf,vsprintf,gets等)是緩沖區(qū)溢出漏洞的脆弱點。緩沖區(qū)溢出可能是最眾所周知的一種漏洞。當一個程序試圖將比給定內存塊更大的數據放入這塊內存時就會發(fā)生緩沖區(qū)溢出,溢出會導致在分配內存之外寫數據,進而導致程序崩潰或執(zhí)行惡意代碼。雖然大部分軟件開發(fā)人員都知道緩沖區(qū)溢出,但這種漏洞并不好檢測。

      造成緩沖區(qū)溢出的主要原因是不完整或不恰當的對用戶輸入的檢查。圖4是含有緩沖區(qū)溢出漏洞的一段代碼,字符串str的值是輸入文件的一行文本,在示例代碼的第5行,函數strcpy直接復制“str”的內容到“buffer”,只要“str”的長度大于50,就會導致“buffer”溢出,因此這段代碼的第5行就是一個脆弱點。

      圖4 含有緩沖區(qū)溢出漏洞的代碼片段Fig.4 Code fragment including a buffer overflow

      要定位這一類脆弱點,也是借助于Pin的API“RTN_Add InstrumentFunction”來實施函數級插樁,插入分析代碼,檢查函數的有關參數是否為污點數據。以strcpy函數為例,其原型為“extern char*strcpy(char*dest,const char*src)”,其功能是把從src地址開始且含有NULL結束符的字符串復制到以dest開始的地址空間。在插入的分析代碼中需要檢查dest和size的地址以及它們指向的內存地址是否被污染。

      3.3 二分查找的敏感字節(jié)定位

      上一步的目的是檢查程序是否存在脆弱點,實際上是將整個輸入文件都作為污點源來進行污點追蹤,然后檢查是否有安全敏感操作來操作污點數據。如果上一步檢測出有脆弱點存在,則接下來進一步定位輸入文件中影響脆弱點的敏感字節(jié)。例如,圖2中變量a和b的值影響第2行代碼中除法操作的除數值,則輸入文件中影響a和b的值的字節(jié)就是要定位的敏感字節(jié)。

      SwordChecker使用二分查找算法來定位敏感字節(jié),算法通過shell腳本編程實現。算法流程如圖5所示,具體步驟如下:

      Step1:獲取輸入文件大小Size,初始化文件偏移量Low=0,High=Size,Low代表下限,High代表上限,最終定位的敏感字節(jié)位置在Low與High之間(一般為4個字節(jié))。

      圖5 敏感字節(jié)的二分查找定位算法Fig.5 Binary search algorithm for sensitive bytes localization

      Step2:檢查是否滿足終止條件Low>High-3,如果滿足則輸出Low,High。

      Step3:計算Low,High之間的中間位置Mid= (Low+High)/2,檢查敏感字節(jié)是在[Low,Mid]之間還是在[Mid,High]之間(分別將輸入文件的這兩個區(qū)間設為污點源,看是否有指定的脆弱點VName出現),如果敏感字節(jié)在[Low,Mid]之間,則High=Mid,如果敏感字節(jié)在[Mid,High]之間,則Low=Mid。

      Step4:重復Step2,Step3。

      4 實驗分析

      實驗分為兩類,一是用SwordChecker來分析定位已公開漏洞的脆弱點,主要從國際上知名的公開漏洞庫中選取一些真實漏洞作為測試對象;二是用SwordChecker來輔助挖掘未公開漏洞(即0day漏洞),主要選取一些運行在Linux上的常用真實應用軟件作為測試對象。所有實驗均在Ubuntu 12.04 32位系統(tǒng)上進行。

      4.1 已公開漏洞脆弱點定位

      首先,從國際上著名的公開漏洞庫Common Vulnerabilities and Exposures(CVE)[20],Open Source Vulnerability Database(OSVDB)[21],ExploitDatabase(EDB)[22]里選取了一些真實的軟件漏洞來對SwordChecker進行測試,實驗結果見表1。選取的每個漏洞都在EDB里有一個POC (Proof of Concept)文件可供下載,即選取的每個漏洞都可以由對應的POC文件觸發(fā)。表1的第一列是漏洞在漏洞庫中的編號,如CVE-2014-1684指CVE中編號為2014-1684的漏洞,OSVDB-ID-88610指OSVDB中編號為88610的漏洞,EDB-ID-7812指EBD中編號為7812的漏洞。

      表1 公開漏洞脆弱點定位Tab.1 Vulnerable spots localization of several open vulnerabilities

      以OSVDB-ID-88610漏洞為例進行分析。該漏洞是多媒體播放器Totem Movie Player(一套在類Unix操作系統(tǒng)上運行的多媒體播放器,也是Ubuntu系統(tǒng)的預設影片播放器)上的一個除0漏洞,軟件版本號為3.4.3,漏洞現象如圖6所示,用該軟件(程序名為totem)打開POC文件poc1.avi時發(fā)生浮點數例外崩潰退出。

      圖6 OSVDB-ID-88610漏洞現象Fig.6 Phenomenon of OSVDB-ID-88610

      用SwordChecker對該漏洞進行分析的結果如圖7所示。該軟件有兩個脆弱點,一個是“div dword ptr[esp+0x1c]”指令(地址為0x952c8372),一個是“idiv ecx”指令(地址為0x8c594e12),這兩條指令的操作數都是污點數據,直接導致漏洞產生的是idiv指令。SwordChecker進一步分析出影響這兩個脆弱點的敏感字節(jié)分別為POC文件的第17~20字節(jié)和第4423~4424字節(jié)。

      從表1可以看出,CVE-2014-1684的脆弱點為div指令,敏感字節(jié)為第123~126字節(jié);CVE-2012-5470的脆弱點為memcpy和malloc函數,敏感字節(jié)分別為第1~4和第84~87字節(jié);CVE-2007-4938的脆弱點為calloc,敏感字節(jié)為169~172,225~228;EDB-ID-7812的脆弱點為memcp,敏感字節(jié)為第13~16字節(jié)。另外,在實驗中還發(fā)現一個規(guī)律,敏感字節(jié)只占輸入文件的很小一部分(如CVE-2007-4938的POC文件大小為46 956 236B,但敏感字節(jié)只有8個),且一般位于文件的頭部,大體在前1000個字節(jié)以內??稍谖募那?000個字節(jié)里運用二分查找算法定位。

      圖7 OSVDB-ID-88610漏洞的分析結果Fig.7 Analysis result of OSVDB-ID-88610

      4.2 脆弱點定位輔助0day漏洞挖掘

      通過脆弱點定位不但能幫助分析已公開漏洞的成因,還能輔助挖掘0day漏洞,已經用SwordChecker結合開源模糊測試工具zzuf[6]挖出了幾個0day漏洞,以swftools-0.9.2 png2swf整數溢出漏洞為例進行分析。種子輸入為一個正常的PNG文件input.png,其十六進制格式如圖8所示。

      圖8 Input.png的十六進制格式Fig.8 Hexadecimal format of input.png

      圖9 用zzuf對png2swf進行模糊測試Fig.9 Using zzuf fuzzing png2swf

      圖10 New.png的十六進制格式Fig.10 Hexadecimal format of new.png

      圖11 Swftools-0.9.2 png2swf漏洞現象Fig.11 Phenomenon of swftools-0.9.2 png2swf vulnerability

      首先用SwordChecker定位到input.png的第十二個字節(jié)“0x0d”影響內存分配函數malloc,接下來用zzuf通過集中對第十二個字節(jié)進行變異來實施模糊測試就發(fā)現了一個漏洞。如圖9所示,zzuf有三個參數:s是隨機數種子,s為0∶1000是指種子從0到1000變化;r是變異率,r為1表示百分之百的變異;b是變異范圍,b為11表示第十二個字節(jié)(從0開始起算)。從圖9可以看到當s=4,r=1時檢測到了“memory exceeded”,用s= 4,r=1作為參數生成一個新的文件new.png(zzuf使用相同的參數生成的文件永遠相同)。如圖10所示,可以看到第十二個字節(jié)變成了“0x2d”。將new.png作為png2swf的輸入就觸發(fā)了漏洞,漏洞現象如圖11所示,可以看到發(fā)生了段錯誤。進一步用SwordChecker分析原因,得到的分析結果如圖12所示,可以確定該漏洞是由malloc參數過大(n=0x61676572,與new.png的第66~69個字節(jié)對應)引起的整數溢出漏洞。

      圖12 Swftools-0.9.2 png2swf漏洞分析結果Fig.12 Analysis result of swftools-0.9.2 png2swf vulnerability

      5 結論

      本文提出了一種基于污點分析的軟件脆弱點定位方法,該方法以動態(tài)污點追蹤為基礎,基于漏洞模式建立檢查規(guī)則,通過污點檢查來定位脆弱點,通過二分查找來進一步定位輸入文件中影響脆弱點的敏感字節(jié)。實現了一個相應的原型系統(tǒng)SwordChecker。實驗表明,SwordChecker不但能快速精確定位除0漏洞、整數溢出漏洞和緩沖區(qū)溢出漏洞的脆弱點,還能精確定位輸入文件中影響脆弱點的敏感字節(jié);不但能幫助分析漏洞的成因,還能輔助0day漏洞挖掘,已經分析了多個公開漏洞的成因,并輔助挖掘了幾個0day漏洞。

      SwordChecker當前適用于Linux下的32位二進制程序,目前主要支持文件處理程序,下一步計劃將其擴展到支持Windows系統(tǒng)和網絡處理程序。

      References)

      [1]吳世忠,郭濤,董國偉,等.軟件漏洞分析技術進展[J].清華大學學報(自然科學版),2012,52(10):1309-1319.WU Shizhong,GUO Tao,DONG Guowei,et al.Software vulnerability analyses:a road map[J].Journal of Tsinghua University(Science and Technology),2012,52(10):1309-1319.(in Chinese)

      [2]Caca labs.Zzuf-Multi-purpose fuzzer[EB/OL].http:// caca.zoy.org/wiki/zzuf.

      [3]A pure-python fully automated and unattended fuzzing framework[EB/OL].https://github.com/OpenRCE/sulley.

      [4]Eddington M.Peach fuzzer[EB/OL].http://peachfuzzer.com/.

      [5]Sogeti ESEC Lab.Fuzzgrind[EB/OL].http://eseclab.sogeti.com/pages/Fuzzgrind.

      [6]FuzzBALL:Vine-based binary symbolic executi-on[EB/OL].https://github.com/bitblaze-fuzzball/fuzzball.

      [7]徐欣民.一種緩沖區(qū)溢出漏洞自動挖掘及漏洞定位技術[D].武漢:華中科技大學,2008.XU Xinmin.An automatic mining and positioning technology for buffer overflow vulnerabilities[D].Wuhan:Huazhong University of Science and Technology,2008.(in Chinese)

      [8]楊濱誠,茅兵.輸入相關的緩沖區(qū)溢出檢測和定位[C]// 2010(第三屆)全國網絡與信息安全學術會議,2010: 103-108.YANG Bincheng,MAOBing.Detection and location of inputrelated buffer overflows[C]//Proceedings of 2010(3rd) National Conference on Computer Networks and Information Security,2010:103-108.(in Chinese)

      [9]史勝利.基于代碼插裝的緩沖區(qū)溢出漏洞定位技術[J].計算機工程,2012,38(9):138-140.SHIShengli.Buffer overflow vulnerability location technology based on code instrumentation[J].Computer Engineering,2012,38(9):138-140.(in Chinese)

      [10]楊羨環(huán).基于函數調用序列的漏洞定位方法研究[D].武漢:華中科技大學,2013.YANG Xianhuan.Research of software-defect localization based on function calling sequence mining[D].Wuhan: Huazhong University of Science and Technology,2013.(in Chinese)

      [11]Newsome J,Song D.Dynamic taint analysis for automatic detection,analysis,and signature generation of exploits on commodity software[C]//Proceedings of the Network and Distributed System Security Symposium,2005.

      [12]Clause J,LiW C,Orso A.Dytan:a generic dynamic taint analysis framework[C]//Proceedings of the 2007 international symposium on Software testing and analysis.ACM,2007: 196-206.

      [13]Kang M G,McCamant S,Poosankam P,etal.DTA++:dynamic taint analysis with targeted control-flow propagation[C]// Proceedings of the 18th Network and Distributed System Security Symposium,2011.

      [14]Bosman E,Slowinska A,Bos H.Minemu:the world’s fastest taint tracker[C]//Proceedings of Recent Advances in Intrusion Detection.Springer Berlin Heidelberg,2011,6961: 1-20.

      [15]Kemerlis V P,Portokalidis G,Jee K,et al.libdft:practical dynamic data flow tracking for commodity systems[C]// Proceedings of ACM SIGPLAN Notices,2012,47(7): 121-132.

      [16]DynamoRIO[EB/OL].http://www.dynamorio.org/.

      [17]Valgrind[EB/OL].http://valgrind.org/.

      [18]Intel.Pin-a dynamic binary instrumentation tool[EB/OL].https://software.intel.com/en-us/articles/pin-a-dynamicbinaryinstrumentation-tool.

      [19]Hazelwood K,Klauser A.A dynamic binary instrumentation engine for the ARM architecture[C]//Proceedings of the International Conference on Compilers,Architecture and Synthesis for Embedded Systems,2006:261-270.

      [20]Common vulnerabilities and exposures[EB/OL].https:// cve.mitre.org/.

      [21]Wikipedia.Open source vulnerability database[EB/OL].http://en.wikipedia.org/wiki/Open_Source_Vulnerability_ Database.

      [22]Offensive Security[EB/OL].The Exploit Database.http:// www.exploit-db.com/.

      Vulnerable spots localization methods for software vulnerability analysis

      CAIJun1,ZOU Peng1,YANGShangfei2,HE Jun1
      (1.Science and Technology on Complex Electronic System Simulation Laboratory,Academy of Equipment,Beijing 101416,China;2.Naval Academy of Armament,Beijing 100161,China)

      Aiming at the difficulty in analysis of binary program vulnerabilities,an approach for software vulnerable spots localization based on taint analysis was proposed,and a corresponding tool named SwordChecker was implemented.This method is based on dynamic taint tracing.Software vulnerable spotswere localized by charactermatching according to vulnerability patterns,and sensitive byteswhich affected the vulnerable spots were localized by binary-search.Experiment results show that SwordChecker can accurately identify and localize three types of software vulnerable spots fast,has successfully analyzed the causes of multiple open vulnerabilities,and has assisted mining several undisclosed vulnerabilities.

      taint analysis;vulnerable spots localization;binary-search

      TP309

      A

      1001-2486(2015)05-141-08

      10.11887/j.cn.201505022

      http://journal.nudt.edu.cn

      2014-12-31

      國家863計劃資助項目(2012AA012902);“核高基”國家科技重大專項基金資助項目(2013ZX01045-004)

      蔡軍(1982—),男,湖北天門人,博士研究生,E-mail:cjgfkd@163.com;鄒鵬(通信作者),男,教授,碩士,博士生導師,E-mail:zpeng@nudt.edu.cn

      猜你喜歡
      污點緩沖區(qū)字節(jié)
      嵌入式系統(tǒng)環(huán)形緩沖區(qū)快速讀寫方法的設計與實現
      基于代碼重寫的動態(tài)污點分析
      No.8 字節(jié)跳動將推出獨立出口電商APP
      No.10 “字節(jié)跳動手機”要來了?
      簡談MC7字節(jié)碼
      使用Lightroom污點去除工具清理照片中的瑕疵
      我國“污點證人”刑事責任豁免制度的構建
      關鍵鏈技術緩沖區(qū)的確定方法研究
      地理信息系統(tǒng)繪圖緩沖區(qū)技術設計與實現
      AVS標準中的視頻碼流緩沖區(qū)校驗模型分析
      電視技術(2012年1期)2012-06-06 08:13:58
      莱芜市| 新田县| 明溪县| 蓬莱市| 西林县| 长治县| 印江| 元江| 乌拉特中旗| 延川县| 靖边县| 思南县| 甘泉县| 济南市| 启东市| 永和县| 紫云| 肥东县| 定远县| 辽阳市| 朔州市| 肃北| 桐乡市| 本溪| 从江县| 云龙县| 武鸣县| 潼南县| 大新县| 钦州市| 松滋市| 如东县| 崇左市| 永德县| 黑龙江省| 广南县| 巴楚县| 桦南县| 忻城县| 桂东县| 康定县|