999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Windows內存防護機制研究

2017-11-23 07:09:05魯婷婷王俊峰
網絡與信息安全學報 2017年10期
關鍵詞:機制

魯婷婷,王俊峰,2

(1. 四川大學計算機學院,四川 成都 610065;2. 四川大學空天科學與工程學院,四川 成都 610065)

Windows內存防護機制研究

魯婷婷1,王俊峰1,2

(1. 四川大學計算機學院,四川 成都 610065;2. 四川大學空天科學與工程學院,四川 成都 610065)

近30年來,攻擊者利用Windows內存漏洞發起的攻擊事件層出不窮,其慣用手段是攻擊控制數據以劫持執行流。為此,微軟在Windows上加注了層層防護以遏止此類攻擊,但現階段部署的防護機制無法阻止針對非控制數據的攻擊。鑒于目前研究Windows內存防護機制的文獻寥寥無幾,對Windows采用的各種內存防護機制及其突破技術進行了深入研究,并詳述非控制數據防護的研究現狀,在此基礎上,分析了Windows內存防護面臨的挑戰,并討論了內存防護的未來之路。

Windows內存防護;內存防護機制;控制數據防護;非控制數據防護

1 引言

近30年來,針對內存溢出漏洞發起的攻擊數不勝數,從第一代網絡蠕蟲 Morris[1]到Heartbleed[2],每次攻擊都造成災難性后果。此類攻擊大多通過緩沖區溢出修改影響程序執行流程的控制數據,如返回地址[3]、虛表指針[4]等,進而劫持控制流,使其指向定制的shellcode,執行惡意代碼以達到攻擊目標,如圖1所示。安全界針對此類攻擊的防護已有大量的研究成果,如控制流完整性(CFI, control flow integrity)[5]、代碼指針完整性(CPI, code-pointer integrity)[6]等,多種成熟的防護技術也已部署到商業應用。但隨著控制數據防護技術的大范圍部署,另一類針對非控制數據的攻擊應運而生。非控制數據攻擊完全遵循合法的控制流,通過非法寫程序的關鍵數據(如決策數據[7])或者讀敏感數據破壞數據的完整性和機密性[8],以達到改變執行流、泄露安全信息或提升權限等目的,圖2為覆寫決策數據改變程序分支的示意。針對非控制數據攻擊的防護研究也已有數十載,相繼提出了很多防護技術,如數據流完整性(DFI, data flow integrity)[9]、數據空間隨機化(DSR, data space randomization)[10]等,但由于自身的局限性,目前此類防護技術還未能廣泛地部署到商業應用。

Windows作為全球占有量最大的桌面系統,其安全性直接關乎高達 90%[11]個人計算機的安全。面對馮·諾依曼體系的天然缺陷,接二連三的內存攻擊,微軟不得不在Windows系統上相繼部署層層防護,如數據執行保護(DEP, data execution prevention)[12]、控制流防護(CFG, control flow guard)[13]等,以加強系統的安全性。雖然這些內存防護機制加大了攻擊的難度,但由于每種機制都受限于特定的條件,因此也給攻破層層防護留下了機會。從Windows XP到Windows 10,隨著系統的逐步加固,利用緩沖區溢出實施控制數據攻擊的事件逐漸減少,與此同時,針對非控制數據的攻擊卻在增長,內存防護仍任重道遠。圖3展示了Windows已部署的內存防護機制及非控制數據防護技術的研究成果。接下來對Windows上的每種內存防護機制進行詳細介紹,并指出其局限性和突破技術;隨后介紹安全界針對非控制數據攻擊提出的各種防護方案;最后討論Windows內存防護存在的挑戰,以及未來之路。

圖1 覆蓋返回地址劫持控制流

圖2 覆寫決策數據改變程序分支

圖3 Windows已部署的內存防護機制及非控制數據防護研究成果

2 Windows已部署的內存防護機制

隨著緩沖區溢出漏洞利用的泛濫,微軟在每一次發布的Windows系統中都引入新的內存保護機制,這些機制成功阻擾了很多針對控制數據的攻擊,使Windows平臺下能利用的漏洞大大減少。然而每種機制都受限于特定條件,這給攻擊者留下了突破的機會。

2.1 GS安全編譯選項

微軟在吸收StackGuard[14]技術的思想上,獨立開發并在Windows XP SP2中引入GS[15]編譯技術,在visual studio 2003及以后版本中默認啟用此編譯選項。GS編譯選項為每個函數調用增加額外數據Security cookie和安全校驗操作,以檢測溢出攻擊。在函數調用時,系統以.data節中的第一個雙字作為Security cookie的種子,將其與函數棧幀棧頂指針ESP異或后的結果壓入棧中,作為當前函數的 Security cookie;由于 Security cookie位于函數局部變量和函數返回地址之間,當通過緩沖區溢出直接覆蓋返回地址時,也會覆蓋Security cookie;在函數返回時,系統執行安全校驗操作,將棧幀中的Security cookie還原并與保存在.data節中的Security cookie種子進行一致性驗證,若兩者不一致,表明棧幀中的 Security cookie遭到破壞,發生了溢出攻擊,立即進入異常處理流程,反之函數正常返回。此過程如圖 4所示。

除加入Security cookie之外,微軟在visual studio 2005及后續版本中使用了 Variables reordering[16]技術,將字符串變量移動到棧幀高地址,同時在棧幀低地址存儲指針類型和字符串類型參數的副本,避免溢出破壞局部變量和函數參數。此外,微軟在visual studio 2005 SP1引入新的安全標識#pragma strict_gs_check[17],實現對不符合GS保護條件的函數添加保護。

盡管GS能夠有效遏止直接修改返回地址的溢出攻擊,但其本身在設計上存在缺陷。一方面,GS只在函數返回時進行一致性驗證,在此之前沒有任何的安全檢查;另一方面,影響GS驗證結果的Security cookie種子保存在.data節的固定位置;此外,若定義了安全處理函數,其指針也將存放在.data節。因此大部分突破GS防護的技術都利用這三大缺陷,設法在函數返回之前劫持控制流、泄露.data節中的種子或同時修改棧幀中的Security cookie和.data節中的種子,修改保存在.data節中的安全處理函數指針。Litchfield[18]給出了多種突破GS防護機制的方案,如覆蓋異常處理函數指針、修改 cookie、重寫安全處理函數指針等。

