專利名稱:一種基于虛擬機的rop攻擊檢測方法及系統(tǒng)的制作方法
技術領域:
本發(fā)明屬于系統(tǒng)安全技術領域,具體涉及一種基于虛擬機的R0P攻擊檢測方法和 系統(tǒng)。
背景技術:
隨著計算機系統(tǒng)在社會各領域應用的不斷加深,其安全性問題成為產(chǎn)業(yè)界和學術 界共同關注的焦點。惡意代碼一直是計算機系統(tǒng)安全的主要威脅和隱患之一,其危害性隨 著社會對計算機系統(tǒng)的依存性的提高不斷加重。計算機技術持續(xù)發(fā)展的同時,惡意代碼技 術也不斷升級,新攻擊技術的產(chǎn)生以及對抗手段的提升,均對傳統(tǒng)的檢測和防范技術帶來 了嚴峻的挑戰(zhàn)。利用返回導向編程(Return Oriented Programming, R0P)構(gòu)造的惡意代碼攻擊, 由于其隱蔽性等技術優(yōu)勢成為惡意攻擊防范研究的難點之一。俄羅斯安全專家Alexander Peslyak于1997年提出了“return-to_libc”攻擊,通過堆棧溢出的方法將控制流轉(zhuǎn)到libc 中的exec系統(tǒng)調(diào)用,從而實現(xiàn)對特定應用程序的提權(quán)。2007年,Hovav Shacham提出了 R0P 攻擊的概念,利用R0P技術實現(xiàn)了一種基于x86的惡意代碼構(gòu)造方法。該方法中利用指令 (而非函數(shù))使用“return-to-libc”攻擊,通過堆棧溢出將控制流轉(zhuǎn)到庫中某條ret指令 的前一條指令。通過精心構(gòu)造堆棧,配合如伽利略算法等在庫中查找可用指令,可以實現(xiàn) 每條指令執(zhí)行完成之后由ret跳到下一條所需指令,由此通過構(gòu)造的返回地址序列將庫中 已有的指令根據(jù)需要拼接起來成為指令序列,從而實現(xiàn)具有所需攻擊效果的惡意代碼的構(gòu) 造。該方法的特點是構(gòu)造惡意代碼實現(xiàn)了攻擊卻沒有任何代碼注入問題,因此可以躲避代 碼完整性校驗等傳統(tǒng)防范方法。此后,R0P攻擊方法被移植到其他架構(gòu)中,包括ARM,Power PC等RISC架構(gòu)上,其危害范圍不斷擴大,其相關檢測防范研究也引起了國內(nèi)外學者的廣泛 關注。針對R0P攻擊,已有一些研究人員提出了一定的對策?,F(xiàn)有的檢測及防范方法主 要包括(1)通過識別指令流中大量出現(xiàn)的ret指令檢測R0P攻擊由于R0P惡意代碼構(gòu)造方法中,代碼是通過取ret前的一條指令拼接而成的,因此 指令序列中會出現(xiàn)大量甚至一半的ret指令,這是與正常程序的重要區(qū)別。根據(jù)R0P攻擊 代碼的這一特性,通過檢測指令流中的ret指令實現(xiàn)R0P構(gòu)造的惡意代碼攻擊的檢測。(2)通過檢查堆棧使用規(guī)范檢測R0P攻擊由于R0P攻擊中的調(diào)用堆棧使攻擊者構(gòu)造出來,而非call指令生成的,據(jù)此通過 在檢測到ret指令時檢測其是否有對應的call指令的方法,實現(xiàn)R0P攻擊的檢測。(3)通過在被攻擊庫中去掉ret指令防范R0P攻擊被攻擊庫指的是構(gòu)造R0P攻擊代碼所使用的庫(如libc或kernel等)。由于構(gòu) 造R0P攻擊代碼需要被攻擊庫中含有ret指令(x86下指令碼0xC3),因此通過使用編譯技 巧將該指令碼從庫中移除,由此防范了 R0P攻擊的形成。
上述的檢測及防范方法均基于ret指令進行,然而ROP攻擊技術進一歩發(fā)展,其指 令序列形成方式不再局限于ret指令。例如使用pop指令和jmp指令配合替代ret指令實 現(xiàn)同樣的作用;或者使用ニ級跳轉(zhuǎn)的方法,將pop和jmp代碼的位置放入通用寄存器,然后 在庫中查找jmp[reg]實現(xiàn)控制流轉(zhuǎn)移,從而實現(xiàn)ROP攻擊的構(gòu)造。對于這些ROP攻擊構(gòu)造 方法,目前的檢測及防范方法已顯露出不足。另外,由于當前的防范方法均在操作系統(tǒng)上實 現(xiàn),依賴于操作系統(tǒng)本身的安全性,當被攻擊系統(tǒng)自身的可信性無法保障吋,對ROP攻擊的 防護則會失效。因此,如何能夠提供ー種ROP攻擊的檢測及防范方法成為保障系統(tǒng)安全的 重要需求。
發(fā)明內(nèi)容
針對現(xiàn)有技術中存在的技術問題,本發(fā)明的目的在于提出一種基于虛擬機的ROP 攻擊檢測防御方法,針對在不注入其他代碼的情況下利用操作系統(tǒng)中已有的ニ進制代碼構(gòu) 造惡意代碼的ROP攻擊方法,本發(fā)明的目的即在于檢測系統(tǒng)中運行的某服務進程中是否包 含ROP惡意代碼攻擊,對其進行防范從而保障服務中的進程的可用性和持續(xù)性。通過在需 要防護的系統(tǒng)硬件上運行虛擬機,將被保護的操作系統(tǒng)運行在虛擬域環(huán)境中,從而全面獲 取系統(tǒng)運行信息,基于ROP惡意代碼的特點,即利用操作系統(tǒng)中已有庫中的指令,結(jié)合構(gòu)造 堆棧內(nèi)容以連接成攻擊所需的指令序列,本發(fā)明通過識別堆棧內(nèi)容中是否包含大量的在庫 (如Iibc)的地址范圍內(nèi)的地址信息,來檢測是否存在ROP攻擊。進ー步地,當檢測到ROP 攻擊以后,通過攻擊隔離來阻止ROP攻擊的實現(xiàn),從而保護操作系統(tǒng)服務的可用性。本發(fā)明的主要內(nèi)容如下I、在需要防護的系統(tǒng)硬件上運行虛擬機,然后將被保護的操作系統(tǒng)運行在虛擬域 環(huán)境中,全面監(jiān)控系統(tǒng)運行信息;2、修改虛擬機中的事件處理程序,以實現(xiàn)在程序運行過程中對堆棧的寫操作的攔 截,和對堆棧的內(nèi)容的檢查等;3、定位需要保護的進程在執(zhí)行過程中需要進行堆棧檢查的地方,并設置斷點;4、當系統(tǒng)上下文切換到被保護進程,或者正在執(zhí)行堆棧檢查時,將堆棧進行標記, 目的是攔截對堆棧的寫操作并進行處理;5、當執(zhí)行到已設置的需要進行堆棧檢查的斷點處時,檢查堆棧內(nèi)容,通過識別算 法,檢測ROP攻擊是否存在;6、當檢測到ROP攻擊后,通過攻擊隔離,阻止ROP攻擊。本發(fā)明方法流程如圖I所示,本發(fā)明的步驟如下I)在需要防護的系統(tǒng)的硬件上運行虛擬機,將被保護的操作系統(tǒng)運行在虛擬域環(huán) 境中;2)利用定位程序定位設定的目標進程,從CPU控制寄存器CR3中定位目標進程的 進程控制塊結(jié)構(gòu)體,從進程控制塊結(jié)構(gòu)體中獲取目標進程的進程信息;3)修改虛擬機進程上下文切換事件處理程序,監(jiān)控系統(tǒng)中進程運行,當上下文切 換到目標進程時,將堆棧標記為只讀;4)修改虛擬機內(nèi)存頁面錯誤事件處理程序,攔截對堆棧的寫操作,并將相應的堆 棧標記為可寫;
5)通過反匯編定位到被保護進程在執(zhí)行過程中下一個需要進行堆棧檢查的地方, 在需要進行堆棧檢查處設置斷點;6)修改虛擬機調(diào)試異常事件處理程序,截獲斷點,將目標進程堆棧內(nèi)存頁面標為 只讀,并調(diào)用堆棧檢測模塊;7)堆棧檢測模塊執(zhí)行堆棧內(nèi)容檢查,并結(jié)合動態(tài)鏈接庫地址范圍,檢查堆棧內(nèi)容 中是否包含大量的在動態(tài)鏈接庫的地址范圍內(nèi)的地址信息,根據(jù)事先設置的閾值,檢測是 否存在R0P攻擊;8)當檢測到R0P攻擊時,停止相應進程,等待修復,其他進程繼續(xù)運行服務,以保 護系統(tǒng)的可用性。9)如果此時沒有R0P攻擊,則使目標進程繼續(xù)運行,同時將目標進程的堆棧標記 為只讀,繼續(xù)進行實時監(jiān)控。進一步的,在步驟1)中,在所述虛擬機上,本發(fā)明于監(jiān)控層添加監(jiān)控模塊,從而全 面監(jiān)控在虛擬域中運行的系統(tǒng)中的進程、堆棧、動態(tài)鏈接庫等信息。在步驟2)中,定位程序定位設定的目標進程信息的具體方法是當前運行進程的 內(nèi)核堆??梢酝ㄟ^任務寄存器定位。在內(nèi)核堆棧的底部,可以找到進程的控制塊結(jié)構(gòu)體。該 結(jié)構(gòu)體是一個指向任務描述符的指針。通過任務描述符,可以獲得關于一個進程的所有所 需要的信息,例如描述虛擬內(nèi)存結(jié)構(gòu),調(diào)度信息,動態(tài)鏈接庫地址信息等等。進一步,通過任 務描述符中的任務指針,可以定位所有客戶操作系統(tǒng)的進程,從而得到所有進程的信息。在步驟4)中,所述的攔截堆棧寫操作的方法,是通過修改頁面錯誤事件處理程序 實現(xiàn)的。由于在步驟3)中,當被保護進程運行時,堆棧被標記為已讀,因此對堆棧的寫操作 將會引起頁面錯誤。本發(fā)明在修改的頁面錯誤事件處理程序中識別該錯誤是否引發(fā)自對一 個可寫內(nèi)存區(qū)域標記為只讀后發(fā)生的寫操作,若是,本發(fā)明加入處理程序?qū)⒄{(diào)用斷點定位 模塊。在步驟5)中,所述的反匯編定位斷點的方法是在虛擬機中編寫反匯編代碼,從 當前指令寄存器開始的位置反匯編用來查找下一個返回指令或與其作用相同指令(即有 類似返回指令地址跳轉(zhuǎn)功能的指令),該查找通過識別操作碼完成。當查找到下一個需要設 置斷點的位置時,用調(diào)試寄存器DR0來保存該斷點,并設置調(diào)試寄存器DR7的相關比特(全 局斷點位,地址長度位和讀寫執(zhí)行位)以允許這一中斷。在步驟7)中,所述的具體檢測方法是首先找到潛在被攻擊庫得地址范圍集合, 然后檢查堆棧頂?shù)膎個元素內(nèi)容,看其是否屬于潛在被攻擊庫的地址范圍之內(nèi),計算其在 該地址范圍內(nèi)的元素的比例,根據(jù)檢測需要設置門限值,以判定是否存在R0P攻擊,n為自 然數(shù)。本發(fā)明提供了一種基于虛擬機的R0P攻擊防御系統(tǒng),該系統(tǒng)基于虛擬機,由六個 主要部分組成事件處理模塊、堆棧標記模塊、斷點定位模塊、堆棧檢查模塊、動態(tài)鏈接庫定 位模塊和攻擊隔離模塊。其中,事件處理模塊修改虛擬機中的事件處理程序?qū)崿F(xiàn)堆棧寫操 作攔截和斷點中斷的攔截,并在對應時刻調(diào)用斷點定位模塊和堆棧檢查模塊。堆棧標記模 塊負責在上下文切換到需保護進程時以及進行堆棧檢查后,將堆棧標記為只讀,從而喚起 頁面錯誤致使對于堆棧的寫操作能被攔截及處理。斷點定位模塊的作用是定位到需要執(zhí)行 堆棧檢查的地方,從而使需要檢查堆棧內(nèi)容的地方之外的指令能夠常規(guī)執(zhí)行。動態(tài)鏈接庫位模塊用于定位目標程序使用的動態(tài)鏈接庫的地址范圍。堆棧檢查模塊負責檢測R0P攻 擊是否存在。攻擊隔離模塊是在系統(tǒng)其他進程功能繼續(xù)運行的情形下阻止攻擊在系統(tǒng)中擴散。與現(xiàn)有技術相比,本發(fā)明的優(yōu)點在于本發(fā)明采用了基于硬件虛擬化技術實現(xiàn)的R0P攻擊檢測及防御方法,此方法對于 被保護的系統(tǒng)是高透明的,并且不依賴于被保護操作系統(tǒng)的安全性,可以在操作系統(tǒng)不可 信時正確完成檢測及防范工作。本發(fā)明提出了一種通過檢查當前線程堆棧的內(nèi)容來檢測 R0P攻擊的算法,并可通過可調(diào)節(jié)的參數(shù),對R0P攻擊具有檢測率高,誤報率低等特點。進一 步地,本發(fā)明在檢測到R0P攻擊以后,通過停止進程有效阻止了 R0P攻擊的危害,保護系統(tǒng) 不會被R0P惡意代碼攻擊,從而保護了系統(tǒng)服務的可用性。
圖1為本發(fā)明方法流程圖;圖2為基于虛擬機的R0P攻擊防御系統(tǒng)結(jié)構(gòu)圖。
具體實施例方式下面結(jié)合附圖詳細說明本發(fā)明的技術方案如圖2所示,本發(fā)明的基于虛擬機的R0P攻擊防御系統(tǒng),該系統(tǒng)基于虛擬機,由六 個主要部分組成事件處理模塊、堆棧標記模塊、斷點定位模塊、堆棧檢查模塊、動態(tài)鏈接庫 定位模塊和攻擊隔離模塊。為了實現(xiàn)R0P檢測及攻擊防范過程中對于堆棧的寫操作的攔截 以及執(zhí)行堆棧內(nèi)容檢查,在事件處理模塊中修改了虛擬機中的三個事件處理程序。當上下 文切換到需保護進程時以及進行堆棧檢查時,堆棧標記模塊負責將堆棧標記為只讀,從而 喚起頁面錯誤致使對于堆棧的寫操作能被攔截及處理。由斷點定位模塊從當前指令開始計 算,定位到需要執(zhí)行堆棧檢查的地方,在檢查點之前的指令按照常規(guī)執(zhí)行。動態(tài)鏈接庫定位 模塊定位目標程序使用的動態(tài)鏈接庫的地址范圍;堆棧內(nèi)容檢查模塊利用動態(tài)鏈接庫的地 址范圍信息檢測R0P攻擊是否存在。若存在攻擊,則停止相應進程,從而保護系統(tǒng)的可用 性。(1)事件處理模塊為了攔截堆棧的寫操作,以及正確地執(zhí)行堆棧內(nèi)容檢查,本發(fā)明中的方法和系統(tǒng) 修改了虛擬機中的三個事件處理程序,即上下文切換事件處理程序、頁面錯誤事件處理程 序和調(diào)試異常事件處理程序。a)上下文切換事件處理程序的修改本發(fā)明針對特定進程的保護,因此通過修改虛擬機中的上下文切換事件處理程 序,來識別下一個預定執(zhí)行的進程是否是被保護進程。當下一個進程是被保護進程時,堆棧 標記模塊在影子頁表中將該進程的堆棧標記為只讀。針對上下文切換事件處理程序,本發(fā)明中修改結(jié)構(gòu)體CR_ACCESS,以便在虛擬機層 捕捉到進程上下文切換,當上下文切換發(fā)生時,通過內(nèi)核數(shù)據(jù)結(jié)構(gòu)信息定位堆棧范圍,并將 堆棧范圍數(shù)據(jù)保存下來。b)頁面錯誤事件處理程序的修改
本發(fā)明通過修改虛擬機中的頁面錯誤事件處理程序,以攔截對于堆棧的寫操作, 并調(diào)用斷點定位模塊。由于在對上下文切換事件處理程序的修改后,當被保護進程運行時, 堆棧被標記為只讀,因此對于堆棧的寫操作將會引起頁面錯誤。本發(fā)明在頁面錯誤事件處 理程序中識別該錯誤是否引發(fā)自對一個可寫內(nèi)存區(qū)域標記為只讀后發(fā)生的寫操作,若是, 本發(fā)明中加入的處理程序?qū)⒄{(diào)用斷點定位模塊,尋找硬件斷點的位置,同時將堆棧頁面標 記為可寫。具體實現(xiàn)方式是,本發(fā)明編寫了頁面錯誤事件處理程序替換原有的處理程序。頁 面錯誤事件處理程序的返回值為“0”或“1”,返回“0”代表是一個真實的常規(guī)的頁面錯誤因 此操作系統(tǒng)應該進行處理,返回1表示該頁面錯誤由影子頁表的不一致引起。10)本發(fā)明定義當下列三種情況滿足時,頁面錯誤由堆棧的寫操作引起1)原有 的頁面錯誤事件處理程序返回“1”;2)頁面錯誤的線性地址空間在堆棧范圍內(nèi);3)頁面錯 誤代碼代表一個寫訪問。對于寫訪問,將通過系統(tǒng)調(diào)試機制在執(zhí)行過程中下一個需要進行 堆棧檢查的地方設置一個硬件斷點。c)調(diào)試異常事件處理程序的修改硬件斷點將觸發(fā)一個調(diào)試異常,本發(fā)明修改調(diào)試異常事件處理程序,使之完成兩 個操作調(diào)用堆棧檢查模塊以識別R0P攻擊是否存在;將堆棧再次標記為只讀。具體實現(xiàn)方式是,在該處理程序中將調(diào)試寄存器DR0的內(nèi)容清除以停止當前斷 點,然后觸發(fā)堆棧檢查模塊識別R0P攻擊,之后觸發(fā)堆棧標記模塊將堆棧再次標記為只讀, 以便下一個檢查循環(huán)的執(zhí)行。(2)堆棧標記模塊利用虛擬機,從操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)中讀堆棧范圍,并將相應的內(nèi)存頁標記為只讀。 具體方法是,在虛擬環(huán)境中,利用影子頁面實現(xiàn)內(nèi)存虛擬化,用影子頁表實現(xiàn)地址轉(zhuǎn)換,將 其條目設置為只讀。在以下兩種情況下,堆棧標記模塊將堆棧標記為只讀(a)當上下文切換發(fā)生,并 且下一個調(diào)度的進程為被保護進程時;(b)進行堆棧檢查后。將堆棧標記為只讀的目的是喚起頁面錯誤,實現(xiàn)對于堆棧的寫操作的攔截以及處理。具體實現(xiàn)方式是首先檢查影子頁表中是否有特定的堆棧內(nèi)存頁線性地址。從該 檢查結(jié)構(gòu)中獲取相應的頁表項并且重置讀寫位,然后將此頁表項寫入影子頁表,最后執(zhí)行 TLB刷新以提升訪問權(quán)限。(3)斷點定位模塊本發(fā)明中的斷點是指堆棧內(nèi)容需要被檢查的點。斷點定位模塊由修改后的頁面錯 誤事件處理程序調(diào)用,該模塊輸出應設置斷點的位置值。由于R0P攻擊產(chǎn)生在返回指令執(zhí)行時刻,該模塊將從當前運行指令開始在指令流 中查找下一個返回指令。在當前指令和下一個斷點之間的指令將不被干擾地執(zhí)行。由于系 統(tǒng)中堆棧操作的頻繁性,這一方法保障了本系統(tǒng)的執(zhí)行能力,降低了執(zhí)行負載。具體實現(xiàn)方式是,在虛擬機中編寫反匯編代碼,在虛擬機內(nèi)核中執(zhí)行從當前指令 開始的反匯編以查找下一個返回指令或與其作用相同指令。本發(fā)明中只考慮找到返回指令 和與其作用相同指令,其他指令只需分析出長度而非具體的反匯編結(jié)果,因此,只需要識別操作碼(因為操作碼決定了尋址方式和指令長度當查找到下一個需要設置斷點的位置 時,用調(diào)試寄存器0如保存該斷點,并設置調(diào)試寄存器087的相關比特以允許這一中斷。 〔0063〕(幻動態(tài)鏈接庫定位模塊
〔0064〕 此模塊在虛擬機監(jiān)控層分析目標進程的進程控制塊結(jié)構(gòu)體。該結(jié)構(gòu)體中一般會包 含以下內(nèi)容 ⑶攻擊隔離模塊
〔0079〕 此模塊是要在檢測到攻擊的情況下,從虛擬機監(jiān)控層修改操作系統(tǒng)中的信息,停 止被攻擊進程繼續(xù)運行,并且使得其他進程無法和被攻擊進程進行交互。在隔離攻擊的同 時,使得其他不相關進程可以繼續(xù)運行。
〔0080〕 本發(fā)明提出的如?攻擊檢測方法,對于本領域的技術人員而言,可以根據(jù)需要自 己配置檢測門限信息,獲得需要的檢測精確率和誤報率下的檢測效果。
〔0081〕 盡管為說明目的公開了本發(fā)明的具體實施例和附圖,其目的在于幫助理解本發(fā)明 的內(nèi)容并據(jù)以實施,但是本領域的技術人員可以理解在不脫離本發(fā)明及所附的權(quán)利要求 的精神和范圍內(nèi),各種替換、變化和修改都是可能的。因此,本發(fā)明不應局限于最佳實施例 和附圖所公開的內(nèi)容,本發(fā)明要求保護的范圍以權(quán)利要求書界定的范圍為準。
權(quán)利要求
1.一種基于虛擬機的R0P攻擊檢測方法,其步驟為1)將待保護的操作系統(tǒng)運行在虛擬機提供的虛擬域環(huán)境中;2)利用定位程序定位設定的目標進程,獲取目標進程的進程信息;3)修改該虛擬機的進程上下文切換事件處理程序,監(jiān)控該系統(tǒng)中進程運行,當上下文 切換到目標進程時,將當前目標進程的堆棧標記為只讀;4)修改該虛擬機的內(nèi)存頁面錯誤事件處理程序,攔截當內(nèi)存頁面錯誤引發(fā)自對一個可 寫堆棧內(nèi)存區(qū)域標記為只讀后發(fā)生的寫操作,并將相應堆棧頁面標記為可寫;5)定位當前目標進程在執(zhí)行過程中下一需堆棧檢查的地方,在需堆棧檢查處設置斷占.6)修改該虛擬機的調(diào)試異常事件處理程序,截獲斷點并檢測R0P攻擊是否存在;7)當檢測到R0P攻擊時,停止當前目標進程;如果沒有R0P攻擊,則使目標進程繼續(xù)運 行,同時將目標進程的堆棧標記為只讀。
2.如權(quán)利要求1所述的方法,其特征在于所述定位程序從CPU控制寄存器CR3中定位 所述目標進程的進程控制塊結(jié)構(gòu)體,從進程控制塊結(jié)構(gòu)體中獲取目標進程的進程信息。
3.如權(quán)利要求1所述的方法,其特征在于修改虛擬機中的上下文切換事件處理程序的 方法為修改結(jié)構(gòu)體CR_ACCESS,使其能夠識別出目標進程。
4.如權(quán)利要求1所述的方法,其特征在于所述步驟3)中,在攔截的寫操作處設置一硬 件斷點;然后調(diào)用斷點定位模塊,尋找硬件斷點的位置并將相應堆棧頁面標記為可寫。
5.如權(quán)利要求1所述的方法,其特征在于所述步驟5)中,通過反匯編定位當前目標進 程在執(zhí)行過程中下一個需要進行堆棧檢查的地方并設置斷點,即從當前指令寄存器開始的 位置反匯編用來查找下一個返回指令或與其作用相同指令,當查找到下一個需要設置斷點 的位置時,用調(diào)試寄存器DR0來保存該斷點,并設置調(diào)試寄存器DR7以允許這一中斷。
6.如權(quán)利要求5所述的方法,其特征在于通過識別反匯編結(jié)果中的操作碼,查找下一 個返回指令或與其作用相同指令。
7.如權(quán)利要求1所述的方法,其特征在于檢測R0P攻擊是否存在的方法為a)將攻擊者可能利用的潛在被攻擊庫的地址集合設為SPA;b)將堆棧頂?shù)膎個堆棧元素數(shù)組設為Ast;其中,每一個元素為4字節(jié),AST(i)表示數(shù)組 中第i個元素,則其位置為堆棧頂部-4* (i-1);c)設在Ast數(shù)組中的元素屬于SPA的個數(shù)占Ast數(shù)組的比例為R(n),則
8.一種基于虛擬機的R0P攻擊檢測系統(tǒng),其特征在于包括一虛擬機,所述虛擬機包括 事件處理模塊、堆棧標記模塊、斷點定位模塊、堆棧檢查模塊、動態(tài)鏈接庫定位模塊和攻擊 隔離模塊;其中所述事件處理模塊,用于修改虛擬機中的事件處理程序?qū)崿F(xiàn)堆棧寫操作攔截和斷點中 斷的攔截,并在對應時刻調(diào)用斷點定位模塊和堆棧檢查模塊;所述堆棧標記模塊,用于在上下文切換到目標進程時以及進行堆棧檢查后,將堆棧標 記為只讀,從而喚起頁面錯誤致使對于堆棧的寫操作能被攔截及處理;所述斷點定位模塊,用于定位到需要執(zhí)行堆棧檢查的地方,從而使需要檢查堆棧內(nèi)容 的地方之外的指令能夠執(zhí)行;所述動態(tài)鏈接庫定位模塊,用于定位目標進程使用的動態(tài)鏈接庫的地址范圍;所述堆棧檢查模塊,用于檢測R0P攻擊是否存在。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于所述斷點定位模塊通過反匯編定位當前目標 進程在執(zhí)行過程中下一個需要進行堆棧檢查的地方并設置斷點,即從當前指令寄存器開始 的位置反匯編用來查找下一個返回指令或與其作用相同指令,當查找到下一個需要設置斷 點的位置時,用調(diào)試寄存器DR0來保存該斷點,并設置調(diào)試寄存器DR7以允許這一中斷。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于所述堆棧檢查模塊中設有一地址集合SPA和 一數(shù)組ast ;所述地址集合sPA用于將攻擊者可能利用的潛在被攻擊庫的地址;所述數(shù)組ast 用于存儲堆棧頂?shù)膎個堆棧元素,其中,每一個元素為4字節(jié),AST(i)表示數(shù)組中第i個元 素,則其位置為堆棧頂部-4*(i_l);所述堆棧檢查模塊執(zhí)行堆棧內(nèi)容檢查,如果R(n)的值 大于設置門限值,則識別為有R0P攻擊;其中,R(n)為AST數(shù)組中的元素屬于個數(shù)占 Ast數(shù)組的比例。
全文摘要
本發(fā)明公開了一種基于虛擬機的ROP攻擊檢測方法及系統(tǒng),屬于系統(tǒng)安全技術領域。本方法為1)將待保護的操作系統(tǒng)運行在虛擬域環(huán)境中;2)定位設定的目標進程,獲取目標進程的進程信息;3)監(jiān)控該系統(tǒng)中進程運行,當上下文切換到目標進程時,將當前目標進程的堆棧標記為只讀;4)攔截當內(nèi)存頁面錯誤引發(fā)自對一個可寫堆棧內(nèi)存區(qū)域標記為只讀后發(fā)生的寫操作,并將相應堆棧頁面標記為可寫;5)定位當前目標進程在執(zhí)行過程中下一需堆棧檢查的地方,設置斷點;6)截獲斷點并檢測ROP攻擊是否存在;當檢測到ROP攻擊時,停止當前目標進程,否則使目標進程繼續(xù)運行,同時將目標進程的堆棧標記為只讀。本方法具有檢測率高,誤報率低等特點。
文檔編號G06F9/455GK102663312SQ201210075159
公開日2012年9月12日 申請日期2012年3月20日 優(yōu)先權(quán)日2012年3月20日
發(fā)明者姜軍, 王蕊, 賈曉啟 申請人:中國科學院信息工程研究所