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

?

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

2015-08-07 12:05劉露平方勇劉亮龍剛
信息安全與通信保密 2015年4期
關鍵詞:鏈表堆棧緩沖區(qū)

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

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

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

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

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

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

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

0 引言

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

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

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

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

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

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

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

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

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

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

1.2 二進制動態(tài)插樁平臺PIN

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

圖1 PIN結構架構圖

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

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

1.3 溢出檢測的實現

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

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

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

(2)溢出檢測流程

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

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

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

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

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

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

圖3 溢出檢測流程

(3)函數調用序列流程分析

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

圖4 函數調用序列記錄流程

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

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

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

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

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

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

圖6 函數調用流程圖

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

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

3 結語

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

[1] 王清,張東輝,周浩.0da安全:軟件漏洞分析技術[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數據執(zhí)行保護技術研究[J].信息安全與通信保密,2013(09):77-80.

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

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

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

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

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

[9] 啟明星辰.CVE-2012-0158分析報告[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,FANG 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—),男,碩士研究生,主要研究方向:信息安全、網絡通信;

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

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

龍 剛(1986—-),男,碩士,主要研究方向:信息安全、網絡通信?!?/p>

2014-11-27

猜你喜歡
鏈表堆棧緩沖區(qū)
基于行為監(jiān)測的嵌入式操作系統(tǒng)堆棧溢出測試*
如何用鏈表實現一元多項式相加
基于二進制鏈表的粗糙集屬性約簡
跟麥咭學編程
基于ARC的閃存數據庫緩沖區(qū)算法①
基于MTF規(guī)則的非阻塞自組織鏈表
基于堆棧自編碼降維的武器裝備體系效能預測
一類裝配支線緩沖區(qū)配置的兩階段求解方法研究
初涉緩沖區(qū)
多目標緩沖區(qū)生成算法
五莲县| 都昌县| 敦煌市| 鄂托克旗| 齐齐哈尔市| 石狮市| 沧州市| 河源市| 隆德县| 克什克腾旗| 安岳县| 丽水市| 长宁县| 出国| 满洲里市| 奉新县| 海阳市| 肥西县| 怀仁县| 西乌珠穆沁旗| 博白县| 大田县| 彰武县| 阳曲县| 专栏| 黑水县| 舞钢市| 遵化市| 射洪县| 土默特左旗| 奎屯市| 吉安市| 信宜市| 兴隆县| 赣州市| 东源县| 神池县| 射阳县| 梨树县| 抚州市| 来宾市|