圖4 GS防護機制原理示意

2.2 SafeSEHamp;SEHOP

結構化異常處理(SEH, structured exception handling)[19]是Windows采用的異常處理機制,其關鍵結構 EXCEPTION_REGISTRATION包含2個重要的指針:SEH鏈表指針和異常處理函數指針,通過溢出覆蓋異常處理函數指針是Windows平臺下經典的漏洞利用方式,從前述可知攻擊覆蓋異常處理函數指針也是突破 GS防護的重要手段。微軟在Windows XP SP2及Windows Vista SP1中分別引入SafeSEH和結構化異常處理覆蓋保護(SEHOP, structured exception handling overwrite protection)機制,以加強對SEH的保護。

SafeSEH在調用異常處理函數之前,對其進行有效性驗證。啟用/SafeSEH[20]鏈接選項的編譯器在編譯程序時將所有的異常處理函數地址提取出來存放到一張SafeSEH表中;當調用異常處理函數時,將其地址與SafeSEH表中的表項進行匹配;若SafeSEH表中沒有與其地址匹配的表項,表明其地址已被攻擊,立即終止異常處理函數調用,反之繼續調用。

SEHOP[21]是對 SafeSEH 的進一步完善,其思想最初由 Miller[22]提出。程序一般有多個EXCEPTION_REGISTRATION結構,這些結構組織成SEH鏈表存放在棧中,且此鏈末端保存系統默認的異常處理。在攻擊異常處理函數指針時,也會同時覆蓋指向下一個SEH結構的指針,這樣SEH鏈就被破壞?;诖耍琒EHOP在進行SafeSEH校驗之前,先檢查SEH鏈的完整性。如果SEH鏈中的最后一個異常處理函數指針沒有指向系統默認的異常處理函數ntdll!FinalExceptionHandler,則SEH鏈被破壞,立即終止異常處理函數調用,反之繼續SafeSEH校驗。整個SEH安全校驗過程如圖5所示。

SafeSEH和SEHOP對SEH的保護已經相當完善,能夠抵御大部分的SEH攻擊,但卻不能從根本上消除此類攻擊。SEHOP通過檢查SEH鏈的完整性實施安全防護,事實上可以偽造SEH鏈[23],使其最后一個異常處理函數指針指向ntdll!FinalExceptionHandler,從而通過檢查。對于SafeSEH,本身在實現時就有多個限制條件,Sotirov[24]在2008年Black Hat大會上提出了多種繞過SafeSEH的技術。

2.3 DEP

微軟在Windows XP SP2中引入DEP[12]來彌補數據與代碼混淆存儲的缺陷,將數據所在頁面標識為不可執行,當溢出成功轉向shellcode時,會企圖在數據頁執行指令,此時拋出異常,從而遏止shellcode的執行。

硬件DEP需要CPU和操作系統的雙重支持,2004年以后發行的CPU都支持DEP。要實現此功能,需在頁表項中添加新的標志位NX/XD,以標識是否允許在頁面上執行指令。當 NX/XD設置為1時,表示頁面不允許執行指令;當為0時,表示頁面允許執行指令。在 CPU不支持硬件NX/XD時,軟件DEP通過檢查SEH異常處理函數指針,確保其位于可執行頁的.text節。

圖5 SEH安全校驗機制原理示意

出于兼容性考慮,Windows并不能對所有進程都開啟DEP保護,尤其是無法確定一些第三方插件DLL是否支持DEP,對涉及這些DLL的程序一般都不會開啟DEP。DEP將數據頁標識為不可執行,以防止攻擊,但對于可寫可執行頁,DEP不起作用,典型的例子是JVM為JAVA對象或其他數據分配的是可寫可執行頁面,便可利用heap spray布局shellcode實施攻擊。另一種突破思路是代碼重用,在.text節中找到可重用的gadget組成具有一定攻擊目的的shellcode,面向返回的編程(ROP, return-orient programming)[25,26]是代碼重用的成熟技術,ret2libc[27]技術也可看作 ROP的特例。

2.4 ASLR

前述的所有防護機制都是針對控制數據的攻擊,這類攻擊都需要一個明確的跳轉地址,用來覆蓋控制數據。地址空間布局隨機化(ASLR,address space layout randomization)[28]是一種地址隨機化技術,在加載程序時不再使用固定的基址加載,從而增大定位跳轉地址的難度。

Whitehouse[29]詳細介紹了映像隨機化、堆棧隨機化、進程環境塊(PEB, process environment block)與線程環境塊(TEB, thread environment block)隨機化。映像隨機化在系統每次重啟時實現可執行文件(PE, portable executable)加載基址隨機化,使通用跳板指令的地址不再固定。堆棧隨機化在程序每次運行時隨機地選擇堆?;?,增大攻擊 SHE結構、虛表指針等堆棧數據的難度。PEB和TEB不再使用固定的加載基址,增加攻擊其中的函數指針難度。

ASLR給定位shellcode的跳轉地址帶來了巨大挑戰,固定的跳轉地址只在系統重啟前甚至是程序的本次運行中才有效。但ASLR仍然留下了可利用的缺陷。映像隨機化只對模塊加載基址的前2個字節做了隨機處理,后2個字節保持不變,加之并沒有對指令序列進行隨機化,故通用跳板、虛表指針等數據相對于加載基址的位置不變,如此便可利用“相對尋址”的概念動態地進行部分覆蓋[24,30]以定位跳轉地址。堆棧基址隨機化使程序每次運行時變量地址不同,但只能用來防止精準攻擊,無法防御只需大概的地址范圍就可實施攻擊的技術,如heap spray[31]。PEB和TEB即使完全隨機化,也可以通過FS寄存器確定其地址,防護能力很有限。

2.5 CFG

微軟在Windows 8.1 update 3和Windows 10中引入 CFG[13],進一步加固了內存防護堡壘。CFG是目前針對控制數據攻擊的最強防護,主要通過檢驗間接跳轉地址的有效性來防范攻擊。

