本發明涉及一種針對rop攻擊的檢測技術,特別是一種基于pin工具的rop及其變種攻擊的動態檢測方法,用于對rop及其變種攻擊進行檢測。
背景技術:
網絡安全有很多類,例如:網絡的物理安全、網絡拓撲結構安全、網絡系統安全、應用系統安全和網絡管理的安全等。而本發明所涉及的是應用系統安全,計算機上運行的各類軟件都是由人工編寫,由于人的局限性,所編寫的軟件或多或少都存在漏洞。緩沖區溢出漏洞、堆溢出漏洞和本地提權漏洞仍然普遍存在,一旦這些漏洞被別有用心的人發現并加以利用,帶來的危害不可小視。為了應對漏洞造成的危害,專家們提出并采取了各種保護措施來保護計算機,例如dep(dataexecutionprevention,數據執行保護)、gs保護技術等。漏洞利用和漏洞防御是相互競爭關系,漏洞防御阻止了當前的漏洞利用,而攻擊者又會提出新的技術繞過這些防御措施。漏洞防御和漏洞利用長時間處于被動與主動的狀態,這一狀態根據當前技術的發展狀況會持續很久,或許會一直存在。
就緩沖區溢出攻擊而言,在相當一段時間內給網絡安全造成了巨大威脅。但是dep和gs等保護措施提出后,傳統的緩沖區溢出攻擊事件大幅減少,但是這持續時間并沒有存在多久,攻擊者隨后就提出了一種新的攻擊方式rop(面向返回導向的編程,return-orientedprogramming)。在2010年初,網絡上出現了rop的實際攻擊的例子,攻擊者利用adobeacrobat/reader的一個0day漏洞,使用rop攻擊繞過了windows系統的數據執行保護技術。而在2011年的溫哥華pwn2own黑客大會上,黑客利用rop技術在很短時間內繞過了windows7的dep和aslr(addressspacelayoutrandomization)保護技術,并獲得了該次黑客競賽的冠軍。近期,著名黑客網站exploitdatabase發布了眾多利用rop攻擊繞過windowsdep和aslr的shellcode,使得rop技術越來越被人們重視,被認為是未來攻擊系統的必須的技術和手段。
rop攻擊是一種基于代碼復用技術的新型攻擊,攻擊者提取已有的動態庫或可執行文件中的有用的指令片段,使多個指令片段組合在一起構成惡意代碼。換言之,它通過使用系統內存中已經存在的二進制代碼片段(gadget)來構造一個具有圖靈完備性的攻擊序列,可以繞過當前主流操作系統防范緩沖區溢出攻擊的保護機制dep,給計算機系統帶來了極大的安全威脅。
自2007年schacham提出rop以來,其相關攻擊技術發展迅速。rop攻擊最初是在32位的x86硬件平臺的linux軟件平臺上實現的,之后被證明可以在多種軟硬件平臺上實現;rop的變種jop(jump-orientedprogramming)進一步豐富了rop;構造rop的自動化程度越來越高;rop被用來構造各種攻擊。因此提出一種有效的rop攻擊及其變種的檢測技術,對于計算機的安全十分的重要。
從上面描述得知,rop攻擊不同于普通的緩沖區溢出攻擊,它通過提取正常的指令片段構造惡意代碼,這與普通的緩沖區溢出攻擊有著本質的區別,同時這一特點也給rop攻擊的檢測工作帶來了巨大的挑戰。rop攻擊檢測引起了眾多研究者的關注,雖然對rop攻擊的檢測技術已經取得了許多成就,但是大多數檢測方法都是針對ret指令,不使用ret指令的rop變種可以繞過這些防御,比如pop-jmp和jop。
技術實現要素:
基于以上技術問題,本發明提供了一種基于pin工具的rop及其變種攻擊的動態檢測方法,旨在利用rop及其變種攻擊的共同特征作為檢測基礎,解決當前檢測算法只能對單一類型的rop攻擊進行檢測,同時檢測效率低的技術問題。
本發明采用的技術方案如下:
一種基于pin工具的rop及其變種攻擊的動態檢測方法,包括以下步驟:
步驟1:利用二進制pin插樁工具啟用目標程序;
步驟2:跟蹤所述目標程序,匹配ret指令、call指令與jmp指令;
步驟3:若為ret指令,則利用基于ret指令的檢測模塊進行檢測;若為call指令,則利用基于call指令的檢測模塊進行檢測;若為jmp指令,則利用基于jmp指令的檢測模塊進行檢測;
步驟4:若檢測模塊檢測出所述目標程序的異常,則發出攻擊警報;否則跳轉至步驟2。
進一步的,所述基于ret指令的檢測模塊的檢測算法為:
s201:監控寄存器,提取ret指令跳轉的目的地址;
s202:檢測所述目的地址的前一指令是否為call指令,若為call指令跳轉到s203執行,否則發出攻擊警報;
s203:檢測所述目的地址是否在在函數體內并且所述函數第一次被調用,若是則發出攻擊警報,否則跳轉到s204執行;
s204:設定檢測指令的條數閾值和頻數閾值,檢測所述目標地址后條數閾值范圍內的指令中是否有連續性的jmp指令、call指令和ret指令出現,若出現頻數大于所述頻數閾值則認為受到攻擊并發出攻擊警報,否則執行步驟2。
進一步的,所述基于call指令的檢測模塊的檢測算法為:
檢測call指令跳轉的目的地址是否為函數的入口地址,若不是則發出攻擊警報,否則執行步驟2。
進一步的,所述基于jmp指令的檢測模塊的檢測算法為:
s401:檢測jmp指令是否跨函數跳轉,若是則跳轉s402執行,否則執行步驟2;
s402:檢測jmp指令跳轉的位置是否在函數的中間位置,若是則發出攻擊警報,否則執行步驟2。
綜上所述,由于采用了上述技術方案,本發明的有益效果是:
利用rop及其變種攻擊的共同特征進行的檢測,不僅能夠對rop攻擊進行檢測,還能對其變種進行檢測,對網絡安全防護具有很重大的意義。
將轉移指令的行為特征與rop及其變種攻擊的共同特征結合,實現對rop及其變種攻擊的動態檢測,克服了當前檢測工具類型單一的缺點,部署方便,具有很強的實用性。
附圖說明
圖1是二進制插樁工具的整體架構;
圖2是基于call指令的檢測模塊設計圖;
圖3是基于jmp指令的檢測模塊設計圖;
圖4是基于ret指令的檢測模塊設計圖;
圖5是動態鏈接庫分析模塊的結構圖。
具體實施方式
本說明書中公開的所有特征,除了互相排斥的特征和/或步驟以外,均可以以任何方式組合。
下面結合附圖對本發明作詳細說明。
一種基于pin工具的rop及其變種攻擊的動態檢測方法,包括以下步驟:
步驟1:利用二進制pin插樁工具(如圖1)啟用目標程序,具體為通過pin.exe加載pintool.dll,pintool.dll初始化完成后返回請求以啟動目標程序;
步驟2:利用二進制pin插樁工具跟蹤所述目標程序,對ret指令、call指令與jmp指令進行匹配,所述二進制pin插樁工具內包括動態鏈接庫分析模塊、動態監控模塊、攻擊檢測模塊;
所述二進制插樁工具pin支持ia-32,intel(r)64和intel(r)許多集成核心架構的android*,linux*,osx*和windows*操作系統和可執行文件。pin允許pintool工具在可執行文件的任意位置中插入任意代碼(c或c++編寫)。插入的代碼在可執行文件運行時動態添加,但是不改變可執行文件的原始結構,可以使得將二進制pin插樁工具連接到已經運行的進程,所述目標程序為可執行文件。
步驟3:若為ret指令,則利用基于ret指令的檢測模塊(如圖2)進行檢測;若為call指令,則利用基于call指令的檢測模塊(如圖3)進行檢測;若為jmp指令,則利用基于jmp指令的檢測模塊(如圖4)進行檢測;
1、rop及其變種攻擊(“x”op)中,所述ret指令的特征為:ret指令跳轉的目的地址的前一條指令不是call指令;ret指令返回的位置在函數內部,且該函數是第一次被調用;ret指令在條數閾值內的出現頻數會突然增加。
函數分為幀函數和非幀函數,由于編譯器的優化,函數開始的特征序列會被優化掉,因此不能完全采用所述特征序列來判斷call指令跳轉的目的地址是否為函數的入口地址。
幀函數開始序列為:
pushebp
moveebp,esp
非幀函數開始序列:
sub$value,ebp
在所述目標程序執行前期,動態鏈接庫分析模塊(如圖5)已分析出此執行文件調用的所有函數的起始地址和終止地址并存儲在容器中,所述容器為緩存區。
則基于ret指令的檢測模塊的具體檢測步驟為:
步驟(1):監控寄存器,提取ret指令跳轉的目的地址;
步驟(2):檢測所述目的地址的前一指令是否為call指令,若為call指令跳轉到步驟(3)執行,否則發出攻擊警報;
步驟(3):利用數據搜索模塊對所述目的地址進行搜索,所述數據搜索模塊包括第一緩存區和第二緩存區,所述一級緩存區用于存放近期使用過的函數信息,所述一級緩存區空間小,搜索數據的時間很快;所述二級緩存區用于存放所有的函數信息,所述一級緩存區空間大,采用rbtree數據結構對函數信息進行儲存;所述一級緩存區用于減少搜索時間,提高系統的性能;在一級緩存區中搜索目的地址,若搜索到目的地址跳轉到步驟(4),否則在二級緩存區搜索,搜索到目的地址后跳轉到步驟步驟(4);
步驟(4):將搜索到的數據返回給攻擊檢測模塊,所述攻擊檢測模塊根據地址范圍分析法,判斷所述ret指令的返回地址是否是函數入口地址;若是函數入口地址,跳轉至步驟(5);若不是函數入口地址并且所述返回地址是第一次進入該函數則發出rop及其變種攻擊警告;
步驟(5):設定檢測指令的條數閾值和頻數閾值,條數閾值為20,頻數閾值為4,檢測所述目標地址后20條指令中是否有連續性的jmp指令、call指令、ret指令出現,若出現頻數大于4,則認為受到攻擊并發出攻擊警報,否則跳轉至步驟2。
2、rop及其變種攻擊中,所述call指令的特征為:call指令調用的不是一個完整的子過程;call跳轉的目的地址不是子過程的開始地址。
則基于call指令的檢測模塊的具體檢測步驟為:
如果完全采用在容器中對call跳轉的目的地址進行搜索匹配的方法,來判斷所述目的地址是否為函數的起始地址會增加程序的檢測時間。因此對call指令進行檢測方式為:首先使用函數固定的特征序列與所述目的地址的前幾條指令進行匹配,如果匹配成功,則認為call指令跳轉的目的地址是函數的起始地址;否則根據預先存儲在容器中的數據來判斷call指令跳轉到的目的地址是否在函數的起始地址。
(1)獲取call指令跳轉的目的地址,跳轉到步驟(2);
(2)判斷所述目的地址的前幾條指令是否與函數的特征序列相匹配,若匹配成功,則把控制權移交給動態監控模塊,所述動態監控模塊用于跟蹤程序指令流和識別指令類型,否則跳轉到步驟(3);
(3)在一級緩存區中搜索目的地址,若搜索到目的地址則跳轉到步驟(4);否則執行二級緩存區搜索,搜索到目的地址后跳轉到步驟(4);
(4)把搜索到的數據返回給攻擊檢測模塊,所述攻擊檢測模塊根據地址范圍比較法,判斷目的地址是在函數范圍內還是在函數入口地址。如果是函數的入口地址,把控制權移交給動態監控模塊,跳轉至步驟2;否則發出rop及其變種攻擊警告,并停止檢測。
3、rop及其變種攻擊中,所述jmp指令的特征為:jmp指令跨函數跳轉,跳轉距離過大;跳轉的目的地址不在函數的開始位置。
基于jmp指令的檢測模塊的具體檢測步驟為:
(1)獲取jmp跳轉的目的地址和jmp指令的地址,跳轉到步驟(2);
(2)首先在一級緩存區中搜索目的地址,若在一級緩存區搜索到相應的函數信息,跳轉到步驟(3);否則執行二級緩存區搜索,并跳轉到步驟(3);
(3)將搜索到的數據返回給攻擊檢測模塊,所述攻擊檢測模塊判斷jmp指令的地址是否與跳轉的目的地址在同一個函數內,如果在同一個函數內,則沒有發生跨函數跳轉并立即返回;否則根據地址范圍比較法,判斷所述跳轉的目的地址是否是函數入口地址。如果是函數入口地址,跳轉至步驟2;否則發出rop及其變種攻擊警告。
如上所述即為本發明的實施例。本發明不局限于上述實施方式,任何人應該得知在本發明的啟示下做出的結構變化,凡是與本發明具有相同或相近的技術方案,均落入本發明的保護范圍之內。