版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
CFG樁位培訓(xùn)課件:控制流保護(hù)全面解析與實(shí)戰(zhàn)第一章:CFG基礎(chǔ)與發(fā)展歷程控制流保護(hù)(ControlFlowGuard,簡(jiǎn)稱CFG)是Microsoft針對(duì)現(xiàn)代惡意軟件攻擊開發(fā)的關(guān)鍵安全技術(shù),代表了操作系統(tǒng)安全防御機(jī)制的重要進(jìn)步。本章將介紹CFG的基本概念、發(fā)展歷史及其在Windows系統(tǒng)安全架構(gòu)中的重要地位。我們將從以下幾個(gè)方面展開討論:CFG的基本定義與設(shè)計(jì)目標(biāo)CFG技術(shù)的發(fā)展歷程與演進(jìn)CFG在現(xiàn)代安全防御體系中的位置CFG與其他安全機(jī)制的協(xié)同作用什么是ControlFlowGuard(CFG)?控制流保護(hù)(ControlFlowGuard,CFG)是Microsoft在Windows8.1預(yù)覽版中首次引入的安全緩解技術(shù),旨在防止間接調(diào)用跳轉(zhuǎn)到非法地址,有效阻止代碼執(zhí)行劫持攻擊。它在Windows10中得到了完善并被廣泛?jiǎn)⒂谩FG的核心功能:驗(yàn)證所有間接函數(shù)調(diào)用的目標(biāo)地址合法性在運(yùn)行時(shí)攔截跳轉(zhuǎn)到非預(yù)期代碼位置的嘗試通過編譯器和運(yùn)行時(shí)協(xié)作實(shí)現(xiàn)控制流完整性保護(hù)降低ROP(Return-OrientedProgramming)等高級(jí)攻擊的成功率CFG的引入標(biāo)志著Microsoft向更主動(dòng)、更深入的系統(tǒng)安全防護(hù)方向邁進(jìn),從被動(dòng)防御轉(zhuǎn)向積極驗(yàn)證程序執(zhí)行流程的合法性。CFG的安全目標(biāo)與意義控制流完整性(CFI)實(shí)現(xiàn)CFG是控制流完整性(ControlFlowIntegrity,CFI)理論的實(shí)用化實(shí)現(xiàn),雖然不完美,但在實(shí)際環(huán)境中提供了可接受的性能與安全平衡。它確保程序執(zhí)行路徑遵循預(yù)定義的控制流圖,防止攻擊者將執(zhí)行流重定向到惡意代碼。阻斷指針覆蓋攻擊CFG特別針對(duì)通過內(nèi)存破壞實(shí)現(xiàn)的指針覆蓋攻擊,如虛函數(shù)表(vtable)劫持、函數(shù)指針操縱等。這類攻擊在傳統(tǒng)防御機(jī)制下難以檢測(cè),而CFG通過直接驗(yàn)證調(diào)用目標(biāo)的有效性,從源頭上阻斷了這類攻擊。提升整體安全防護(hù)作為Windows安全緩解技術(shù)家族的重要成員,CFG與數(shù)據(jù)執(zhí)行保護(hù)(DEP)、地址空間布局隨機(jī)化(ASLR)等技術(shù)協(xié)同工作,構(gòu)建多層次縱深防御體系。這種組合大幅提高了攻擊者突破系統(tǒng)安全防線的成本和難度。CFG的發(fā)展時(shí)間線1Windows8.1Preview(2013年)Microsoft首次在Windows8.1預(yù)覽版中引入CFG技術(shù),作為提升系統(tǒng)安全性的實(shí)驗(yàn)性功能。然而,由于當(dāng)時(shí)存在嚴(yán)重的兼容性問題,在Windows8.1RTM(正式發(fā)布版)中被默認(rèn)關(guān)閉。這一階段主要是技術(shù)驗(yàn)證和概念證明。2Windows10技術(shù)預(yù)覽版(2014年末)經(jīng)過改進(jìn)和優(yōu)化后,CFG在Windows10技術(shù)預(yù)覽版中重新啟用。這一版本的CFG解決了早期版本的大部分兼容性問題,并改進(jìn)了性能。Microsoft開始鼓勵(lì)開發(fā)者在自己的應(yīng)用程序中啟用CFG支持。3Windows10正式版(2015年)CFG成為Windows10核心安全特性,所有系統(tǒng)組件和許多內(nèi)置應(yīng)用都啟用了CFG保護(hù)。Microsoft發(fā)布了詳細(xì)的開發(fā)者文檔,說明如何在應(yīng)用程序中啟用和測(cè)試CFG。4持續(xù)演進(jìn)(2016年至今)Microsoft不斷完善CFG技術(shù),擴(kuò)展其覆蓋范圍,提高檢測(cè)準(zhǔn)確性,并降低性能開銷。CFG已成為Windows安全架構(gòu)的基石,與其他安全機(jī)制協(xié)同工作,共同構(gòu)建Windows平臺(tái)的安全防線。CFG的工作原理概覽控制流保護(hù)(CFG)的工作原理涉及編譯時(shí)和運(yùn)行時(shí)兩個(gè)關(guān)鍵階段,通過精心設(shè)計(jì)的驗(yàn)證機(jī)制確保程序執(zhí)行路徑的安全性。以下是CFG工作流程的核心要素:編譯器插入檢查代碼啟用CFG的編譯器(如VisualStudio)會(huì)在每個(gè)間接調(diào)用(如通過函數(shù)指針調(diào)用、虛函數(shù)調(diào)用)前插入驗(yàn)證代碼。這些代碼會(huì)在運(yùn)行時(shí)調(diào)用系統(tǒng)提供的CFG驗(yàn)證函數(shù),檢查調(diào)用目標(biāo)的合法性。維護(hù)合法調(diào)用目標(biāo)表編譯器會(huì)生成一個(gè)GuardCFFunctionTable,記錄程序中所有可作為間接調(diào)用目標(biāo)的函數(shù)地址。這個(gè)表在程序加載時(shí)被操作系統(tǒng)讀取并用于初始化驗(yàn)證系統(tǒng)。運(yùn)行時(shí)通過Bitmap驗(yàn)證Windows為每個(gè)進(jìn)程維護(hù)一個(gè)CFGBitmap,標(biāo)記內(nèi)存中哪些地址是合法的間接調(diào)用目標(biāo)。當(dāng)程序執(zhí)行間接調(diào)用時(shí),系統(tǒng)會(huì)查詢這個(gè)Bitmap,驗(yàn)證目標(biāo)地址是否為預(yù)先批準(zhǔn)的合法調(diào)用點(diǎn)。攔截非法調(diào)用如果驗(yàn)證失敗,系統(tǒng)會(huì)立即終止程序執(zhí)行,防止?jié)撛诘墓衾^續(xù)進(jìn)行。這種快速失敗策略確保了即使存在漏洞,攻擊者也無法將控制流重定向到任意代碼位置。第二章:CFG實(shí)現(xiàn)細(xì)節(jié)與技術(shù)分析深入理解CFG的技術(shù)實(shí)現(xiàn)對(duì)于安全研究人員和開發(fā)者至關(guān)重要。本章將揭示CFG在系統(tǒng)層面的工作機(jī)制,分析其核心組件和執(zhí)行流程,并探討其在不同環(huán)境下的表現(xiàn)特點(diǎn)。我們將詳細(xì)討論以下內(nèi)容:CFG在PE文件結(jié)構(gòu)中的特殊標(biāo)記運(yùn)行時(shí)驗(yàn)證的精確流程與實(shí)現(xiàn)CFGBitmap的創(chuàng)建與管理機(jī)制用戶態(tài)與內(nèi)核態(tài)CFG實(shí)現(xiàn)的差異性能優(yōu)化與兼容性處理策略編譯階段的CFG支持在編譯階段,支持CFG的編譯器(如VisualStudio)會(huì)對(duì)程序進(jìn)行特殊處理,生成必要的數(shù)據(jù)結(jié)構(gòu)和標(biāo)記,為運(yùn)行時(shí)的CFG保護(hù)奠定基礎(chǔ)。這些處理主要體現(xiàn)在可執(zhí)行文件的LoadConfigurationTable中:LoadConfigurationTable中的五個(gè)關(guān)鍵條目:GuardCFCheckFunction:指向用于驗(yàn)證間接調(diào)用目標(biāo)的函數(shù),通常是ntdll!LdrpValidateUserCallTargetGuardCFDispatchFunction:用于處理C++虛函數(shù)調(diào)用的特殊驗(yàn)證函數(shù)GuardCFFunctionTable:包含所有合法間接調(diào)用目標(biāo)的函數(shù)地址表GuardCFFunctionCount:函數(shù)表中的條目數(shù)量GuardFlags:指示CFG相關(guān)標(biāo)志位,如啟用標(biāo)志、分發(fā)功能支持等編譯器會(huì)在每個(gè)間接調(diào)用前插入對(duì)GuardCFCheckFunction的調(diào)用,形如:;原始的間接調(diào)用call[rax];添加CFG檢查后movrcx,rax;目標(biāo)地址作為參數(shù)callGuardCFCheckFunctioncall[rax];驗(yàn)證通過后執(zhí)行調(diào)用運(yùn)行時(shí)的調(diào)用驗(yàn)證流程間接調(diào)用觸發(fā)當(dāng)程序執(zhí)行到一個(gè)間接調(diào)用點(diǎn)(如通過函數(shù)指針調(diào)用、虛函數(shù)調(diào)用等)時(shí),編譯器插入的驗(yàn)證代碼會(huì)被執(zhí)行,調(diào)用系統(tǒng)提供的驗(yàn)證函數(shù)ntdll!LdrpValidateUserCallTarget。驗(yàn)證函數(shù)執(zhí)行驗(yàn)證函數(shù)接收目標(biāo)地址作為參數(shù),首先檢查地址是否在某些已知安全的范圍內(nèi)(如一些系統(tǒng)DLL的固定區(qū)域)。如果是,則直接通過驗(yàn)證;否則,進(jìn)入下一步驟。Bitmap查詢驗(yàn)證函數(shù)計(jì)算目標(biāo)地址在CFGBitmap中的位置,檢查對(duì)應(yīng)位是否設(shè)置為合法調(diào)用目標(biāo)。這一過程高度優(yōu)化,通常只需幾條指令即可完成。驗(yàn)證結(jié)果處理如果驗(yàn)證通過,程序繼續(xù)執(zhí)行間接調(diào)用;如果驗(yàn)證失敗,系統(tǒng)立即終止程序,通常顯示"調(diào)用目標(biāo)驗(yàn)證失敗"的錯(cuò)誤信息,防止?jié)撛诘墓舫晒?。運(yùn)行時(shí)驗(yàn)證流程的關(guān)鍵在于其高效性與低開銷。Microsoft通過精心設(shè)計(jì)的Bitmap數(shù)據(jù)結(jié)構(gòu)和查詢算法,將每次驗(yàn)證的開銷控制在最小范圍內(nèi),使CFG保護(hù)對(duì)程序性能的影響微乎其微,這也是CFG能夠被廣泛應(yīng)用于生產(chǎn)環(huán)境的重要原因。CFGBitmap機(jī)制詳解CFGBitmap是ControlFlowGuard技術(shù)的核心數(shù)據(jù)結(jié)構(gòu),它通過高效的位圖表示方式,記錄內(nèi)存中哪些地址可以作為間接調(diào)用的合法目標(biāo)。這一機(jī)制巧妙地平衡了安全性和性能需求。Bitmap的創(chuàng)建與初始化:操作系統(tǒng)在啟動(dòng)時(shí)創(chuàng)建全局CFGBitmap對(duì)象,這個(gè)對(duì)象在內(nèi)核模式下被維護(hù)和保護(hù)。當(dāng)新的進(jìn)程創(chuàng)建時(shí),系統(tǒng)會(huì)將Bitmap映射到進(jìn)程的地址空間,通常在一個(gè)固定的保留區(qū)域。Bitmap的結(jié)構(gòu)設(shè)計(jì):每個(gè)比特位代表一個(gè)內(nèi)存區(qū)塊(通常是16字節(jié))如果該區(qū)塊的起始地址是合法的間接調(diào)用目標(biāo),對(duì)應(yīng)位被設(shè)置為1采用分層結(jié)構(gòu),提高大空間地址范圍的查詢效率針對(duì)64位系統(tǒng)進(jìn)行了特殊優(yōu)化,支持超大地址空間Bitmap的更新機(jī)制:當(dāng)進(jìn)程加載新的模塊(如DLL)時(shí),系統(tǒng)會(huì)讀取模塊的CFGFunctionTable,將表中記錄的合法調(diào)用目標(biāo)地址在Bitmap中對(duì)應(yīng)的位設(shè)置為1。這一過程在模塊加載階段完成,不會(huì)影響運(yùn)行時(shí)性能。Bitmap的查詢效率:Bitmap的設(shè)計(jì)使得地址驗(yàn)證過程極為高效,只需幾條位操作指令即可完成:;偽代碼示例index=target_address>>4;除以16獲取塊索引byte_index=index/8;計(jì)算字節(jié)索引bit_position=index%8;計(jì)算位置valid=(bitmap[byte_index]&(1<<bit_position))!=0用戶態(tài)與內(nèi)核態(tài)的CFG差異用戶態(tài)CFG用戶態(tài)CFG主要保護(hù)普通應(yīng)用程序,阻止間接調(diào)用跳轉(zhuǎn)到非預(yù)期位置。它由ntdll.dll中的驗(yàn)證函數(shù)實(shí)現(xiàn),使用映射到用戶空間的Bitmap進(jìn)行驗(yàn)證。所有啟用CFG的用戶態(tài)應(yīng)用程序共享相同的驗(yàn)證機(jī)制,但每個(gè)進(jìn)程有自己獨(dú)立的Bitmap。驗(yàn)證函數(shù):ntdll!LdrpValidateUserCallTarget失敗處理:立即終止應(yīng)用程序適用范圍:所有支持CFG的用戶態(tài)應(yīng)用內(nèi)核態(tài)CFG內(nèi)核態(tài)CFG保護(hù)Windows內(nèi)核及驅(qū)動(dòng)程序,防御針對(duì)系統(tǒng)核心組件的攻擊。它使用獨(dú)立的驗(yàn)證機(jī)制和Bitmap,由內(nèi)核自身管理。內(nèi)核態(tài)CFG的實(shí)現(xiàn)考慮了更多的性能和穩(wěn)定性因素,避免因驗(yàn)證失敗導(dǎo)致系統(tǒng)崩潰。驗(yàn)證函數(shù):特殊的內(nèi)核模式驗(yàn)證例程失敗處理:可配置,通常記錄事件而非崩潰適用范圍:內(nèi)核組件和驅(qū)動(dòng)程序共同特點(diǎn):都基于Bitmap機(jī)制進(jìn)行快速驗(yàn)證都需要編譯器支持生成必要信息都作為系統(tǒng)整體安全策略的一部分關(guān)鍵差異:驗(yàn)證失敗處理策略不同內(nèi)核態(tài)CFG考慮更多穩(wěn)定性因素內(nèi)核態(tài)CFG對(duì)性能要求更嚴(yán)格內(nèi)核態(tài)CFG保護(hù)的內(nèi)存區(qū)域不同CFG的局限與兼容性問題技術(shù)局限性:盡管CFG提供了有效的控制流保護(hù),但它仍存在一些固有的局限性:只保護(hù)間接調(diào)用,不保護(hù)返回地址(未防御ROP攻擊的所有變種)粒度較粗,驗(yàn)證是否為合法函數(shù)入口點(diǎn),而非具體是哪個(gè)函數(shù)不驗(yàn)證函數(shù)參數(shù),無法防止參數(shù)篡改導(dǎo)致的攻擊JIT(即時(shí)編譯)代碼存在特殊挑戰(zhàn),可能成為繞過CFG的途徑早期兼容性問題:Windows8.1預(yù)覽版中引入CFG后,出現(xiàn)了嚴(yán)重的兼容性問題,導(dǎo)致正式版中被默認(rèn)關(guān)閉:某些第三方軟件依賴特殊的控制流模式,與CFG沖突早期實(shí)現(xiàn)中的驗(yàn)證函數(shù)性能開銷較大老舊軟件未針對(duì)CFG優(yōu)化,可能誤觸發(fā)保護(hù)機(jī)制現(xiàn)代系統(tǒng)中的兼容性改進(jìn):Windows10中的CFG在兼容性方面取得了顯著進(jìn)步:驗(yàn)證算法優(yōu)化,大幅降低性能開銷增加特例處理機(jī)制,適應(yīng)特殊軟件需求提供更完善的開發(fā)者工具和文檔引入選擇性保護(hù),允許排除特定模塊安全與兼容性的平衡:CFG設(shè)計(jì)體現(xiàn)了安全性與兼容性的精妙平衡:采用"寬松"的驗(yàn)證標(biāo)準(zhǔn),降低誤報(bào)率允許開發(fā)者通過特殊標(biāo)記排除不兼容代碼與其他安全機(jī)制配合,形成多層防御持續(xù)改進(jìn),逐步提高保護(hù)強(qiáng)度和兼容性典型CFG間接調(diào)用示例(代碼片段)原始C++代碼://定義函數(shù)指針typedefvoid(*FuncPtr)();voidtargetFunction(){printf("Targetfunctioncalled\n");}voidcaller(){//間接調(diào)用FuncPtrfp=targetFunction;fp();//這里會(huì)觸發(fā)CFG檢查}無CFG時(shí)的匯編代碼:;caller函數(shù)的簡(jiǎn)化匯編caller:subrsp,28h;分配棧空間movrax,targetFunctioncallrax;直接調(diào)用,無驗(yàn)證addrsp,28h;恢復(fù)棧ret啟用CFG后的匯編代碼:;啟用CFG后的caller函數(shù)caller:subrsp,38h;分配更多棧空間movrax,targetFunctionmovrcx,rax;目標(biāo)地址作為參數(shù)callLdrpValidateUserCallTarget;驗(yàn)證函數(shù)不會(huì)修改RAXcallrax;驗(yàn)證通過后調(diào)用addrsp,38h;恢復(fù)棧ret寄存器與棧的變化:RCX:傳遞目標(biāo)地址給驗(yàn)證函數(shù)RAX:保存待調(diào)用的函數(shù)地址??臻g增加:用于保存額外的調(diào)用上下文驗(yàn)證函數(shù)設(shè)計(jì)為不修改關(guān)鍵寄存器(如RAX)如果驗(yàn)證失敗,LdrpValidateUserCallTarget不會(huì)返回,而是直接終止進(jìn)程,因此后續(xù)的CALL指令永遠(yuǎn)不會(huì)執(zhí)行。第三章:CFG繞過技術(shù)與防護(hù)策略任何安全機(jī)制都面臨著攻擊者的持續(xù)挑戰(zhàn),CFG也不例外。本章將探討研究人員發(fā)現(xiàn)的CFG繞過技術(shù),分析其原理和實(shí)現(xiàn)方法,并討論相應(yīng)的防護(hù)策略。通過了解這些繞過技術(shù),我們可以更全面地評(píng)估CFG的保護(hù)邊界,并采取更有效的安全措施。本章將涵蓋以下內(nèi)容:CFG繞過研究的背景與歷史典型繞過案例的技術(shù)分析繞過技術(shù)的分類與共同特點(diǎn)加強(qiáng)CFG保護(hù)的方法與最佳實(shí)踐CFG與其他安全機(jī)制的協(xié)同防御策略CFG繞過的研究背景隨著CFG技術(shù)在Windows系統(tǒng)中的廣泛部署,安全研究人員開始探索其潛在弱點(diǎn)和繞過可能性。這些研究不僅幫助評(píng)估CFG的實(shí)際保護(hù)能力,也為完善安全防護(hù)提供了重要參考。早期研究探索:CFG正式部署后不久,安全研究社區(qū)就開始對(duì)其進(jìn)行深入分析,探索潛在的繞過方法:2014年末:首批CFG分析論文出現(xiàn),討論其設(shè)計(jì)理念和潛在局限2015年初:研究人員開始嘗試通過JIT編譯代碼繞過CFG2015年中:首個(gè)實(shí)際CFG繞過技術(shù)在安全會(huì)議中公開重要突破:2015年DEFCON發(fā)布2015年DEFCON大會(huì)上,俄羅斯安全團(tuán)隊(duì)發(fā)布了針對(duì)AdobeFlashPlayer的CFG繞過技術(shù),這是首個(gè)被廣泛關(guān)注的實(shí)用繞過方法,引起了安全社區(qū)的廣泛討論。繞過技術(shù)研究的演進(jìn):隨著時(shí)間推移,CFG繞過研究不斷深入和擴(kuò)展:從特定應(yīng)用程序(如Flash)擴(kuò)展到通用繞過技術(shù)從直接繞過CFG轉(zhuǎn)向結(jié)合其他漏洞的復(fù)合利用鏈從理論研究發(fā)展到實(shí)際漏洞利用與防御研究意義:CFG繞過技術(shù)的研究具有雙重意義:幫助安全社區(qū)了解CFG的真實(shí)保護(hù)邊界推動(dòng)Microsoft不斷完善CFG技術(shù)促進(jìn)更全面的安全防護(hù)策略研究提高開發(fā)者對(duì)控制流安全的重視AdobeFlashPlayerCFG繞過案例分析2015年DEFCON會(huì)議上公開的AdobeFlashPlayerCFG繞過技術(shù)是一個(gè)具有代表性的經(jīng)典案例,它巧妙利用了JIT編譯生成的函數(shù)調(diào)用鏈和特定的參數(shù)保存指令變體,成功繞過了CFG的保護(hù)機(jī)制。利用JIT編譯特性FlashPlayer的ActionScript引擎會(huì)將腳本代碼即時(shí)編譯為機(jī)器碼執(zhí)行。研究人員發(fā)現(xiàn),JIT編譯器生成的代碼模式存在可預(yù)測(cè)性,可以通過特定的腳本代碼誘導(dǎo)編譯器生成有利于繞過CFG的指令序列。具體來說,當(dāng)編譯包含多個(gè)局部變量和特定調(diào)用模式的函數(shù)時(shí),JIT編譯器會(huì)生成不同變體的參數(shù)保存指令,這些指令可被利用來構(gòu)建攻擊鏈。參數(shù)保存指令變體利用研究人員發(fā)現(xiàn),根據(jù)局部變量數(shù)量和函數(shù)調(diào)用情況,JIT編譯器會(huì)生成不同的MOV指令變體來保存參數(shù):;變體1:直接通過寄存器傳遞movecx,eax;變體2:通過棧傳遞mov[esp+8],eax;變體3:使用內(nèi)存引用(關(guān)鍵變體)movdwordptr[ecx],eax其中變體3是繞過的關(guān)鍵,它允許攻擊者控制寫入內(nèi)存的位置和內(nèi)容。構(gòu)建攻擊鏈通過精心構(gòu)造的ActionScript代碼,攻擊者可以:控制ECX寄存器指向特定內(nèi)存位置(如函數(shù)指針)使EAX包含攻擊者選擇的地址值利用"movdwordptr[ecx],eax"指令覆蓋函數(shù)指針當(dāng)指針被調(diào)用時(shí),執(zhí)行流將跳轉(zhuǎn)到攻擊者控制的位置由于這種攻擊不涉及直接修改調(diào)用目標(biāo)(而是修改被調(diào)用對(duì)象的屬性),它可以有效繞過CFG的驗(yàn)證機(jī)制。繞過技術(shù)核心要點(diǎn)利用JIT編譯器的可預(yù)測(cè)性JIT編譯器通常會(huì)根據(jù)一定規(guī)則將高級(jí)語言代碼轉(zhuǎn)換為機(jī)器指令。研究人員發(fā)現(xiàn),通過分析這些規(guī)則,可以設(shè)計(jì)特定的源代碼模式,誘導(dǎo)編譯器生成有利于攻擊的指令序列。這種方法不需要直接修改機(jī)器碼,而是"引導(dǎo)"編譯器為攻擊者生成所需指令。關(guān)鍵技術(shù):分析JIT編譯器的代碼生成模式和規(guī)律設(shè)計(jì)能夠觸發(fā)特定指令序列的源代碼利用編譯器優(yōu)化邏輯產(chǎn)生的指令變體控制ECX寄存器實(shí)現(xiàn)間接寫入在x86架構(gòu)中,ECX經(jīng)常被用作函數(shù)調(diào)用的第一個(gè)參數(shù)寄存器。攻擊者通過精心構(gòu)造的對(duì)象和函數(shù)調(diào)用序列,可以控制ECX寄存器指向關(guān)鍵內(nèi)存位置(如包含函數(shù)指針的對(duì)象屬性)。當(dāng)遇到"MOVDWORDPTR[ECX],EAX"等指令時(shí),就可以實(shí)現(xiàn)對(duì)指定內(nèi)存的寫入。實(shí)現(xiàn)方法:構(gòu)造特定的對(duì)象層次結(jié)構(gòu)控制參數(shù)傳遞利用類型混淆漏洞影響參數(shù)解析精確計(jì)算內(nèi)存偏移確保寫入目標(biāo)準(zhǔn)確通過變量數(shù)量影響指令生成研究發(fā)現(xiàn),局部變量的數(shù)量和分布會(huì)影響JIT編譯器生成的指令類型。例如,當(dāng)函數(shù)包含特定數(shù)量的局部變量時(shí),編譯器可能會(huì)選擇通過內(nèi)存引用而非寄存器傳遞參數(shù),產(chǎn)生可利用的"MOVDWORDPTR"指令。具體表現(xiàn):少量局部變量時(shí)傾向于使用寄存器傳參大量局部變量時(shí)傾向于使用棧或內(nèi)存引用參數(shù)類型和數(shù)量也會(huì)影響指令選擇繞過示例代碼解析ActionScript繞過示例(簡(jiǎn)化版)://構(gòu)造一個(gè)具有特定屬性的對(duì)象varobj={funcPtr:legitimateFunction,//初始為合法函數(shù)data:"AAAA"};//包含大量局部變量的函數(shù),影響JIT編譯functionfunc1(){vara1=1,a2=2,a3=3,a4=4;//...更多局部變量...//調(diào)用func2,傳遞obj作為參數(shù)func2(obj);//在func2返回后,obj.funcPtr已被修改//調(diào)用被修改的函數(shù)指針obj.funcPtr();//實(shí)際調(diào)用惡意地址}//利用參數(shù)保存指令的函數(shù)functionfunc2(target){varx1=1,x2=2;//局部變量//觸發(fā)特定的參數(shù)保存指令someFunction(maliciousAddress);//JIT生成的代碼會(huì)包含://movdwordptr[ecx],eax//其中ecx指向target.funcPtr,eax包含惡意地址}生成的關(guān)鍵匯編指令分析:JIT編譯后,func2函數(shù)中會(huì)包含類似以下的指令序列:;func2函數(shù)的部分匯編代碼func2:;函數(shù)序言,保存寄存器等pushebpmovebp,espsubesp,18h;為局部變量分配空間;target參數(shù)在ecx中;準(zhǔn)備調(diào)用someFunctionmoveax,[maliciousAddress];加載惡意地址;關(guān)鍵指令:保存參數(shù)到內(nèi)存;這里ecx指向target.funcPtrmovdwordptr[ecx],eax;覆蓋函數(shù)指針;調(diào)用someFunctioncallsomeFunction;函數(shù)返回movesp,ebppopebpret攻擊流程分解:obj對(duì)象包含funcPtr屬性,初始指向合法函數(shù)func1調(diào)用func2,傳遞obj作為參數(shù)(在ecx中)func2準(zhǔn)備調(diào)用someFunction,將惡意地址加載到eaxJIT生成的"movdwordptr[ecx],eax"指令覆蓋obj.funcPtrfunc2返回后,func1調(diào)用obj.funcPtr,執(zhí)行流跳轉(zhuǎn)到惡意地址這個(gè)示例展示了攻擊者如何通過理解和利用JIT編譯器的行為模式,在不直接修改調(diào)用目標(biāo)的情況下實(shí)現(xiàn)控制流劫持。由于CFG只驗(yàn)證間接調(diào)用的直接目標(biāo),而不檢查被調(diào)用對(duì)象的內(nèi)部狀態(tài),這種技術(shù)能夠有效繞過CFG保護(hù)。CFG繞過的普適性與限制繞過技術(shù)的適用條件:盡管CFG繞過技術(shù)在特定環(huán)境下已被證明可行,但它們并非對(duì)所有程序都有效。成功繞過CFG通常需要滿足以下條件:目標(biāo)程序使用JIT編譯技術(shù)(如瀏覽器、腳本引擎)JIT編譯器生成的代碼具有可預(yù)測(cè)性存在可被利用的內(nèi)存安全漏洞作為入口點(diǎn)程序結(jié)構(gòu)允許構(gòu)建完整的攻擊鏈繞過難度的增加:隨著安全意識(shí)的提高和防護(hù)技術(shù)的進(jìn)步,CFG繞過變得越來越困難:JIT編譯器引入隨機(jī)性和安全檢查多重安全機(jī)制協(xié)同防御(DEP、ASLR、ACG等)關(guān)鍵漏洞類型被逐步修復(fù)安全開發(fā)實(shí)踐的普及減少可利用點(diǎn)繞過技術(shù)的限制因素:即使在理論可行的情況下,CFG繞過也面臨諸多現(xiàn)實(shí)限制:需要深入了解目標(biāo)程序的內(nèi)部結(jié)構(gòu)攻擊鏈構(gòu)建復(fù)雜,容易受環(huán)境變化影響每個(gè)程序的JIT編譯行為可能不同操作系統(tǒng)版本和補(bǔ)丁級(jí)別影響成功率繞過技術(shù)本身可能被安全更新阻斷動(dòng)態(tài)分析與調(diào)試的必要性:成功繞過CFG通常需要精確的動(dòng)態(tài)分析和調(diào)試:逆向分析JIT編譯器行為模式精確定位內(nèi)存中的關(guān)鍵結(jié)構(gòu)驗(yàn)證指令序列的實(shí)際執(zhí)行效果根據(jù)實(shí)際運(yùn)行環(huán)境調(diào)整攻擊參數(shù)防護(hù)策略與最佳實(shí)踐使用最新操作系統(tǒng)與補(bǔ)丁Microsoft持續(xù)改進(jìn)CFG技術(shù)并修復(fù)已知的繞過方法。保持系統(tǒng)和應(yīng)用程序更新是防護(hù)的基礎(chǔ):定期安裝Windows安全更新更新關(guān)鍵應(yīng)用程序(尤其是瀏覽器和插件)考慮升級(jí)到支持更強(qiáng)安全特性的Windows版本啟用多層安全防護(hù)CFG只是安全防護(hù)體系的一部分,應(yīng)與其他技術(shù)協(xié)同使用:確保DEP(數(shù)據(jù)執(zhí)行保護(hù))始終開啟啟用ASLR(地址空間布局隨機(jī)化)提高攻擊難度使用ACG(任意代碼生成保護(hù))防護(hù)JIT攻擊考慮啟用XFG(擴(kuò)展流保護(hù))增強(qiáng)CFG能力應(yīng)用程序開發(fā)最佳實(shí)踐開發(fā)者可以采取多種措施加強(qiáng)應(yīng)用程序安全性:使用最新編譯器并啟用所有安全選項(xiàng)為所有模塊啟用CFG(/guard:cf編譯選項(xiàng))采用安全編碼實(shí)踐,減少內(nèi)存破壞漏洞對(duì)JIT編譯代碼實(shí)施額外的安全檢查使用安全沙箱隔離高風(fēng)險(xiǎn)組件安全監(jiān)控與響應(yīng)主動(dòng)監(jiān)控可以及時(shí)發(fā)現(xiàn)潛在攻擊:配置Windows高級(jí)審計(jì)策略記錄安全事件利用WindowsDefenderATP監(jiān)控異常行為關(guān)注安全公告,了解新出現(xiàn)的威脅建立安全事件響應(yīng)流程,及時(shí)處理異常CFG與現(xiàn)代安全防護(hù)體系CFG作為防護(hù)鏈條的關(guān)鍵環(huán)節(jié)控制流保護(hù)在現(xiàn)代Windows安全防護(hù)體系中扮演著不可替代的角色。它與其他安全機(jī)制形成協(xié)同效應(yīng),共同構(gòu)建了一個(gè)多層次、縱深的防御體系。CFG專注于控制流完整性保護(hù),彌補(bǔ)了傳統(tǒng)內(nèi)存保護(hù)機(jī)制的不足。硬件支持的控制流保護(hù)隨著技術(shù)發(fā)展,控制流保護(hù)正向硬件層面深入。英特爾的CET(Control-flowEnforcementTechnology)和ARM的BTI(BranchTargetIdentification)提供了硬件級(jí)別的控制流保護(hù),與CFG形成互補(bǔ)。這些技術(shù)能防御更廣泛的攻擊,包括ROP和JOP攻擊。未來發(fā)展方向CFG技術(shù)仍在不斷演進(jìn)。微軟已推出XFG(eXtendedFlowGuard),提供更精細(xì)的控制流驗(yàn)證。未來的發(fā)展方向包括:更全面的返回地址保護(hù)、更低的性能開銷、與硬件安全特性的深度整合,以及針對(duì)新型攻擊手段的防護(hù)增強(qiáng)。面臨的挑戰(zhàn)盡管不斷進(jìn)步,CFG及相關(guān)技術(shù)仍面臨諸多挑戰(zhàn):平衡安全性與性能、處理遺留代碼兼容性問題、應(yīng)對(duì)新型繞過技術(shù)的出現(xiàn),以及如何在多樣化的應(yīng)用場(chǎng)景中提供一致的保護(hù)。這些挑戰(zhàn)推動(dòng)著安全技術(shù)的持續(xù)創(chuàng)新。CFG在安全體系中的位置:CFG不是孤立的安全措施,而是一個(gè)整合的安全策略的組成部分:低層防護(hù):DEP確保數(shù)據(jù)不可執(zhí)行中層防護(hù):ASLR增加內(nèi)存地址預(yù)測(cè)難度高層防護(hù):CFG驗(yàn)證控制流轉(zhuǎn)移合法性頂層防護(hù):應(yīng)用沙箱限制潛在危害范圍實(shí)戰(zhàn)演練:CFG檢測(cè)與調(diào)試技巧使用WinDbg調(diào)試CFG相關(guān)代碼WinDbg是分析CFG行為的強(qiáng)大工具,下面是一些實(shí)用的調(diào)試命令和技巧://檢查進(jìn)程是否啟用CFG!gflag//查看模塊的CFG狀態(tài)!dh-fmodulename.dll//設(shè)置斷點(diǎn)監(jiān)控CFG驗(yàn)證函數(shù)bpntdll!LdrpValidateUserCallTarget//查看CFG驗(yàn)證函數(shù)源碼!analyze-vntdll!LdrpValidateUserCallTarget//檢查CFG位圖!address-cf觀察間接調(diào)用的執(zhí)行流程通過單步調(diào)試可以觀察CFG驗(yàn)證的完整過程:定位間接調(diào)用指令(如callrax)在調(diào)用前設(shè)置斷點(diǎn),觀察參數(shù)準(zhǔn)備單步執(zhí)行,跟蹤驗(yàn)證函數(shù)的調(diào)用分析驗(yàn)證邏輯和位圖查詢過程觀察成功/失敗的不同處理路徑利用符號(hào)和內(nèi)存查看CFG結(jié)構(gòu)深入理解CFG內(nèi)部結(jié)構(gòu)需要檢查關(guān)鍵內(nèi)存區(qū)域://查看進(jìn)程的CFG配置dtntdll!_LDR_DATA_TABLE_ENTRY//檢查CFG位圖的內(nèi)存分布!address-cf//查看特定地址在CFG位圖中的狀態(tài)!cfgkeywords-va[地址]//分析加載模塊的CFG表dtntdll!_IMAGE_LOAD_CONFIG_DIRECTORY實(shí)用調(diào)試場(chǎng)景觸發(fā)CFG驗(yàn)證失敗并分析崩潰過程比較啟用和禁用CFG時(shí)的代碼執(zhí)行差異分析JIT編譯代碼與CFG的交互方式驗(yàn)證特定繞過技術(shù)在目標(biāo)環(huán)境的有效性CFG相關(guān)工具與資源推薦Microsoft官方文檔微軟提供了全面的CFG技術(shù)文檔,包括實(shí)現(xiàn)細(xì)節(jié)、開發(fā)者指南和最佳實(shí)踐:《ControlFlowGuard》官方技術(shù)概述《WindowsInternals》書籍中的CFG章節(jié)VisualStudio安全功能文檔Windows安全博客中的CFG更新通告安全會(huì)議論文與演講多個(gè)安全會(huì)議發(fā)布了關(guān)于CFG分析和繞過的重要研究:DEFCON2015《BypassingControlFlowGuardinWindows10》BlackHatUSA《Windows10ControlFlowGuardInternals》BlueHatIL《AdvancedCFGBypassTechniques》CCC《BreakingCFG:ATaleofJITandReturn-OrientedProgramming》開源分析工具多種開源工具可用于分析和測(cè)試CFG保護(hù):CFGExplorer:可視化CFG表結(jié)構(gòu)和位圖ROPgadget:分析二進(jìn)制文件中的潛在ROPgadgetsChakraCore:開源JavaScript引擎,可用于JIT研究WindbgPreview:具有高級(jí)UI的新一代調(diào)試器PE-bear:PE文件結(jié)構(gòu)分析工具,支持CFG標(biāo)記檢查學(xué)習(xí)資源:《Windows系統(tǒng)安全深度剖析》系列課程《軟件漏洞分析與利用》專業(yè)培訓(xùn)安全研究人員博客和技術(shù)文章集GitHub上的CFG相關(guān)代碼庫和示例在線社區(qū):MicrosoftSecurityResearch&Defense博客StackOverflow上的Windows安全問答專業(yè)安全論壇如SecurityFocusTwitter上活躍的安全研究人員動(dòng)態(tài)典型CFG攻擊案例回顧通過分析實(shí)際的CFG攻擊案例,我們可以更深入地理解CFG的保護(hù)邊界和潛在弱點(diǎn)。以下是一些有代表性的CFG繞過攻擊案例:1FlashPlayerJIT繞過(2015)這是最早公開的CFG繞過案例,攻擊者利用FlashActionScriptJIT編譯器生成的代碼模式,通過控制ECX寄存器和利用特殊的MOV指令變體,成功繞過了CFG保護(hù)。這一攻擊引起了廣泛關(guān)注,促使Microsoft加強(qiáng)了對(duì)JIT代碼的保護(hù)。關(guān)鍵教訓(xùn):JIT編譯代碼需要特殊保護(hù);單一的控制流驗(yàn)證機(jī)制不足以防御所有攻擊。2Edge瀏覽器Chakra引擎漏洞(2017)研究人員發(fā)現(xiàn)了MicrosoftEdge瀏覽器的JavaScript引擎Chakra中的一個(gè)漏洞,可以通過特殊構(gòu)造的JavaScript代碼觸發(fā)類型混淆,然后利用JIT編譯特性繞過CFG。這一攻擊展示了即使在較新的系統(tǒng)上,復(fù)雜的應(yīng)用程序仍可能存在CFG繞過風(fēng)險(xiǎn)。關(guān)鍵教訓(xùn):瀏覽器引擎是高價(jià)值攻擊目標(biāo);類型安全對(duì)防御CFG繞過至關(guān)重要。3Win32k組件提權(quán)攻擊(2018)一起針對(duì)Windows內(nèi)核組件Win32k的攻擊利用了特殊的調(diào)用約定和參數(shù)傳遞機(jī)制,繞過了內(nèi)核態(tài)CFG保護(hù)。攻擊者通過精心構(gòu)造的數(shù)據(jù)結(jié)構(gòu),誘導(dǎo)內(nèi)核執(zhí)行位于用戶態(tài)的代碼,從而提升權(quán)限。這一案例展示了CFG在內(nèi)核態(tài)面臨的特殊挑戰(zhàn)。關(guān)鍵教訓(xùn):用戶態(tài)與內(nèi)核態(tài)交互點(diǎn)是重要的安全邊界;參數(shù)驗(yàn)證與控制流驗(yàn)證同樣重要。4VBScript引擎繞過(2019)研究人員在InternetExplorer的VBScript引擎中發(fā)現(xiàn)了一個(gè)可繞過CFG的漏洞利用鏈。攻擊者通過腳本引擎的內(nèi)存管理機(jī)制和特定的對(duì)象操作序列,成功控制了執(zhí)行流程。這一攻擊特別引人關(guān)注,因?yàn)樗槍?duì)的是一個(gè)較老的組件,顯示了遺留代碼的潛在風(fēng)險(xiǎn)。關(guān)鍵教訓(xùn):遺留組件可能存在更多安全風(fēng)險(xiǎn);完整的漏洞利用鏈通常需要多個(gè)漏洞協(xié)同作用。CFG培訓(xùn)總結(jié)與知識(shí)點(diǎn)回顧C(jī)FG的定義與原理ControlFlowGuard是Windows系統(tǒng)中的一種安全緩解技術(shù)主要目標(biāo)是防止間接函數(shù)調(diào)用被重定向到非預(yù)期位置通過編譯時(shí)標(biāo)記和運(yùn)行時(shí)驗(yàn)證確保控制流完整性作為控制流完整性(CFI)理論的實(shí)用化實(shí)現(xiàn)CFG的核心實(shí)現(xiàn)機(jī)制編譯器在間接調(diào)用前插入驗(yàn)證代碼加載模塊時(shí)構(gòu)建合法調(diào)用目標(biāo)表使用位圖(Bitmap)技術(shù)快速驗(yàn)證調(diào)用目標(biāo)驗(yàn)證失敗時(shí)立即終止程序執(zhí)行繞過技術(shù)的核心思路利用JIT編譯器生成特定指令序列修改對(duì)象內(nèi)部狀態(tài)而非直接修改調(diào)用目標(biāo)通過復(fù)雜的攻擊鏈繞過驗(yàn)證機(jī)制結(jié)合多個(gè)漏洞實(shí)現(xiàn)完整的控制流劫持防護(hù)措施與最佳實(shí)踐使用最新Windows版本和安全更新組合多種安全技術(shù)形成縱深防御針對(duì)JIT代碼實(shí)施額外的保護(hù)措施遵循安全開發(fā)最佳實(shí)踐減少漏洞采用主動(dòng)監(jiān)控策略及時(shí)發(fā)現(xiàn)攻擊嘗試CFG的價(jià)值與局限CFG顯著提高了漏洞利用的難度,是現(xiàn)代Windows安全架構(gòu)的重要組成部分。但它并非萬能解決方案,仍存在一些固有局限,如不防御返回地址攻擊、無法驗(yàn)證參數(shù)完整性等。理解這些局限有助于構(gòu)建更全面的安全策略。發(fā)展趨勢(shì)與未來方向控制流保護(hù)技術(shù)正向更精細(xì)、更全面的方向發(fā)展,如XFG提供更精確的驗(yàn)證,硬件支持的CET和BTI提供更底層保護(hù)。未來將看到軟硬結(jié)合的綜合防護(hù)方案,為系統(tǒng)提供更強(qiáng)大的安全保障。實(shí)踐技能的重要性理論知識(shí)需要通過實(shí)踐來鞏固和深化。掌握調(diào)試技術(shù)、代碼分析方法和安全測(cè)試工具,對(duì)于真正理解CFG工作機(jī)制和評(píng)估防護(hù)效果至關(guān)重要。建議在安全環(huán)境中進(jìn)行實(shí)際操作和測(cè)試。互動(dòng)問答環(huán)節(jié)現(xiàn)在我們進(jìn)入互動(dòng)問答環(huán)節(jié),歡迎大家提出與CFG相關(guān)的問題,分享您的疑惑和見解。以下是一些常見問題供參考:CFG與其他控制流保護(hù)技術(shù)如CET的區(qū)別是什么?CFG是軟件實(shí)現(xiàn)的控制流保護(hù),主要驗(yàn)證間接調(diào)用目標(biāo);而IntelCET是硬件實(shí)現(xiàn),提供更全面的保護(hù),包括間接跳轉(zhuǎn)驗(yàn)證(IBT)和返回地址保護(hù)(SHSTK)。CFG主要由操作系統(tǒng)實(shí)現(xiàn),CET則需要CPU硬件支持。兩者可以協(xié)同工作,提供更強(qiáng)大的保護(hù)。如何檢測(cè)我的應(yīng)用程序是否已啟用CFG保護(hù)?可以使用多種工具檢查:ProcessExplorer:查看進(jìn)程安全選項(xiàng)中的"CFG"標(biāo)志DUMPBIN/LOADCONFIG:檢查PE文件的加載配置表WinDbg中使用"!gflag"命令查看進(jìn)程標(biāo)志PowerShell使用Get-ProcessMitigation命令檢查CFG狀態(tài)對(duì)于自己開發(fā)的應(yīng)用,可檢查項(xiàng)目設(shè)置中是否啟用了"/guard:cf"編譯選項(xiàng)。CFG對(duì)應(yīng)用性能有多大影響?在哪些場(chǎng)景下不建議使用?現(xiàn)代Windows實(shí)現(xiàn)的CFG性能開銷通常小于3%,對(duì)大多數(shù)應(yīng)用幾乎無感知。但在以下場(chǎng)景可能需要謹(jǐn)慎評(píng)估:極度依賴性能的實(shí)時(shí)應(yīng)用(如高頻交易系統(tǒng))大量使用函數(shù)指針的密集計(jì)算應(yīng)用某些特殊的遺留應(yīng)用可能存在兼容性問題建議在測(cè)試環(huán)境中評(píng)估性能影響,而不是直接禁用這一重要的安全功能。作為開發(fā)者,如何在自己的應(yīng)用中最大化CFG的保護(hù)效果?提升CFG保護(hù)效果的關(guān)鍵措施:使用最新VisualStudio并啟用全部安全編譯選項(xiàng)為所有模塊(包括第三方庫)啟用CFG減少使用動(dòng)態(tài)生成代碼(特別是可執(zhí)行代碼)采用安全編碼實(shí)踐,減少內(nèi)存破壞漏洞考慮結(jié)合AppContainer沙箱提供額外隔離定期使用安全工具檢查和驗(yàn)證保護(hù)狀態(tài)附錄一:CFG相關(guān)術(shù)語解釋ControlFlowIntegrity(CFI)控制流完整性,一種安全概念,要求程序執(zhí)行必須遵循預(yù)定義的控制流圖,防止執(zhí)行流被重定向到意外位置。CFG是CFI理論的一種實(shí)際實(shí)現(xiàn),著重保護(hù)間接調(diào)用的安全性。IndirectCallValidation間接調(diào)用驗(yàn)證,CFG的核心機(jī)制,用于檢查所有通過寄存器或內(nèi)存指針執(zhí)行的函數(shù)調(diào)用。驗(yàn)證過程確保調(diào)用目標(biāo)是預(yù)先批準(zhǔn)的合法函數(shù)入口點(diǎn),防止跳轉(zhuǎn)到惡意代碼位置。GuardCFFunctionTableCFG函數(shù)表,包含程序中所有可作為間接調(diào)用目標(biāo)的函數(shù)地址列表。這個(gè)表在編譯時(shí)生成,存儲(chǔ)在PE文件的特殊區(qū)段中,在程序加載時(shí)被操作系統(tǒng)讀取并用于初始化CFG驗(yàn)證系統(tǒng)。CFGBitmapCFG位圖,一種內(nèi)存數(shù)據(jù)結(jié)構(gòu),用于快速驗(yàn)證地址是否為合法的間接調(diào)用目標(biāo)。每個(gè)比特位代表一個(gè)內(nèi)存區(qū)塊(通常是16字節(jié)),設(shè)置為1表示該區(qū)塊起始地址是合法調(diào)用目標(biāo)。Just-In-Time(JIT)Compilation即時(shí)編譯,一種在程序運(yùn)行時(shí)將代碼編譯為機(jī)器代碼的技術(shù),常見于瀏覽器JavaScript引擎、Java虛擬機(jī)等。JIT編譯產(chǎn)生的動(dòng)態(tài)代碼對(duì)CFG保護(hù)提出了特殊挑戰(zhàn),成為潛在的繞過途徑。ArbitraryCodeGuard(ACG)任意代碼保護(hù),Windows10引入的安全功能,防止進(jìn)程動(dòng)態(tài)生成可執(zhí)行代碼。ACG與CFG配合使用,可以有效防御利用JIT編譯繞過CFG的攻擊。特殊情況下需要JIT的進(jìn)程可使用JIT編譯服務(wù)。eXtendedFlowGuard(XFG)擴(kuò)展流保護(hù),CFG的增強(qiáng)版本,提供更精細(xì)的控制流保護(hù)。XFG不僅驗(yàn)證目標(biāo)是否為函數(shù)入口點(diǎn),還驗(yàn)證目標(biāo)是否為特定的預(yù)期函數(shù),通過函數(shù)ID匹配提供更強(qiáng)的保護(hù)。ReturnFlowGuard(RFG)返回流保護(hù),一種實(shí)驗(yàn)性技術(shù),旨在保護(hù)函數(shù)返回地址不被篡改,防御ROP攻擊。與CFG互補(bǔ),共同構(gòu)建更完整的控制流保護(hù)體系?,F(xiàn)代系統(tǒng)中,這一功能逐漸被硬件支持的解決方案(如IntelCET的影子棧)取代。Control-flowEnforcementTechnology(CET)控制流執(zhí)行技術(shù),Intel開發(fā)的硬件級(jí)控制流保護(hù)技術(shù),包含兩個(gè)主要組件:間接分支跟蹤(IBT,類似CFG)和影子棧(SS,保護(hù)返回地址)。Windows10已開始支持CET,與軟件CFG形成互補(bǔ)。理解這些術(shù)語有助于更準(zhǔn)確地把握CFG及相關(guān)技術(shù)的核心概念和工作原理。在安全研究和分析中,準(zhǔn)確的術(shù)語使用對(duì)于有效溝通和問題診斷至關(guān)重要。附錄二:CFG源碼與匯編示例ntdll!LdrpValidateUserCallTarget函數(shù)解析這是CFG驗(yàn)證的核心函數(shù),其簡(jiǎn)化偽代碼如下:BOOLEANLdrpValidateUserCallTarget(PVOIDTargetAddress,BOOLEANStackCall){//快速路徑:檢查特殊區(qū)域if(IsInSpecialRegion(TargetAddress)){returnTRUE;}//計(jì)算在CFG位圖中的位置ULONG_PTRIndex=(ULONG_PTR)TargetAddress>>4;ULONGByteIndex=Index/8;ULONGBitPosition=Index%8;//查詢位圖中對(duì)應(yīng)位是否設(shè)置BOOLEANValid=(CfgBitmap[ByteIndex]&(1<<BitPosition))!=0;//驗(yàn)證失敗處理if(!Valid){RaiseFailFastException(...);//永不返回}returnTRUE;}關(guān)鍵匯編指令分析以下是x64平臺(tái)上典型的CFG驗(yàn)證匯編代碼序列:;準(zhǔn)備調(diào)用驗(yàn)證函數(shù)movrcx,rax;目標(biāo)地址作為第一個(gè)參數(shù)movedx,0;不是棧調(diào)用callLdrpValidateUserCallTarget;驗(yàn)證通過后執(zhí)行間接調(diào)用callqwordptr[rax];LdrpValidateUserCallTarget函數(shù)內(nèi)部(簡(jiǎn)化)LdrpValidateUserCallTarget:;特殊區(qū)域快速檢查cmprcx,0x7FFE0000jashortFastPathReturn;計(jì)算位圖索引movrax,rcxshrrax,4;除以16movr10,raxshrr10,3;除以8得到字節(jié)索引andeax,7;取模得到位位置;獲取位圖基址movr11,qwordptr[CFG_BITMAP_BASE];檢查位圖中的對(duì)應(yīng)位btdwordptr[r11+r10],eaxjncFailureHandler;驗(yàn)證通過,返回xoreax,eaxinceaxretFailureHandler:;調(diào)用異常處理,終止進(jìn)程callRtlFailFast;永不返回以上代碼展示了CFG驗(yàn)證的核心邏輯:通過位運(yùn)算高效地計(jì)算目標(biāo)地址在CFG位圖中的位置,然后檢查對(duì)應(yīng)位是否設(shè)置為1(表示合法調(diào)用目標(biāo))。驗(yàn)證過程設(shè)計(jì)得非常高效,只需幾條指令即可完成,將性能開銷降至最低。值得注意的是,驗(yàn)證失敗時(shí)函數(shù)不會(huì)返回到調(diào)用者,而是直接調(diào)用RtlFailFast終止進(jìn)程,這種"快速失敗"策略確保了攻擊無法繼續(xù)進(jìn)行。同時(shí),驗(yàn)證函數(shù)還包含"快速路徑",對(duì)一些已知安全的地址范圍(如系統(tǒng)DLL的固定區(qū)域)進(jìn)行快速驗(yàn)證,進(jìn)一步優(yōu)化性能。理解這些低級(jí)實(shí)現(xiàn)細(xì)節(jié)對(duì)于安全研究人員和系統(tǒng)開發(fā)者特別有價(jià)值,有助于評(píng)估CFG的實(shí)際保護(hù)能力和潛在的優(yōu)化空間。參考文獻(xiàn)與資料鏈接學(xué)術(shù)論文與技術(shù)報(bào)告《Control-FlowIntegrity-Principles,Implementations,andApplications》MartínAbadi等著,ACM計(jì)算機(jī)與通信安全會(huì)議(CCS)《EnforcingForward-EdgeControl-FlowIntegrityinGCC&LLVM》CarolineTice等著,USENIX安全研討會(huì)《ControlFlowIntegrityforCOTSBinaries》MingweiZhang等著,USENIX安全研討會(huì)《ADetailedAnalysisofContemporaryARM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新版二年級(jí)語文單元測(cè)試模擬卷題庫
- 部門會(huì)議紀(jì)要標(biāo)準(zhǔn)格式與寫法要點(diǎn)
- 房地產(chǎn)銷售合同樣本與解讀
- 高職院校技能競(jìng)賽方案
- 電商平臺(tái)產(chǎn)品質(zhì)量監(jiān)督管理辦法
- 汽車維修站質(zhì)量管理體系介紹
- 公路交通安全管理標(biāo)準(zhǔn)
- 水產(chǎn)企業(yè)薪酬管理體系方案
- 青海省中考英語歷年試題分析匯編
- 工地高效施工方案(3篇)
- 七年級(jí)上冊(cè)語文人教版字詞帶拼音解釋(完整版)
- 環(huán)境監(jiān)測(cè)站電路安裝施工方案
- DB14∕T 1754-2018 保模一體板現(xiàn)澆混凝土復(fù)合保溫系統(tǒng)通.用技術(shù)條件
- JGJT46-2024《施工現(xiàn)場(chǎng)臨時(shí)用電安全技術(shù)標(biāo)準(zhǔn)》條文解讀
- 電梯安裝施工合同
- DL-T5024-2020電力工程地基處理技術(shù)規(guī)程
- 耐高溫鋁電解電容器項(xiàng)目計(jì)劃書
- 小學(xué)四年級(jí)語文上冊(cè)期末測(cè)試卷(可打印)
- 《肺癌的診斷與治療》課件
- 人教版三年級(jí)上冊(cè)數(shù)學(xué)應(yīng)用題100題及答案
- 防污閃涂料施工技術(shù)措施
評(píng)論
0/150
提交評(píng)論