編譯程序時啟動/guard:cf[32]選項,編譯器會分析出程序中所有間接調用地址,將其保存在Guard CF function table中,并在所有函數調用之前插入一段校驗代碼;當程序加載運行時,將進程空間中的每8個字節映射到CFGBitmap中的一位,如果8個字節中包含一個函數地址,對應位置為1,如此Guard CF function table中的每個地址都會轉換成CFGBitmap中的對應比特位。間接調用之前,將先以目標地址為參數調用校驗函數ntdll!LdrpValidateUserCallTarget(由函數指針_guard_check_icall_fptr指向),訪問CFGBitmap,若以目標地址索引到的CFGBitmap位為1,表明目標是一個有效的函數地址,進行間接調用;若為0,表明目標無效,或許已被攻擊,拋出異常,終止間接調用。此過程如圖6所示。

盡管CFG是強有力的防護措施,但CFG并不是完美無缺的。Tang[33]已詳細分析了CFG機制的缺陷,如CFGBitmap空間基址固定且能獲取、調用 NtAllocVirtualMemory 函數分配的可執行虛擬內存對應的CFGBitmap位全為1等。有缺陷就有突破的機會,可以通過獲取CFGBitmap基址改寫特定位狀態,使間接目標地址合法;借助虛擬內存操作NtAllocVirtualMemory定制位圖,繞過CFG檢驗。此外,CFG只對函數指針進行有效性檢查,并沒有檢查返回地址,因此另一種繞過CFG的方法是設法攻擊返回地址。Theori[34]在其博士論文中詳細介紹了基于Chakra JIT繞過CFG機制的方法。2017年Black Hat ASIA大會上,Sun[35]介紹了利用目標地址指針可寫并且不受 CFG保護的memory-based 間接調用來繞過CFG。

2.6 RFG

微軟部署的 CFG防護并沒有執行完全的CFI[5],CFG只檢查函數指針,而沒有檢查返回地址,也就無法防御針對返回地址[3]的攻擊或ROP[25,26]攻擊。為了彌補這一缺陷,2016年微軟又引入了返回流防護(RFG, return flow guard)[36]。

RFG將返回地址保存到fs:[rsp],并在函數返回前將其與棧上返回地址進行比較,從而有效阻止了針對返回地址的攻擊。開啟RFG需要操作系統和編譯器的雙重支持,在編譯階段,編譯器會以nop指令的形式在目標函數的首尾預留出指令空間。當目標可執行文件在支持并開啟RFG的系統上運行時,預留的指令空間會在加載階段被替換為RFG指令,首部替換的指令用來讀取函數的返回地址,并將該地址存放到fs:[rsp],尾部替換的指令在函數返回時檢查棧中的返回地址是否與fs:[rsp]中的一致,若一致,函數正常返回;若不一致,表明可能受到攻擊,將跳轉到_guard_ss_verify_failure,引發int29異常,進程崩潰,從而阻止惡意攻擊的進行。在不支持RFG的操作系統上運行時,這些nop指令不會影響程序的執行流程。RFG防護原理如圖7所示。RFG將返回地址保存到攻擊者不可控制的Thread Control Stack,極大增加了后向轉移攻擊的難度與代價,其與CFG的結合可實現對控制流比較完善的防護。

圖6 CFG防護原理示意

2.7 堆區防護技術

除了以上防護機制外,微軟專門針對堆區增加了很多安全校驗機制。Sotirov[24]在2008年Black Hat大會上詳細介紹了 Safe unlinking、Heap metadata cookies和 Heap metadata encryption堆區防護技術。Safe unlinking是在分配堆塊時,先驗證堆塊前向指針flink和后向指針blink的完整性,若完整性被破壞,將進行異常處理,反之才分配堆塊,此過程如圖 8所示。Heap metadata cookies類似于 GS的 Security cookie,主要在堆塊塊首加入安全cookie,以防止利用溢出覆蓋塊首中的 flink和 blink。Heap metadata encryption將堆塊塊首的重要數據與一個4 byte隨機數異或后進行存儲,以防止直接破壞這些數據。雖然這些技術可以減少堆區攻擊,但不難看出,大多都是對堆塊結構的防護,而沒有對堆區存儲的數據進行保護,如果攻擊堆區存儲的函數指針等關鍵數據,其后果不堪設想,因此這些機制的局限性很大。在Windows 10中,微軟又加入了Heap allocation randomization[37],每個新分配的堆塊都會加上一個隨機的偏移量,從而增大定位堆溢出目標的難度;此外,在堆塊前后分別加入了 Heap guard pages[37],凡企圖通過溢出攻擊堆塊,都會引起保護頁的修改,而修改保護頁的行為被視為內存破壞操作,此時系統就會立即終止程序。

圖7 RFG防護原理示意

圖8 Safe unlinking防護示意

3 非控制數據防護方案

上述都是微軟采用的針對控制數據攻擊的防護機制,目前微軟還沒有部署針對非控制數據攻擊的系統級防護措施,但此類攻擊卻頻頻出現,而且危害極其嚴重。例如,攻擊者利用2014年披露的 Heartbleed[2]漏洞實施攻擊,導致大量 Web服務器上的私鑰、cookie及密碼泄露,造成巨大的經濟損失。由于非控制數據攻擊完全遵循合法的控制流,所以現有的防護機制無法阻止非控制數據攻擊;而且隨著控制數據防護的逐步加固,可以預見,針對非控制數據的攻擊將紛沓而至;但就在此類防護還沒有大范圍部署的情況下,研究人員卻已提出多種利用方案,如 Data-Oriented Exploits[38]和面向數據的編程(DOP, data-oriented programming)[39]等,因此對于非控制數據的防護迫在眉睫。

自 Chen等[7]首次分析了非控制數據攻擊的嚴重危害之后,安全界陸陸續續提出多種針對非控制數據攻擊的防護技術,如 DFI[9]、DSR[10]、寫完整性檢查(WIT, write integrity testing)[40]和數據機密性與完整性(DCI, data confidentiality and integrity)[8]等,其中也不乏能同時防護控制數據和非控制數據的方案。

