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

        ?

        基于動(dòng)態(tài)插樁的緩沖區(qū)溢出漏洞檢測技術(shù)研究

        2015-08-07 12:05:31劉露平方勇劉亮龍剛
        信息安全與通信保密 2015年4期
        關(guān)鍵詞:函數(shù)調(diào)用插樁堆棧

        劉露平, 方勇, 劉亮, 龍剛

        (四川大學(xué) 電子信息學(xué)院,四川 成都 610065)

        基于動(dòng)態(tài)插樁的緩沖區(qū)溢出漏洞檢測技術(shù)研究

        劉露平, 方勇, 劉亮, 龍剛

        (四川大學(xué) 電子信息學(xué)院,四川 成都 610065)

        緩沖區(qū)溢出漏洞是一類常見的軟件漏洞,其對計(jì)算機(jī)系統(tǒng)造成的危害非常大。本文針對這類漏洞提出一種基于二進(jìn)制文件動(dòng)態(tài)插樁并根據(jù)程序運(yùn)行狀態(tài)來判定緩沖區(qū)溢出的檢測方法,并實(shí)現(xiàn)了基于該方法的檢測系統(tǒng)。通過分析緩沖區(qū)溢出的原理以及常見攻擊方法的特點(diǎn),提出了基于覆蓋返回地址、虛函數(shù)表、異常處理鏈表以及溢出后執(zhí)行特定API的緩沖區(qū)溢出檢測方法。實(shí)驗(yàn)表明該系統(tǒng)能有效檢測到緩沖區(qū)溢出并定位溢出點(diǎn)從而輔助對漏洞原理進(jìn)行分析。

        緩沖區(qū)溢出;動(dòng)態(tài)檢測;二進(jìn)制插樁;程序狀態(tài)

        0 引言

        緩沖區(qū)溢出漏洞是一類常見的軟件安全性漏洞,廣泛存在于各種操作系統(tǒng)、應(yīng)用軟件中,利用緩沖區(qū)漏洞進(jìn)行攻擊給網(wǎng)絡(luò)安全帶來了極大的威脅,由于其具有非常大的危害性,許多研究人員對此進(jìn)行了深入的研究,并提出了各種針對緩沖區(qū)溢出的檢測方法。

        現(xiàn)有針對緩沖區(qū)溢出的檢測和預(yù)警中,主要有以下幾種方法:

        1)基于編譯器的運(yùn)行時(shí)檢查。如微軟在其編譯器VS7.0及以后版本中增加了GS編譯選項(xiàng),通過在堆棧中加一個(gè)cookie,當(dāng)函數(shù)返回時(shí)檢測該cookie值是否被改變從而判斷是否發(fā)生溢出。gcc編譯器的StackGuard插件則通過在棧上放探針來實(shí)現(xiàn)檢測[1]。

        2)系統(tǒng)/硬件級別的檢測保護(hù)。在Windows XP SP2后,微軟開始提供了DEP(Data Execution Prevention)數(shù)據(jù)執(zhí)行保護(hù)技術(shù)[2],通過將堆和棧所屬內(nèi)存空間設(shè)置為不可執(zhí)行屬性,將數(shù)據(jù)和代碼分開,從而有效阻止惡意代碼的執(zhí)行。

        3)動(dòng)態(tài)污點(diǎn)傳播檢測技術(shù)。通過將軟件的外部輸入數(shù)據(jù)標(biāo)記為污點(diǎn)數(shù)據(jù),然后利用動(dòng)態(tài)插樁技術(shù)追蹤記錄污點(diǎn)數(shù)據(jù)在程序中的傳播和擴(kuò)展流程,結(jié)合符號執(zhí)行等技術(shù)對程序引用污點(diǎn)數(shù)據(jù)的代碼進(jìn)行分析來判定是否發(fā)生緩沖區(qū)溢出[3-4]。

        由于上述方法已被許多攻擊者研究透徹,針對各種檢測都有很多相應(yīng)的繞過方法,在實(shí)際運(yùn)用中并不能很好的阻止緩沖區(qū)溢出攻擊。因此,本文通過對緩沖區(qū)溢出漏洞原理及其利用過程的分析,利用動(dòng)態(tài)二進(jìn)制插樁工具Pin來記錄程序執(zhí)行的整個(gè)過程,并結(jié)合緩沖區(qū)溢出特征來完成動(dòng)態(tài)檢測。實(shí)驗(yàn)表明該方法能有效檢測和阻止緩沖區(qū)溢出漏洞攻擊。

        1 動(dòng)態(tài)插樁檢測原理

        1.1 緩沖區(qū)溢出漏洞簡介

        緩沖區(qū)溢出漏洞是指當(dāng)程序拷貝數(shù)據(jù)到特定的緩沖區(qū)時(shí),由于預(yù)留空間較小多余的數(shù)據(jù)溢出后覆蓋其他內(nèi)存單元的值,導(dǎo)致內(nèi)存破壞,程序發(fā)生崩潰。如果數(shù)據(jù)被經(jīng)過特定構(gòu)造,則通過溢出能劫持程序流程從而取得系統(tǒng)控制權(quán)。

        緩沖區(qū)在系統(tǒng)中的表現(xiàn)形式多樣,常見的緩沖區(qū)溢出包括棧溢出和堆溢出兩種。在緩沖區(qū)漏洞利用中,一般會(huì)通過數(shù)據(jù)溢出后覆蓋函數(shù)返回地址,SEH(Structured Exception Handing)鏈表、以及函數(shù)虛表的方式來達(dá)到劫持程序流程的目的。

        1.2 二進(jìn)制動(dòng)態(tài)插樁平臺(tái)PIN

        Pin是Intel公司開發(fā)的一個(gè)動(dòng)態(tài)二進(jìn)制探測框架,支持Android、Linux、OSX以及Windows等平臺(tái)。具有易用、高效、可移植以及健壯性等特點(diǎn),通過插樁引擎,將用戶插入的分析代碼和目標(biāo)程序重新編譯成新的目標(biāo)文件后在虛擬機(jī)緩沖區(qū)中執(zhí)行,從而可以動(dòng)態(tài)獲取程序運(yùn)行的中間信息[5]。圖1是Pin的整個(gè)框架:

        圖1 PIN結(jié)構(gòu)架構(gòu)圖

        用戶編寫的分析工具相當(dāng)于Pin的一個(gè)插件,統(tǒng)稱為Pintool。Pin提供了指令、函數(shù)和映像三種插樁模式。在進(jìn)行緩沖區(qū)溢出檢測時(shí),通過策略選擇三種不同粒度的插樁方式,從而當(dāng)指令執(zhí)行時(shí)記錄的指令類型、操作數(shù)、相關(guān)寄存器等信息;函數(shù)調(diào)用時(shí)記錄下函數(shù)的參數(shù)、跳轉(zhuǎn)地址、返回值信息;而當(dāng)模塊加載時(shí)獲取到模塊名稱、以及庫函數(shù)等信息。此外通過pin提供的事件進(jìn)行插樁功能,可以在程序開始時(shí)插樁獲取到進(jìn)程的堆空間分布信息,在線程開始時(shí)插樁記錄下線程的初始化堆??臻g分布信息。

        通過插樁獲取到程序運(yùn)行狀態(tài)信息后,結(jié)合緩沖區(qū)溢出的特征利用預(yù)先設(shè)定的規(guī)則來進(jìn)行分析判斷從而對緩沖區(qū)溢出漏洞攻擊進(jìn)行判定和預(yù)警[6]。

        1.3 溢出檢測的實(shí)現(xiàn)

        緩沖區(qū)溢出后一般會(huì)采取覆蓋函數(shù)返回地址、覆蓋SEH鏈表或者虛函數(shù)表的方式進(jìn)行利用。整個(gè)緩沖區(qū)溢出檢測步驟如下:

        (1)異常事件和特定行為捕獲時(shí)機(jī)

        Windows系統(tǒng)利用SEH機(jī)制處理異常時(shí),在用戶態(tài)空間會(huì)調(diào)用ntdll.dll中的DispathcException這個(gè)函數(shù)進(jìn)行異常的分發(fā)處理,可以對這個(gè)函數(shù)進(jìn)行插樁來對程序異常進(jìn)行捕獲。另外溢出發(fā)生后執(zhí)行shellcode時(shí)一般會(huì)調(diào)用kernel32.dll中的LoadLibrary和GetProcAddress這兩個(gè)函數(shù)來獲取系統(tǒng)API的地址,因此對這兩個(gè)函數(shù)插樁可以捕獲到shellcode調(diào)用這兩個(gè)系統(tǒng)API時(shí)的動(dòng)作。

        (2)溢出檢測流程

        程序在進(jìn)行調(diào)用時(shí),通過Call指令將返回地址壓入堆棧,而程序結(jié)束時(shí)通過ret指令將返回地址出棧后賦值給EIP繼續(xù)執(zhí)行,一旦發(fā)生溢出,則函數(shù)返回地址將被改寫。因此方案中通過對CALL、RET指令插樁,并建立一個(gè)虛擬硬件堆棧,在執(zhí)行Call指令進(jìn)行函數(shù)調(diào)用時(shí)將返回地址壓入虛擬硬件堆棧,RET指令函數(shù)返回時(shí)從虛擬硬件堆棧中出棧返回地址并與真實(shí)堆棧的返回地址進(jìn)行比較,判定是否相等來進(jìn)行檢測判斷。

        SEH鏈表中的每個(gè)節(jié)點(diǎn)都是一個(gè)異常注冊結(jié)構(gòu)體(EXCEPTION_REGISTRATION),其成員NextS.E.H Recorder指向下一個(gè)結(jié)構(gòu)體,而Exception handler指向異常處理函數(shù)【7】。而基于SEH的緩沖區(qū)溢出攻擊中,通常使溢出數(shù)據(jù)覆蓋異常注冊結(jié)構(gòu)體后觸發(fā)異常執(zhí)行shellcode。SEH鏈表在溢出發(fā)生后被覆蓋成如圖2所示的形式:

        圖2 覆蓋異常處理鏈表示意圖

        溢出發(fā)生后一般會(huì)將頂層異常注冊結(jié)構(gòu)體覆蓋,因此SEH鏈表的完整性將得到破壞。一個(gè)完整的SEH鏈表滿足以下特性:①整個(gè)鏈表節(jié)點(diǎn)全部位于堆棧中。②每個(gè)節(jié)點(diǎn)的異常處理函數(shù)指針不是位于堆棧中。③最后一個(gè)節(jié)點(diǎn)的指針為0xffffffff。因此可以在異常事件發(fā)生時(shí)對SEH鏈表的完整性進(jìn)行檢測來判斷是否發(fā)生溢出。

        在多數(shù)堆溢出攻擊中,在漏洞觸發(fā)前會(huì)利用Heap Spay(堆噴射)或其他方式進(jìn)行內(nèi)存空間的布局,通過在堆空間重復(fù)布置包含大量NOP(空指令)和shellcode的數(shù)據(jù)庫,溢出發(fā)生后將虛函數(shù)表覆蓋成攻擊者事先布置好的堆棧內(nèi)存空間中[8]。因此可以對函數(shù)調(diào)用的Call指令進(jìn)行插樁,在樁代碼中獲取其跳轉(zhuǎn)目的地址檢測其是為堆棧空間來進(jìn)行判斷。

        此外在溢出攻擊中,獲取控制權(quán)后一般會(huì)調(diào)用系統(tǒng)API來完成功能,通用代碼一般會(huì)調(diào)用LoadLibraryA和GetProcAddress等函數(shù)獲取其他API函數(shù)地址,正常情況下這個(gè)兩個(gè)函數(shù)的返回地址位于系統(tǒng)空間,而一旦在溢出發(fā)生后其返回地址位于堆棧等內(nèi)存空間。因此對這兩個(gè)函數(shù)進(jìn)行插樁,判斷其返回地址是否為堆??臻g來進(jìn)行檢測。根據(jù)以上分析,整個(gè)檢測流程如下圖3所示:

        圖3 溢出檢測流程

        (3)函數(shù)調(diào)用序列流程分析

        程序的整個(gè)執(zhí)行流程都通過函數(shù)調(diào)用來實(shí)現(xiàn),而所有的函數(shù)調(diào)用都是基于Call指令來完成,因此通過插樁CALL指令,在插入的裝代碼中記錄程序的指令調(diào)用流程和函數(shù)傳遞的參數(shù)及返回值等信息來記錄程序的執(zhí)行流程。函數(shù)調(diào)用流程記錄過程如下圖4所示:

        圖4 函數(shù)調(diào)用序列記錄流程

        系統(tǒng)采用循環(huán)隊(duì)列的方式記錄程序調(diào)用流程,總共記錄了200次的函數(shù)調(diào)用,到溢出發(fā)生時(shí),隊(duì)列中記錄的時(shí)溢出發(fā)生前最近的200次函數(shù)調(diào)用關(guān)系序列圖,溢出發(fā)生后系統(tǒng)將根據(jù)記錄信息生成函數(shù)調(diào)用流程關(guān)系圖。

        2 系統(tǒng)有效性分析

        為了驗(yàn)證系統(tǒng)的有效性,對IE、office、以及Adobe等軟件的多個(gè)漏洞樣本進(jìn)行了測試驗(yàn)證,下面就具體以CVE-2012-0158漏洞進(jìn)行說明。測試環(huán)境為Windows XP3、office2010[9]。

        CVE-2012-0158是一個(gè)winword的溢出漏洞,winword的COMMCTL.OCX組件中由于邏輯錯(cuò)誤導(dǎo)致溢出漏洞發(fā)生。圖5是將metasploit生成的樣本經(jīng)過該系統(tǒng)測試后得出的結(jié)果,測試結(jié)果與實(shí)際分析結(jié)果吻合。

        圖5 系統(tǒng)分析結(jié)果

        圖6 是系統(tǒng)記錄的溢出發(fā)生前的函數(shù)調(diào)用序列(這里只列出了4層,紅色標(biāo)記的一層為溢出發(fā)生所在的函數(shù)):

        圖6 函數(shù)調(diào)用流程圖

        表1是其他樣本測試結(jié)果,測試樣本均來自metasploit生成,限于篇幅這里只列出了一部分,測試發(fā)現(xiàn)系統(tǒng)沒有發(fā)現(xiàn)誤報(bào),能夠準(zhǔn)確檢測到緩沖區(qū)溢出并定位到溢出發(fā)生的位置。

        表1 系統(tǒng)測試結(jié)果

        3 結(jié)語

        實(shí)驗(yàn)表明該系統(tǒng)的檢測結(jié)果與漏洞實(shí)際分析結(jié)果符合,說明動(dòng)態(tài)插樁技術(shù)結(jié)合漏洞利用特征來進(jìn)行緩沖區(qū)溢出漏洞檢測的正確性和有效性,從而快速對漏洞樣本進(jìn)行檢測并輔助進(jìn)行對漏洞原理分析。由于采用動(dòng)態(tài)插樁會(huì)影響程序執(zhí)行效率,未來會(huì)插樁策略上進(jìn)一步優(yōu)化,以提高程序分析效率。

        [1] 王清,張東輝,周浩.0da安全:軟件漏洞分析技術(shù)[M].北京:北京電子工業(yè)出版社,2011:267-274.

        [2] Intel.Pin-A Dynamic Binary Instrumentation Tool[EB/OL]. (2012-07-13)[2014-11-28].https://software.intel.com/ en-us/articles/pintool/wbia09.pdf.

        [3] 高迎春,周安民,Windows DEP數(shù)據(jù)執(zhí)行保護(hù)技術(shù)研究[J].信息安全與通信保密,2013(09):77-80.

        [4] 代偉,劉智,劉益和.基于二進(jìn)制的動(dòng)態(tài)污點(diǎn)分析[J].計(jì)算機(jī)應(yīng)用研究,2014(08):2498-2505.

        [5] 諸葛建偉,陳麗波,田凡.基于類型的動(dòng)態(tài)污點(diǎn)分析技術(shù)[J].清華大學(xué)學(xué)報(bào)(自然科學(xué)版),2012-10-23[10]:1321-1328.

        [6] 陳丹.”二進(jìn)制審核”方式的緩沖區(qū)溢出漏洞挖掘[J].辦公自動(dòng)化應(yīng)用,2014(09):43-45.

        [7] 段鋼.加密與解密[M].北京:電子工業(yè)出版社,2008:306-311.

        [8] 黃志軍,鄭濤.一種基于DBI的ROP攻擊檢測[J].計(jì)算機(jī)科學(xué),2012(09):120-124.

        [9] 啟明星辰.CVE-2012-0158分析報(bào)告[EB/OL].(2012-04-28)[2014-11-28].http://http://www.venustech.com.cn/ NewsInfo/449/13620.Html.

        Buffer Overflow Vulnerability Detection Technology based on Dynam ic Instrumentation

        LIU Lu-ping,F(xiàn)ANG Yong,LIU Liang,LONG Gang
        (College of Electronics and Information Engineering,Sichuan University,Chengdu Sichuan 610065,China)

        Buffer overflow vulnerability,as a kind of common software vulnerability,would usually result in huge damage to computer system.In light of this,amethod based on dynamic binary instrumentation is to detect buffer overflow vulnerability in accordance with the running states of program,and a detection system based on thismethod is also implemented.Based on the analysis of buffer overflow principle and characteristics of common attack-methods,a detectionmethod based on the return address,virtual function table,exception handling linked-list and the carrying-out of specific APIafter overflow buffer is presented.Experiments indicate that this system can effectively detect buffer overflow and locate overflow point,so as to assist the analysis of vulnerability principle.

        buffer overflow;dynamic detection;binary-level instrumentation;program status

        TP393

        A

        1009-8054(2015)04-0080-03

        劉露平(1988—),男,碩士研究生,主要研究方向:信息安全、網(wǎng)絡(luò)通信;

        方 勇(1966—),男,博士,教授,主要研究方向:網(wǎng)絡(luò)與信息系統(tǒng)安全;

        劉 亮(1982—),男,博士,講師,主要研究方向:網(wǎng)絡(luò)與信息系統(tǒng)安全;

        龍 剛(1986—-),男,碩士,主要研究方向:信息安全、網(wǎng)絡(luò)通信。■

        2014-11-27

        猜你喜歡
        函數(shù)調(diào)用插樁堆棧
        砂土中樁靴插樁對臨近筒型基礎(chǔ)的影響研究
        基于C語言的數(shù)學(xué)菜單的設(shè)計(jì)與實(shí)現(xiàn)
        基于TXL的源代碼插樁技術(shù)研究
        基于性能分析的自適應(yīng)插樁框架
        基于函數(shù)調(diào)用序列模式和函數(shù)調(diào)用圖的程序缺陷檢測方法*
        嵌入式軟件堆棧溢出的動(dòng)態(tài)檢測方案設(shè)計(jì)*
        探討C++編程中避免代碼冗余的技巧
        基于堆棧自編碼降維的武器裝備體系效能預(yù)測
        Unity3D項(xiàng)目腳本優(yōu)化分析與研究
        中國新通信(2017年1期)2017-03-08 03:12:21
        基于順序塊的嵌入式白盒測試插樁技術(shù)研究
        国产乱人精品视频av麻豆网站| 国产精品视频免费的| 精品免费看国产一区二区白浆| 国产一区二区三免费视频| 人妻 偷拍 无码 中文字幕| 色综合中文综合网| 日本少妇按摩高潮玩弄| 美女福利视频在线观看网址| 国产精品久久久久久妇女| 亚洲av第一页国产精品| 黑人巨大精品欧美在线观看| 亚洲中文字幕免费精品| 久久精品第九区免费观看| 国产精品无码a∨精品影院| 国产亚洲欧洲AⅤ综合一区| 国产精品自拍网站在线| 久久久亚洲av波多野结衣| 天天摸日日摸狠狠添| 国产丝袜免费精品一区二区 | 欧美理论在线| 亚洲人成伊人成综合网中文| 91精品国产福利在线观看麻豆| 男女后进式猛烈xx00动态图片| 国产一级毛片卡| 亚洲天堂av中文字幕| 中文无码人妻有码人妻中文字幕| 好男人日本社区www| 探花国产精品三级在线播放| 久久精品亚洲国产av网站| 日韩少妇内射免费播放18禁裸乳| 久久久久国色av∨免费看| 中文字幕五月久久婷热| 亚洲人成在久久综合网站| 久久夜色精品国产| 日韩国产欧美成人一区二区影院| av免费在线国语对白| 国产永久免费高清在线| 国产在线成人精品| 久久亚洲精品中文字幕蜜潮| 狠狠色丁香婷婷综合潮喷| 久久久久亚洲av无码专区|