<label id="vztmi"></label>

  • <var id="vztmi"><rt id="vztmi"></rt></var>
      周一至周日 8:00-22:30(免長途費):
      學術咨詢:400-888-7501 訂閱咨詢:400-888-7502
      征稿授權 經營授權
      當前位置:中文期刊網 > 論文資料 > 社會科學 > 冶金工業論文 > 正文
      冶金工業論文( 共有論文資料 34 篇 )
      推薦期刊
      熱門雜志

      關于非控制數據攻擊的防御方法探討

      2013-08-01 10:48 來源:冶金工業論文 人參與在線咨詢

      一、相關防御方法

      針對非控制數據攻擊,目前存在一些防御方式。其中大部分都是靜態方法,需要程序源代碼進行重新編譯,無法應用于商業軟件。也有一些動態分析解決方案,但是存在較嚴重的誤報漏報。文獻[9]提出了C語言的一個擴展語義——YARRA,通過將程序中的關鍵數據聲明為一種特殊類型,只有類型匹配的指針才能訪問這類數據。實現了一個編譯器的原型,編譯后的程序可以有效地防御非控制數據攻擊。ValueGuard在程序數據前添加哨兵位,將原始數據和哨兵位數據包裝為結構體,每次運行時檢查該哨兵位。這種方式同樣需要對源程序進行重新編譯。數據空間隨機化DSR[11][DataSpaceRandomization]將內存中數據的存儲內容隨機化,針對不同的變量使用不同的掩碼,和實際數值進行異或操作,當讀取的時候再使用該掩碼異或操作獲取實際數值。攻擊者通過覆寫關鍵數據進行攻擊時,由于不同變量掩碼不同,因此實際寫入的將會是垃圾數據,無法實施攻擊。文獻[12]針對非控制數據攻擊多數都存在非法指針解引用的現象,設計了一種基于邊界檢查的防御方法,但是文獻[3][15]指出這存在很嚴重的誤報和漏報。文獻[13]通過在硬件層面給寄存器、內存添加標記位,這樣可以高效地進行污點標記,不過這需要全新的硬件支持,實用性不強。

      二、防御原理

      基礎的動態污點分析(DTA)針對控制數據攻擊非常有效,但是無法防御非控制數據攻擊。研究發現,控制數據攻擊和大部分非控制數據攻擊都具備相同的特征,向攻擊者構造的地址寫入數據,或者讀取攻擊者構造的地址的數據。概括地說,大部分攻擊都依賴于一個不安全的指針解引用[12][13],而這個不安全的指針通常是由攻擊者構造的。例如格式化串攻擊中,常見的攻擊方式是攻擊者往自己精心構造的地址寫入一個數值,這就存在不安全指針的解引用。Chenet.al[2]提到的針對HTTPserver-GHTTPD和WU-FTPD的攻擊實例,也是通過覆寫指針,指針解引用后實施攻擊。根據這一特征,我們提出了指針污點分析方法,它是DTA的一種擴展,因此我們這一方法也分為三個步驟:taintsource(標記污點來源);taintpropagation(傳遞污染屬性);taintsink(污點信息終點)。污點來源source就是來自外部的數據,可以是讀取自文件、網絡等;根據二進制指令的實際含義定義不同的傳播規則(即propagation);sink是污點數據的到達處,通常會在此處設置安全規則檢查。下面我們定義兩個重要的概念。定義1污點標記(tainttag,T-tag)是內存數據的一個屬性,表示該數據是否是來自外部、受污染的。真值表示是受污染的,假值表示不是受污染的。定義2指針標記(pointertag,P-tag)是內存數據的一個屬性,表示該數據是否是合法指針,是否可以用作地址。真值表示是合法指針,假值表示是非法指針。我們的防御方法就是圍繞內存數據的這兩個屬性的標記、傳播和檢查。

      1.標記污點來源

      針對T-tag,我們監控程序讀取文件、網絡數據等行為,將獲取的數據初始化標記為受污染的,其他數據標記為非污染的。針對P-tag,我們需要識別出該內存數據是否是合法的地址。有兩種方式產生的數據可以用作指針,分別是動態分配空間的指針和靜態分配空間的指針。初始狀態下,只有通過這些方式產生的數據,才認為是合法的指針,其他數據默認會標記為非法指針。

      2.傳遞污染屬性

      數據作為不同指令類型操作數時,其傳播規則也不同。表1概括了不同的傳播策略。我們將指令主要分為算術運算指令、邏輯運算指令、數據傳輸指令和特殊指令,下面針對T-tag和P-tag分別進行詳細描述。

      (1)T-tag傳播策略

      算術運算指令:add,sub,mul等Example:mulop1,op2Rule:T(op1)=T(op1)∨T(op2)解析:只要兩個操作數中任一個為受污染的,則污染屬性傳播到目標操作數中。數據傳輸指令:mov型指令,包括mov、movsb等Example:movop1,op2Rule:T(op1)=T(op2)解析:源操作數的污染屬性直接傳播到目標操作數中。邏輯運算指令:and,or,shl等Example:andop1,op2Rule:T(op1)=T(op1)∨T(op2)解析:只要兩個操作數中任一個為受污染的,則污染屬性傳播到目標操作數中。特殊指令:xor,test等Example:xorop1,op1Rule:T(op1)=0解析:該指令的目的是將相應寄存器中的數據清空,因此污染屬性將會清除。

      (2)P-tag傳播策略

      算術指令(相加、相減):add,subExample:addop1,op2Rule:P(op1)=P(op1)⊕P(op2)解析:兩個操作數都是合法指針,或者都不是合法指針,則目標操作數不是一個合法指針。這個很容易理解,兩個地址之間加減,其結果是兩者的相對偏移,所以不是一個合法的地址。如果兩個操作數只有一個是合法指針,則這是一次通過基地址和偏移量計算地址的操作,其結果還是一個合法指針。算術指令(相乘等其他指令):mul,div等Example:mulop1,op2Rule:P(op1)=0解析:不是正常的地址計算操作,因此其結果都標記為非法指針。邏輯運算指令(取基地址的AND指令):andExample:andop1,0x11..00Rule:P(op1)=P(op1)解析:這是一條比較特殊的and指令,目的是獲取源操作數的基地址,因此其結果的P-tag屬性和源操作數的P-tag屬性相同。邏輯運算指令(其他指令):or,not等Example:orop1,op2Rule:P(op1)=0解析:不是正常的地址計算操作,因此其結果都標記為非法指針。數據傳輸指令:mov型指令,包括mov、movsb等Example:movop1,op2Rule:P(op1)=P(op2)解析:源操作數的污染屬性直接傳播到目標操作數中。

      3.攻擊判定

      攻擊判定分為兩類,一類是常見的控制數據攻擊,監控跳轉類指令(Jump、Call、Ret等),當其操作數的T-tag屬性為真,即是來自外部的污點數據,表明這是一次攻擊。第二類是監控指針的解引用:如果T-tag屬性為假,即不是來自外部的污點數據,則不管P-tag的屬性值,指針的解引用都是合法的;如果T-tag為真并且P-tag為假,即當來自外部的污點數據,并且不是一個合法指針,被解引用時,則表明這是一次攻擊;如果T-tag為真并且P-tag也為真,雖然是來自外部的數據組成的地址,但是合法指針,所以可以解引用,這也很好地解決了之前防御方法存在的漏報誤報問題[3][15]。表2定義了攻擊判定的規則。

      三、系統具體實現

      本系統是在UbuntuLinux下基于動態二進制分析框架Pin開發的指針污點分析工具DynamicPointerTaintAnalysisTool,簡稱DPTA。Pin可以在可執行二進制代碼中插入一些探測函數,用于觀察、記錄、分析等。通過Pin提供的API可以編寫各種分析工具,這樣程序運行完以后,統計和分析結果也同時產生。DPTA除了具有基本的DTA功能以外,主要著眼于指針污點分析,因此具有防御控制數據攻擊和非控制數據攻擊的能力。圖2是DPTA的系統框架。系統會監控系統調用,將來自外部的數據標記T-tag和P-tag屬性,并存儲到Tagmap中。應用程序的每條指令通過Pin進行翻譯后執行,同時DPTA會插入一些分析代碼,實時監控程序運行狀態。程序執行過程中會動態更新Tagmap,并在安全敏感處執行檢查,發現攻擊時觸發警報。

      Tagmap的設計Tagmap,又被稱為影子內存,是在系統中開辟的一塊新區域,用來存儲程序內存數據的標記信息。在本系統中,我們使用兩個bit位來標識每一塊內存的T-tag和P-tag屬性,分別為T-bit和P-bit。T-bit為0表明不是污點數據,1表示是污點數據。P-bit為0表示不是一個合法指針,1表示是一個合法指針。Tagmap中標記的地址和實際的數據存儲地址有一對映射關系,可以通過計算來獲取。程序初始運行時,Tagmap會根據實際情況初始化為不同的數值,默認下這兩個bit位都是置為0。T-bit的初始化和傳統的DTA相同,將read、recv等函數獲取的數據標識為1(污點數據)。P-bit的初始化相對復雜性,主要是指針的產生可能會有很多種情況,因此指針識別是很重要的一環,下文我們會對其進行詳述。識別出的指針,其P-bit將會被標識為1(合法指針)。

      1.指針識別

      指針識別是本系統中非常重要的一部分,但是二進制中的指針識別向來是一件非常困難的事情。我們將指針區分為兩類,一類是指向動態分配空間的指針,另一類是指向靜態分配空間的指針,例如全局變量的地址。圖3展示了內存的布局,動態區域主要是堆和棧,靜態區域包括靜態數據區、代碼區、動態鏈接庫的靜態數據區和代碼區。下面分別對這兩類指針的識別進行闡述。

      (1)動態分配的堆空間指針

      動態分配的空間一般需要調用一些系統調用,如mmap、brk、mmap2、mremap、shmat等。因此可以監控這一類系統調用,其返回的指針就是合法的堆空間指針。例如增加對系統調用brk的監視,根據Pin的api,我們給brk綁定一個監控函數post_brk_hook:當產生系統調用brk時,監控函數中會將返回的指針的P-bit設置為1,表明是合法的指針。同理也可以添加對其它系統調用的監聽。棧空間的指針都是來自于棧指針(StackPointer),因此我們將程序開始時候的棧指針的P-bit設為1。

      (2)靜態分配空間的指針

      靜態分配空間的指針識別比較復雜。當程序被編譯成重定向目標文件時,所有靜態分配空間的引用都會放置在重定向表中。如果應用程序中有著完整的重定向表,我們可以精確地識別出所有靜態的指針初始化。然而大部分情況下都缺少這些信息,因此對于這種情況,我們需要其他方法來識別指針。DPTA是基于x86指令集下的Pin開發的,通過反編譯程序可知,這類指針初始化具有一個特征,都是通過類似movl的指令,將一個32-bit的常數賦值給寄存器,據此我們可以保守地識別出x86下的靜態分配空間指針。我們首先獲得靜態空間的起始地址和終止地址,然后在DPTA插樁的時候檢查movl類的指令,如果其操作數是立即數和寄存器,并且立即數在靜態空間的地址范圍內,則認為其是合法的指針初始化。這些操作雖然比較復雜,但是這是插樁代碼,因此其對效率影響有限。

      2.污染屬性傳播和攻擊判定

      污染屬性的傳播也就是在程序運行中,每塊內存數據所對應的兩個bit位的變化。按照上文提到的傳播策略,當程序運行時,Tagmap中的數據將按照表1中的策略進行更新。攻擊判定,首先針對跳轉類指令(Jump、Call、Ret等),需要進行判斷,這和傳統的DTA相同,此處不做詳述。針對指針解引用的判斷,根據指針解引用指令(如mov指令)的操作數,如果源操作數是指針,T-bit為1并且其P-bit為0,表明要讀取一個非法指針指向的內存區域數據,判斷這是一次對非法指針的解引用,是一次攻擊。如果目的操作數是指針,T-bit為1并且其P-bit為0,表明將對一個非法指針指向的內存區域寫入數據,判斷其為攻擊。表3是一段攻擊判定的示例代碼。其中alert_mov方法將會按照我們定義的策略對該內存地址的T-bit和P-bit進行檢查,判斷是否是一次攻擊。

      四、實驗評估

      在UbuntuLinux下對DPTA進行實驗評估,內核版本是3.4,運行的平臺為CPU2.67GHz,內存4GB。實驗一方面驗證該工具是否能夠檢測出非控制數據攻擊和控制數據攻擊,另一方面測試工具對應用程序效率的影響。

      1.攻擊檢測驗證

      我們選取了具有代表性的四個控制數據攻擊和四個非控制數據攻擊,進行了多次測試。表4的測試結果表明DPTA針對控制數據攻擊和大部分非控制數據攻擊都具有良好的防御能力,但是對于不通過指針修改關鍵數據的攻擊,我們還無法防御,這是我們系統的局限性。

      2.性能測試

      我們選取了5個程序來測試我們系統的性能損耗,同時我們使用了Kemerlis開發的DTA工具Libdft[16]進行參照,表5給出了較終的測試結果。總體而言,系統的損耗從1.5x到28.0x不等,平均性能損耗是12.5x,這與Memcheck的運行負載相近。相比于Libdft,DPTA的系統負載比較高,這是因為我們采取了比較嚴格的監測策略,除了監控跳轉指令,還包括了非常常見的數據傳送指令(mov等),這會給系統增加非常大的運行開銷。但是我們系統可以防御大部分的非控制數據攻擊,而Libdft沒有這一能力。

      五、結束語

      本文在動態污點分析的基礎上,針對非控制數據攻擊提出了一個改進的指針污點分析方法,通過跟蹤內存數據的污點標記和指針標記,監控是否存在非法的指針解引用。實現了原型工具DPTA,實驗評估表明,該工具可以防御控制數據攻擊和大部分非控制數據攻擊。雖然DPTA實現了我們的防御模型,但是還存在一些問題需要我們進一步研究:(1)實驗表明我們的原型系統運行效率并不是很理想,距離商業化應用還有距離。我們計劃通過兩方面進行優化:一方面優化Tagmap的數據結構,更新Tagmap信息是系統中常見的操作,因此快速獲取Tagmap中的信息會對效率產生很大影響;另一方面手動分析程序調用的常用函數的語義信息,獲取其是否涉及污點傳播,對于不涉及污點傳播的函數不進行插樁分析。(2)目前采取的指針識別方法并不是很準確,尤其是靜態分配空間的指針,下一步計劃分析識別失敗的指針,歸納其特征,提高指針識別的準確率。(3)本系統無法檢測出不通過覆寫指針實施的非控制數據攻擊,可以通過結合靜態分析的方法防御,但是這不是我們下一步的主要方向。(本文圖、表略)

      本文作者:劉小龍 鄭滔 單位:計算機軟件新技術國家重點實驗室(南京大學)  南京大學軟件學院

      在線咨詢
      推薦期刊閱讀全部
      . 窝窝资源