3.1 DIFT

Suh等[41]在2004年ASPLOS會議上提出動態信息流追蹤(DIFT, dynamic information flow tracking),盡管DIFT最初實現并不是為了防護非控制數據攻擊,但可以將其應用到非控制數據防護。DIFT通過追蹤并監控I/O數據的使用來實現防護,主要有3部分工作:首先,操作系統將來自I/O的潛在惡意數據標記為不可信數據;運行時,處理器根據每條指令的操作數和操作類型來傳播不可信數據,即動態信息流追蹤;當處理器檢測到一個可疑的不可信數據操作,立即生成一個陷阱,并交由操作系統的陷阱處理器處理,若陷阱處理器檢測到該操作違背了安全策略,將立即終止程序。防護原理如圖9所示。

DIFT防護對應用完全透明,不需要對程序進行任何修改,由操作系統和處理器實現,而且執行開銷相當小,僅有1.1%。但DIFT在實現之初存在一個嚴重的問題,采用寬松的不可信數據追蹤規則,這導致引入了不必要的陷阱。

圖9 DIFT防護原理

3.2 Pointer Taintedness Detection

Chen等[42]繼首次分析非控制數據攻擊的危害后,在 2005年 DSN會議上提出了 Pointer Taintedness Detection技術。該技術主要基于指針污染的概念實現攻擊檢測與防護,一個污染指針是指其值直接或間接地來自用戶輸入的數據,對污染指針的非法解引用被視為一起惡意攻擊。為實現污染,首先擴展了內存模型,為每個字節都增加了額外的污染位;當外部數據存入內存時,污染位被設置;處理器運行時,污染位將隨著每條指令對污染數據的操作而傳播;一旦包含污染位的數據被用作內存訪問的地址,便認為發生了污染指針的非法解引用,處理器將拋出異常,操作系統處理異常并終止進程,從而遏止攻擊。

Pointer Taintedness Detection是一個處理器級的防護技術,對應用完全透明,因此不需要重編譯/鏈接,并且能同時防護控制數據攻擊和非控制數據攻擊。從實現原理看,Pointer Taintedness Detection與DIFT都要對來自外部的數據進行標記,只是指針污染引入污染位進行標記,而DIFT是軟件標記方式,因此指針污染分析的執行開銷更小,但加入污染位增加了硬件開銷。此外,Chen等[42]的實驗結果表明,Pointer Taintedness Detection尚沒有發現已知的誤報,換言之,誤報率比較低,逼近 0。盡管指針污染防護能檢測大范圍的內存破壞,但并不能保證 100%的覆蓋,因此仍存在漏報。

3.3 DFI

Castro等[9]在2006年的OSDI會議上提出了針對非控制數據攻擊的防護技術數據流完整性(DFI, data flow integrity)。DFI通過檢查變量操作是否符合數據流來防范針對非控制數據的攻擊。首先,通過靜態的定義可達性分析獲得程序的數據流圖(DFG, data flow graph),并在每個變量寫操作之前插入檢測指令;運行時,對每個變量進行實際的定義可達性分析,將其最后一條寫指令的 identifier存入運行時定義表(RDT, runtime definitions table);當讀一個變量時,先以變量地址索引 RDT表中的 identifier,再檢查 identifier是否存在于靜態DFG,若不存在,數據流完整性被破壞,拋出異常。此過程如圖10所示。DFI通過流敏感的過程內分析和上下文敏感的過程間分析生成可達性定義,流敏感的過程內分析計算在函數內聲明的局部變量的可達性定義,上下文敏感的過程間分析計算在函數外聲明的變量的可達性定義。

DFI是一個比較通用的防御技術,可以同時防護控制數據攻擊和非控制數據攻擊,可自動應用到C/C++程序而不需要任何的修改。但DFI的實現相對保守,為變量的每個讀操作都包含了所有的可達性定義,這些可達性定義對某些讀操作來說可能是多余的,因此 DFI不精確,存在漏報;此外 DFI是一個全局防護技術,對所有變量進行檢查而沒有考慮變量的安全敏感性,因此執行開銷大。

圖10 DFI防護流程

3.4 DSR

繼ASLR[28]和指令集隨機化(ISR, instruction set randomization)[43,44]之后,2008年Bhatkar等[10]提出了另一種隨機化技術數據空間隨機化(DSR,data space randomization)。DSR對內存數據進行隨機化處理,同一等價類中的變量使用相同掩碼進行加密存儲,不同等價類使用不同掩碼,讀變量時再使用該掩碼異或得到實際數據。DSR的工作主要分為3步:首先,利用Steensgaard[45]指針分析法決定不同數據的掩碼;隨后,生成程序的指針指向圖(points-to graph),用來計算等價類,以便為其分配掩碼;最后對程序中的變量進行轉換,即用變量與其掩碼的異或值替換變量本身。

相比于ASLR和ISR只能防御控制數據攻擊,DSR亦能防護非控制數據攻擊。相對于DFI運行時平均代價44%~103%[9],DSR性能開銷更低,平均只有15%。鑒于C語言中指針的使用,很難為每個變量分配唯一的掩碼,因此DSR使用了等價類的概念為指針解引用相同的變量分配同一個掩碼,計算等價類依賴于points-to graph生成算法,DSR使用Steensgaard算法,而Steensgaard算法將相同指針指向的變量合成一個節點,因此算法的效率較高,但同時導致分析不精確。

3.5 WIT

Akritidis等[40]在2008年的IEEE Samp;P會議上提出了一種可以同時防護控制數據攻擊和非控制數據攻擊的技術寫完整性檢查(WIT, write integrity testing)。在編譯階段,WIT利用過程間的points-to分析計算程序的控制流圖和程序中可寫的對象集;運行時,WIT執行寫完整性檢查,阻止指令對非靜態分析的可寫對象集之外的其他對象進行寫操作,并執行控制流完整性,確??刂妻D移遵循靜態控制流圖。具體來說,WIT通過points-to分析為可寫的對象和其相應的寫指令分配相同的顏色,并將其顏色保存到顏色表中,執行寫完整性檢查時,再在顏色表中查找寫對象的顏色并將其與寫指令的顏色進行比較,不一致表明違背了寫完整性,將拋出異常;對于控制流防護也一樣,為間接調用指令和其對應的目標地址分配相同的顏色值,執行間接調用檢查時,比較目標地址與間接調用指令的顏色是否相同,不同表明發生了控制流劫持,拋出異常。此過程如圖11所示。

WIT利用靜態分析和動態插樁檢測確保寫完整性和控制流完整性,有力防護針對控制數據和非控制數據的攻擊;通過靜態分析決定安全對象(不會違背寫完整性的對象),只對不安全的可寫對象執行寫完整性,減少不必要的安全檢查,降低了執行開銷(平均7%);同時WIT編譯C/C++程序時不需要對其進行任何修改。但WIT并不是很完美,靜態分析時利用points-to計算不安全對象,只對其進行完整性檢查,雖然降低了執行開銷,但限于points-to分析的精度,無法保證100%的覆蓋,可能會存在漏報的情況;此外,WIT只對寫操作進行了完整性檢查,并沒有對讀操作進行安全檢查,因此仍然無法阻止信息泄露;另外在實現WIT時需要維護顏色表,引入了額外的空間開銷。

圖11 WIT防護過程

3.6 SIDAN

2009年,Demay等[46]構建了一個面向非控制數據攻擊的檢測模型 SIDAN(software instrumentation for detecting attacks on non-control-data)。SIDAN主要通過驗證系統調用所依賴的數據項(系統調用參數及影響系統調用執行的條件變量)狀態的一致性來檢測內存錯誤,從而檢測非控制數據攻擊。首先進行靜態分析,利用程序依賴圖(PDG, program dependency graph)獲取每個系統調用所依賴的變量集,導出這些變量之間的約束,從而建立起一個數據行為模型,同時在系統調用之前加入合理性檢查;運行時,檢測系統調用所依賴的變量是否符合靜態分析的約束,如不符合,說明發生了非法系統調用。

鑒于在系統調用點并不是所有變量都可見,SIDAN并不能對所有的系統調用都進行檢查。檢查時在每個函數調用中插入斷言來檢測執行路徑上可見并影響系統調用的變量,所以SIDAN的檢測精度依賴于生成的斷言數量和質量,但無法保證所有的斷言都被發現,因此SIDAN存在漏報。但如果違背了變量約束,說明發生了非控制數據攻擊,因此沒有誤報。

3.7 ValueGuard

ValueGuard[47]的原理十分簡單,主要借鑒StackGuard[14]思想,只是將其防護對象從返回地址擴展到了所有變量,所以可防御非控制數據攻擊。ValueGuard在每個變量前加入canary,并將canary及變量封裝成一個結構體,在使用變量時,先檢查canary的完整性,若被破壞,表明發生了溢出攻擊,立即終止程序。ValueGuard對所有變量進行保護,代價相當大;而且由其實現原理可知,ValueGuard只能檢測通過溢出覆蓋非控制數據的攻擊;而且實現ValueGuard需要進行重編譯,因此 ValueGuard并不適用于商業應用。

圖12 DCI防護流程

3.8 DCI

前述的非控制數據防護技術大部分都是對程序的所有數據進行檢查,而這些數據中有大量非安全敏感數據,所以引入了不必要的開銷,致使其無法應用于商業軟件。為了應對這一情況,Carr等[8]在2017年ASIA CCS會議上提出了數據機密性與完整性(DCI, data confidentiality and integrity)[8]。DCI按照類型將數據分為安全敏感數據和不敏感數據,只對敏感數據進行精確的空間和時間安全檢測;對于不敏感數據,DCI只進行粗粒度的邊界檢查,從而降低執行開銷。空間安全檢測通常涉及越界的指針解引用,時間安全檢測通常涉及未初始化或已釋放的指針解引用。DCI在C/C++語言中引入注解,允許程序員定義保護類型(安全敏感數據類型),運行時,DCI禁止對此類型數據的非法讀或寫,從而保證了數據的機密性和完整性。具體流程如下。首先程序員向源代碼中加入注解定義程序中的敏感數據類型。編譯時,識別敏感變量及相關數據流,加入安全檢測程序。運行時,遵循隨后策略進行安全檢查。1) 對于敏感數據:檢查指向敏感數據的指針解引用是否在相關的內存對象邊界內或者是否是有效的內存對象,若不在邊界內或不是有效的對象,表明發生了越界讀或非法寫,破壞了數據機密性或完整性,立即終止程序;2) 對于非敏感數據:檢查其指針解引用是否在敏感數據內存區,若是,終止程序;3) 敏感數據和非敏感數據之間禁止任何的數據流。此過程如圖12所示。

DCI將數據分為安全敏感數據和非敏感數據,對非敏感數據進行粗粒度的安全檢測,從而降低了開銷,同時對敏感數據進行精確的安全檢查,實現對非控制數據的防護,兼顧了性能與效能。但DCI需要程序員定義敏感數據類型,如此DCI的防護效能就依賴于程序員的專業素質;同時由于人工干預,DCI無法實現自動分析敏感數據類型。另外,由于人工定義敏感數據類型難免有疏漏,若將敏感數據誤判為非敏感數據,而DCI又對非敏感數據只進行粗粒度安全檢測,最終還是可以通過修改非敏感數據實施攻擊。

無論是Windows已部署的針對控制數據的防護機制還是未部署的非控制數據防護技術,在實現上或多或少都存在問題,但就效能來說,都起到很好的防護作用,表1對各類防護方案的優缺點進行了分析。

表1 各類防護方案分析

4 結束語

隨著Windows每個版本的發布,都會引進大量的內存防護機制,系統的安全性在不斷加強。雖然微軟已為堆棧等內存區加注了層層防護,增大了攻擊此區域內控制數據的難度,也成功遏止了大部分的控制流劫持攻擊。但每種防護機制,鑒于實現時的限制條件,多多少少都存在可以繞過的缺陷,甚至激發出成熟的突破技術。對于GS[15]防護,關鍵的校驗數據Security cookie可以通過各種方式被泄露;偽造SEH鏈亦能通過SEH安全校驗機制[23];而DEP[12]和ASLR[28]又分別促進ROP[25,26]和heap spray[31]技術的發展,而且由于兼容性問題,很多第三方應用的DLL并不支持DEP,ASLR也只對加載基址進行隨機化,并沒有實施 ISR[43,44]對指令序列進行隨機化,仍無法阻止部分覆蓋攻擊[24];CFG[13]和RFG[36]盡管對控制流進行了強有力的防護,但并沒有實現完全的CFI[5],只是通過對目標程序進行靜態分析獲得所有間接跳轉地址,在運行時將間接跳轉地址與靜態分析的結果進行簡單的匹配來檢查間接跳轉地址的有效性,并沒有實施Path-sensitive CFI[48]、Context-sensitive CFI[49]和 CPI[6],仍無法完全遏止控制流劫持攻擊(如 call-oriented programming[50]),因此對已部署的控制數據防護機制仍需進一步完善。

此外,微軟目前還沒有在Windows上部署針對非控制數據攻擊的防護措施,而此類攻擊卻正在泛濫,盡管現階段安全界提出的非控制防護技術不乏可以有效防御此類攻擊的方案,但大多都因其限制條件無法應用于商業軟件,因此Windows的內存防護任務仍很艱巨。DFI[9]、DSR[10]盡管可以檢測大范圍的非控制數據破壞,同時也能檢測控制數據攻擊,但因全局防護帶來了很大的執行開銷;DIFT[41]和Pointer Taintedness Detection[42]雖執行開銷小,也能防護大部分的攻擊,但由于污染數據的標記算法不精確,會造成很多漏報,而且增加污染位也引入了空間開銷;SIDAN[46]和ValueGuard[47]需要對源碼進行修改,而且防護范圍很有限,SIDAN只對系統調用進行檢測,ValueGuard只能阻止堆棧攻擊;WIT[40]算是一個比較高效的防護方案,比DFI和DSR的執行開銷都小,并且能同時防護控制數據攻擊和非控制數據攻擊,但WIT只對寫操作進行了完整性檢查,并沒有對讀操作進行檢查,因此仍無法阻止越界讀而引起的信息泄露;DCI[8]對非敏感數據進行粗粒度的安全檢測,對敏感數據進行精確的安全檢查,較DFI、DSR的大范圍防護降低了執行開銷,較WIT只對寫操作進行檢查,DCI可同時對寫操作與讀操作進行檢查,但DCI需要程序員定義敏感數據類型,存在漏報情況,而且由于DCI對非敏感數據只進行粗粒度安全檢測,仍無法阻止通過修改非敏感數據實施攻擊。因此仍需要研究兼顧防護效能與代價的非控制數據防護方案。

面對如此嚴峻的內存防護任務,微軟應從多個方面入手,加強Windows的安全性,將針對內存攻擊的危害最小化。對于已部署的控制數據防護方案應進一完善,如可考慮利用路徑敏感分析和上下文敏感分析增強 CFG的防護效能、實施ISR阻撓針對ASLR的部分覆蓋攻擊等;其次,將現有的多種防護機制配合使用,以發揮最大的防護效力;另外,出于兼容性考慮,現有的防護機制并不全都默認開啟,因此,微軟應加強與第三方軟件合作,引導其用安全的代碼保護功能開發第三方軟件,以解決兼容性問題,最大化安全機制的防護范圍。而隨著控制數據攻擊代價的與日俱增,攻擊者必會將視角轉移到非控制數據攻擊,未來針對非控制數據的攻擊將會泛濫,部署系統級非控制數據防護機制刻不容緩;同時由于現存的非控制數據防護方案很難取得效能與代價的平衡,因此仍需研究兼顧兩者且適應商用的方案。

[1] Morris worm[EB/OL]. https://en.wikipedia.org/wiki/Morris_worm.

[2] DURUMERIC Z, LI F, KASTEN J, et al. The matter of heartbleed[C]//2014 Conference on Internet Measurement. 2014:475-488.

[3] ZATKO P. How to write buffer overflows[EB/OL]. http://insecure.org/stf/mudge_buffer_overflow_tutorial.html.

[4] HOGLUND G. Advanced buffer overflow technique[EB/OL].http://www.blackhat.com/presentations/bh-asia-00/greg/greg-asia-0 0-stalking.ppt.

[5] ABADI M, BUDIU M, ERLINGSSON U, et al. Control-flow integrity[C]//The 12th ACM Conference on Computer and Communications Security. 2005: 340-353.

[6] KUZNETSOV V, SZEKERES L, PAYER M, et al. Code-pointer integrity[C]//The 11th USENIX Symposium on Operating Systems Design and Implementation. 2014: 147-163.

[7] CHEN S, XU J, SEZER E C, et al. Non-control-data attacks are realistic threats[C]//The 14th USENIX Security Symposium. 2005:177-191.

[8] CARR S A, PAYER M. DataShield: configurable data confidentiality and integrity[C]//2017 ACM on Asia Conference on Computer and Communications Security. 2017:193-204.

[9] CASTRO M, COSTA M, HARRIS T. Securing software by enforcing data-flow integrity[C]//The 7th USENIX Symposium on Operating Systems Design and Implementation. 2006:147-160.

[10] BHATKAR S, SEKAR R. Data space randomization[C]//The 5th International Conference on Detection of Intrusion and Malware,and Vulnerability Assessment. 2008:1-22.

[11] Usage share of operating systems[EB/OL]. https://en.wikipedia.org/wiki/Usage_share_of_operating_systems#Desktop_and_laptop_computers.

[12] ANDERSEN S. Memory protection technologies[EB/OL]. https://technet.microsoft.com/en-us/library/bb457155(d=printer).aspx.

[13] Control flow guard[EB/OL]. https://msdn.microsoft.com/library/Windows/desktop/mt637065(v=vs.85).aspx.

[14] COWAN C, PU C, MAIER D, et al. StackGuard: automatic adaptive detection and prevention of buffer-overflow attacks[C]//The 7th USENIX Security Symposium. 1998:63-77.

[15] GS compiler option documentation for Visual Studio 2003[EB/OL].https://msdn.microsoft.com/en-us/library/8dbf701c(v=vs.71).aspx.

[16] RICHARTE G. Four different tricks to bypass StackShield and StackGuard protection[EB/OL]. https://www.cs.purdue.edu/homes/xyzhang/fall07/Papers/defeat-stackguard.pdf.

[17] strict_gs_check pragma documentation for Visual Studio 2005[EB/OL].https://msdn.microsoft.com/en-us/library/bb507721 (v=vs.80).aspx.

[18] LITCHFIELD D. Defeating the stack based buffer overflow prevention mechanism of Microsoft Windows 2003 server[EB/OL].http://www.blackhat.com/presentations/bh-federal-03/bh-fed-03-litc hfield.pdf.

[19] PIETREK M. A crash course on the depths of Win32 structured exception handling[EB/OL]. https://www.microsoft.com/msj/0197/exception/exception.aspx.

[20] SAFESEH linker option documentation for Visual Studio 2003[EB/OL].https://msdn.microsoft.com/en-us/library/9a89h429(v=vs.71).aspx.

[21] Preventing the exploitation of structured exception handler (SEH)overwrites with SEHOP[EB/OL]. https://blogs.technet. microsoft.com/srd/2009/02/02/preventing-the-exploitation-of-structured-exce ption-hander-seh-overwrites-with-sehop/.

[22] Miller M. Preventing the exploitation of SEH overwrites[EB/OL].http://www.uninformed.org/?v=5amp;a =2amp;t=pdf.

[23] BERRE S L, CAUQUIL D. Bypassing SEHOP[EB/OL].https://repo.zenk-security.com/Reversing%20.%20cracking/Bypassi ng%20SEHOP.pdf.

[24] SOTIROV A, DOWD M. Bypassing browser memory protections[EB/OL]. http://www.blackhat.com/presentations/bh-usa-08/Sotirov_Dowd/bh08-sotirov-dowd.pdf.

[25] SHACHAM H. The geometry of innocent flesh on the bone: return-into-libc without function calls (on the x86)[C]//The 14th ACM CCS. 2007:552-561.

[26] BUCHANAN E, ROEMER R, SAVAGE S, et al. Return-oriented programming: exploitation without code Injection[EB/OL]. http://www.blackhat.com/presentations/bh-usa-08/Shacham/BH_US_08_Shacham_Return_Oriented_Programming.pdf.

[27] Bypassing Windows hardware-enforced data execution prevention[EB/OL]. http://www.uninformed.org/?v=2amp;a=4amp;t=pdf.

[28] PaX ASLR[EB/OL]. http://pax.grsecurity.net/docs/aslr.txt.

[29] WHITEHOUSE O. An analysis of address space layout randomization on Windows VistaTM[EB/OL]. http://www.symantec.com/ avcenter/reference/Address_Space_Layout_Randomization.pdf.

[30] SOTIROV A. Windows ANI header buffer overflow[EB/OL].http://www.phreedom.org/research/vulner-abilities/ani-header/.

[31] Heap spraying[EB/OL]. https://en.wikipedia.org/wiki/Heap_spraying#cite_note-8.

[32] Guard compiler option documentation for Visual Studio 2015[EB/OL].https://msdn.microsoft.com/en-us/library/8dbf701c (v=vs.71).aspx.

[33] TANG J. Exploring control flow guard in Windows 10[EB/OL].http://sjc1-te-ftp.trendmicro.com/assets/wp/exploring-control-flowguard-in-Windows10.pdf.

[34] THEORI. Chakra jit cfg bypass[EB/OL]. http://theori.io/research/chakra-jit-cfg-bypass.

[35] SUN K, OU Y, ZHAO Y H, et al. Never let your guard down: finding unguarded gates toby-pass control flow guard with big data[EB/OL].https://www.blackhat.com/docs/asia-17/materials/asia-1 7-Sun-Never-Let-Your-Guard-Down-Finding-Unguarded-Gates-To-Bypass-Control-Flow-Guard-With-Big-Data.pdf.

[36] Return flow guard[EB/OL]. http://xlab.tencent.com/en/2016/11/02/return-flow-guard/.

[37] Mitigate threats by using Windows 10 security features[EB/OL].https://docs.microsoft.com/en-us/Windows/threat-protection/overvi ew-of-threat-mitigations-in-Windows-10.

[38] HU H, CHUA Z L, ADRIAN S, et al. Automatic generation of data-oriented exploits[C]//The 24th USENIX Security Symposium.2015: 177-192.

[39] HU H, SHINDE S, ADRIAN S, et al. Data-oriented programming:on the expressiveness of non-control data attacks[C]//2016 IEEE Symposium on Security and Privacy. 2016: 969-986.

[40] AKRITIDIS P, CADAR C, RAICIU C, et al. Preventing memory error exploits with WIT[C]//2008 IEEE Symposium on Security and privacy. 2008:263-277.

[41] SUH G E, LEE J W, ZHANG D, et al. Secure program execution via dynamic information flow tracking[C]//The 11th International Conference on Architectural Support for Programming Languages and Operating Systems. 2004:85-96.

[42] CHEN S, XU J, NAKKA N, et al. Defeating memory corruption attacks via pointer taintedness detection[C]//2005 International Conference on Dependable Systems and Networks. 2005:378-387.

[43] BARRANTES E G, ACKLEY D, PALMER T S, et al. Randomized instruction set emulation to disrupt binary code injection attacks[C]//The 10th ACM Conference on Computer and Communications Security. 2003:281-289.

[44] KC G S, KEROMYTIS A D, PREVELAKIS V. Countering code injection attacks with instruction-set randomization[C]//The 10th ACM Conference on Computer and Communications Security.2003:272-280.

[45] STEENSGAARD B. Points-to analysis in almost linear time[C]//The 23rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. 1996:32-41.

[46] DEMAY J C, TOTEL E, TRONEL R. SIDAN: a tool dedicated to software instrumentation for detecting attacks on non-control- data[C]//2009 Fourth International Conference on Risks and Security of Internet and Systems. 2009:51-58.

[47] ACKER S V, NIKIFORAKIS N, PHILIPPAERTS P, et al. Valueguard: protection of native applications against data-only buffer overflows[C]//The 6th International Conference on Information Systems Security. 2010:156-170.

[48] DING R, QIAN C X, SONG C Y, et al. Efficient protection of path-sensitive control security[C]//The 26th USENIX Security Symposium. 2017:131-148.

[49] VEEN V V D, ANDRIESSE D, G?KTAS E, et al. Practical context-sensitive CFI[C]//The 22nd ACM SIGSAC Conference on Computer and Communications Security. 2015: 927-940.

[50] G?KTAS E, ATHANASOPOULOS E, BOS H, et al. Out of control:overcoming control-flow integrity[C]//2014 IEEE Symposium on Security and Privacy. 2014: 575-589.

Research on Windows memory protection mechanism

LU Ting-ting1, WANG Jun-feng1,2

(1. College of Computer Science, Sichuan University, Chengdu 610065, China;2. School of Aeronautics and Astronautics, Sichuan University, Chengdu 610065, China)

Over the past three decades, attacks exploiting Windows memory holes have emerged in an endless stream, and the usual means is to attack control-data to hijack the execution flow of the program. To this end, Microsoft has added layers of protection mechanisms to Windows to prevent such attacks. But at this stage, the defensive mechanisms deployed on Windows cannot prevent attacks against non-control-data. In view of the published articles lacking comprehensive study of Windows memory protection mechanism, a detailed introduction to Windows memory protection mechanism and its breakthrough techniques, and non-control-data protection research status was conducted. On this basis, the challenges of Windows memory protection were analyzed and the future of memory protection was discussed.

Windows memory protection, memory protection mechanism, control-data protection, non-control-data protection

s:The National Key Research and Development Program (No.2016QY06X1205, No.2016YFB0800605), The National Natural Science Foundation of China (No.91438120, No.91338107, No.91438119), The Technology Research and Development Program of Sichuan Province (No.17ZDYF2583)

TP309

A

10.11959/j.issn.2096-109x.2017.00208

2017-09-06;

2017-09-18。

王俊峰,wangjf@scu.edu.cn

國家重點研發計劃基金資助項目(No.2016QY06X1205, No.2016YFB0800605);國家自然科學基金資助項目(No.91438120, No.91338107, No.91438119);四川省重點研發計劃基金資助項目(No.17ZDYF2583)

魯婷婷(1994-),女,甘肅正寧人,四川大學博士生,主要研究方向為信息安全。

王俊峰(1976-),男,安徽蕪湖人,博士,四川大學教授、博士生導師,主要研究方向為空間信息網絡、網絡與信息安全、大數據處理在醫學和交通等領域應用。

猜你喜歡
機制
構建“不敢腐、不能腐、不想腐”機制的思考
自制力是一種很好的篩選機制
文苑(2018年21期)2018-11-09 01:23:06
“三項機制”為追趕超越蓄力
當代陜西(2018年9期)2018-08-29 01:21:00
丹鳳“四個強化”從嚴落實“三項機制”
當代陜西(2017年12期)2018-01-19 01:42:33
保留和突破:TPP協定ISDS機制中的平衡
定向培養 還需完善安置機制
中國衛生(2016年9期)2016-11-12 13:28:08
破除舊機制要分步推進
中國衛生(2015年9期)2015-11-10 03:11:12
氫氣對缺血再灌注損傷保護的可能機制
注重機制的相互配合
中國衛生(2014年3期)2014-11-12 13:18:12
打基礎 抓機制 顯成效
中國火炬(2014年4期)2014-07-24 14:22:19
主站蜘蛛池模板: 91www在线观看| 国产真实自在自线免费精品| 一级成人a毛片免费播放| 99久久精品视香蕉蕉| 99热这里只有精品国产99| 亚洲一级毛片在线观播放| 亚洲成网站| 日韩激情成人| 国产一区二区三区免费| 欧洲欧美人成免费全部视频| 国产粉嫩粉嫩的18在线播放91| 国产精品成人一区二区| 五月天天天色| 国产亚洲欧美在线专区| 波多野结衣中文字幕一区二区| 丁香五月激情图片| 亚洲无码电影| 国产美女精品一区二区| 伊人成人在线| 91九色最新地址| 成人自拍视频在线观看| 国产第八页| 国产欧美日韩综合在线第一| 亚洲色图欧美视频| 亚洲色图狠狠干| 国产成人免费| 国产成人亚洲欧美激情| 久久精品aⅴ无码中文字幕| 免费无遮挡AV| 亚洲国模精品一区| 呦女亚洲一区精品| 国产特级毛片| a毛片免费观看| 91人妻在线视频| 最新国产你懂的在线网址| 国产精品毛片一区视频播| 91亚洲视频下载| 国产18在线播放| 国产高清免费午夜在线视频| 色综合国产| 亚洲第一精品福利| 91人妻日韩人妻无码专区精品| 毛片国产精品完整版| 久久精品国产精品国产一区| 精品国产aⅴ一区二区三区 | 国产经典免费播放视频| 日本人又色又爽的视频| 亚洲国产精品VA在线看黑人| 18禁黄无遮挡免费动漫网站| 亚洲精品人成网线在线| 亚洲国产成人久久精品软件| 国产精品99久久久久久董美香 | 亚洲免费播放| 国产美女主播一级成人毛片| 日韩在线影院| 国产乱肥老妇精品视频| 国产美女自慰在线观看| 日韩欧美国产精品| 亚洲综合一区国产精品| 欧美成人一区午夜福利在线| 亚洲永久视频| 91福利片| 亚洲无码免费黄色网址| 呦女亚洲一区精品| 亚洲综合极品香蕉久久网| 久久精品无码专区免费| 亚洲资源站av无码网址| 67194亚洲无码| 亚洲成人动漫在线观看 | 免费毛片a| 亚洲天堂啪啪| 免费看美女毛片| 免费A级毛片无码无遮挡| 国产亚洲视频免费播放| 日本高清免费一本在线观看| 五月激情综合网| 在线观看欧美精品二区| 99久久国产精品无码| 亚洲天堂视频网站| 亚洲va视频| 真实国产乱子伦高清| 91人人妻人人做人人爽男同|