文/武成崗 李建軍
?
控制流完整性的發(fā)展歷程
文/武成崗李建軍
武成崗中國(guó)科學(xué)院計(jì)算技術(shù)研究所正高級(jí)工程師、博士生導(dǎo)師,主要研究領(lǐng)域?yàn)閯?dòng)態(tài)編譯、軟件安全、程序分析等。
李建軍中國(guó)科學(xué)院計(jì)算技術(shù)研究所副研究員,主要研究領(lǐng)域?yàn)閯?dòng)態(tài)程序分析、軟件安全保障等。
控制流劫持是一種危害性極大的攻擊方式,攻擊者能夠通過(guò)它來(lái)獲取目標(biāo)機(jī)器的控制權(quán),甚至進(jìn)行提權(quán)操作,對(duì)目標(biāo)機(jī)器進(jìn)行全面控制。當(dāng)攻擊者掌握了被攻擊程序的內(nèi)存錯(cuò)誤漏洞后,一般會(huì)考慮發(fā)起控制流劫持攻擊。早期的攻擊通常采用代碼注入的方式,通過(guò)上載一段代碼,將控制轉(zhuǎn)向這段代碼執(zhí)行。為了阻止這類攻擊,后來(lái)的計(jì)算機(jī)系統(tǒng)中都基本上都部署了DEP(Data Execution Prevention)機(jī)制,通過(guò)限定內(nèi)存頁(yè)不能同時(shí)具備寫權(quán)限和執(zhí)行權(quán)限,來(lái)阻止攻擊者所上載的代碼的執(zhí)行。為了突破DEP的防御,攻擊者又探索出了代碼重用攻擊方式,他們利用被攻擊程序中的代碼片段,進(jìn)行拼接以形成攻擊邏輯。代碼重用攻擊包括Return-tolibc、ROP(Return Oriented Programming)、JOP(Jump Oriented Programming)等。研究表明,當(dāng)被攻擊程序的代碼量達(dá)到一定規(guī)模后,一般能夠從被攻擊程序中找到圖靈完備的代碼片段。
為了抵御控制流劫持攻擊,加州大學(xué)和微軟公司于2005年提出了控制流完整性(Control Flow Integrity, CFI)的防御機(jī)制。其核心思想是限制程序運(yùn)行中的控制轉(zhuǎn)移,使之始終處于原有的控制流圖所限定的范圍內(nèi)。具體做法是通過(guò)分析程序的控制流圖,獲取間接轉(zhuǎn)移指令(包括間接跳轉(zhuǎn)、間接調(diào)用和函數(shù)返回指令)目標(biāo)的白名單,并在運(yùn)行過(guò)程中,核對(duì)間接轉(zhuǎn)移指令的目標(biāo)是否在白名單中。控制流劫持攻擊往往會(huì)違背原有的控制流圖,CFI使得這種攻擊行為難以實(shí)現(xiàn),從而保障軟件系統(tǒng)的安全。
CFI從實(shí)現(xiàn)角度上,被分為細(xì)粒度和粗粒度兩種。細(xì)粒度CFI嚴(yán)格控制每一個(gè)間接轉(zhuǎn)移指令的轉(zhuǎn)移目標(biāo),這種精細(xì)的檢查,在現(xiàn)有的系統(tǒng)環(huán)境中,通常會(huì)引入很大的開(kāi)銷。而粗粒度CFI則是將一組類似或相近類型的目標(biāo)歸到一起進(jìn)行檢查,以降低開(kāi)銷,但這種方法會(huì)導(dǎo)致安全性的下降。
CFI已經(jīng)被提出十多年的今天,依然有許多研究者在探索新的CFI技術(shù),使其在可接受的開(kāi)銷下能獲得高安全性,圖1給出了CFI的發(fā)展歷程,本文將介紹在該歷程中的重要的技術(shù)創(chuàng)新和相關(guān)研究成果。
為了有效防御控制流劫持攻擊,2005 年Martín Abadi和Mihai Budiu,等人提出了控制流完整性(Control-Flow Integrity,CFI)的思路[1]。程序在其執(zhí)行過(guò)程中,應(yīng)當(dāng)遵循預(yù)先定義好的控制流圖(Control Flow Graph, CFG),以確保程序控制流不被劫持或非法篡改,背離程序編制時(shí)所設(shè)計(jì)的控制流轉(zhuǎn)移關(guān)系。CFI在運(yùn)行時(shí)檢測(cè)程序的控制轉(zhuǎn)移是否在控制流圖中,以識(shí)別是否遭遇了攻擊。具體作法是在控制流轉(zhuǎn)移指令前插入檢驗(yàn)代碼,來(lái)判斷目標(biāo)地址的合法性。這種做法能夠?qū)刂屏鹘俪止羝鸬椒烙饔茫且泊嬖谝恍﹩?wèn)題。
嚴(yán)格意義上的CFI,需要做到對(duì)每條間接控制轉(zhuǎn)移都做檢查,并確保每條轉(zhuǎn)移指令只能轉(zhuǎn)移到它自身的目標(biāo)集合。如果要達(dá)到更好的防御效果,則要做到上下文敏感的檢查。然而,這種檢查機(jī)制雖然能夠最大程度地提升系統(tǒng)的安全性,但其開(kāi)銷過(guò)大,難以得到實(shí)際部署。
Chao Zhang 等人指出,CFI未被廣泛應(yīng)用的原因是插樁引入的開(kāi)銷過(guò)大,需要額外的信息(比如間接控制轉(zhuǎn)移可能的目標(biāo)集合)的支持,且不能進(jìn)行增量式的部署。為此,他們提出了CCFIR[2](Compact Control Flow Integrity and Randomization)。其策略是對(duì)間接調(diào)用指令和函數(shù)返回指令的目標(biāo)進(jìn)行區(qū)分,阻止未經(jīng)驗(yàn)證的返回指令跳轉(zhuǎn)到敏感函數(shù)的行為。這些限制囊括了CFI保護(hù)的主要思想,且不需要?jiǎng)e名分析。出于效率和兼容性的考慮,他們通過(guò)一個(gè)專用的Springboard section來(lái)實(shí)現(xiàn)間接分支轉(zhuǎn)移,并限定代碼對(duì)齊,對(duì)跳轉(zhuǎn)目標(biāo)進(jìn)行限制。經(jīng)SPECint2000進(jìn)行測(cè)試,其平均/最高性能開(kāi)銷分別為3.6%和8.6%(平均/最高)。為了進(jìn)一步提升安全性,Springboard section在程序啟動(dòng)時(shí)隨機(jī)變換允許的跳轉(zhuǎn)目標(biāo),進(jìn)一步增加了控制流劫持的難度。CCFIR是一個(gè)純粹的二進(jìn)制轉(zhuǎn)換程序,不依賴源碼或調(diào)試信息,所依賴的僅是重定位表中的信息。受保護(hù)的代碼可以被獨(dú)立地驗(yàn)證,也可以進(jìn)行增量式的部署。
圖1 CFI主要技術(shù)發(fā)展歷程
Mingwei Zhang 等人提出了一種針對(duì)COTS(Commercial-Off-The-Shelf)程序的CFI機(jī)制——binCFI[3],目標(biāo)是使CFI直接應(yīng)用于已有的商用應(yīng)用上。他們將間接轉(zhuǎn)移指令的操作數(shù)分為代碼指針、異常處理程序入口、導(dǎo)出符號(hào)地址和返回地址等類型,通過(guò)精細(xì)的靜態(tài)分析,對(duì)不同類型的間接控制轉(zhuǎn)移,收集它們的合法目標(biāo)集合,如返回指令的合法目標(biāo)集合就是所有函數(shù)調(diào)用指令的下一條指令的地址,導(dǎo)出符號(hào)地址集合就是ELF文件中.dynamic段中存儲(chǔ)的地址。利用這種方法,binCFI可以得到與已有CFI方案相當(dāng)?shù)陌踩?。通過(guò)新增代碼段的方式,不改變?cè)械拇a,達(dá)到完全透明的目的。實(shí)驗(yàn)表明,論文中提出的方案可以應(yīng)用于大規(guī)模的二進(jìn)制程序中,擁有不錯(cuò)的安全性。
相對(duì)于嚴(yán)格意義上的CFI,CCFIR[2]和binCFI[3]都屬于粗粒度CFI機(jī)制。所謂粗粒度CFI,就是放寬檢查的條件,減少比較目標(biāo)集合。原來(lái)的CFI是一個(gè)間接轉(zhuǎn)移對(duì)應(yīng)一個(gè)目標(biāo)集合。放寬后,間接轉(zhuǎn)移目標(biāo)進(jìn)行合并,比如把所有的間接調(diào)用指令和間接跳轉(zhuǎn)指令的目標(biāo)集合合成一個(gè)目標(biāo),所有的函數(shù)返回指令的目標(biāo)集合合成一個(gè)。這種方式能夠有效地降低CFI引入的開(kāi)銷,但也存在安全性問(wèn)題。
Enes G?ktas在Overcoming CFI[4]中,利用兩種特殊的gadget——entry point(EP)gadget和call site(CS)gadget,來(lái)繞開(kāi)粗粒度CFI機(jī)制的防御。這兩種gadget滿足檢查的條件,但是其實(shí)是并不符合真實(shí)的控制流。Enes G?ktas對(duì)這兩種gadget的有效性進(jìn)行了論述,并利用其構(gòu)造ROP鏈、調(diào)用庫(kù)函數(shù),形成實(shí)際的攻擊。
為了對(duì)抗Overcoming CFI對(duì)粗粒度CFI的攻擊,Ali Jose Mashtizadeh 等人提出了一種通過(guò)對(duì)代碼指針加密,來(lái)增強(qiáng)CFI的方法,稱為CCFI[5]。粗粒度CFI的問(wèn)題本質(zhì)就在于歸類使得攻擊者有了可乘之機(jī)。CCFI就是要對(duì)代碼指針做更細(xì)致地劃分,還不能回歸到CFI原本定義的那種細(xì)粒度的分類。他們將代碼指針細(xì)分成四類,分別是函數(shù)指針類、return指針類(函數(shù)返回地址)、方法指針類、虛表指針類(后兩種都是針對(duì)C++語(yǔ)言特有的類)。每次在保存一個(gè)代碼指針時(shí),將其運(yùn)行時(shí)信息加密保存。每類指針對(duì)應(yīng)一些具有標(biāo)識(shí)作用的運(yùn)行信息。在這些指針解引用(間接轉(zhuǎn)移)時(shí),解密信息并比對(duì)。另外為了加快加解密的速度,CCFI使用了處理器中獨(dú)特的指令“AES-IN”對(duì)AES加解密算法加速,同時(shí)為了保證密鑰的安全,又將密鑰保存在處理器中獨(dú)特的寄存器中。他們修改了開(kāi)源編譯器LLVM,定制了一個(gè)編譯器,并用其編譯了一些程序,在實(shí)際的攻擊環(huán)境中檢測(cè)其有效性。實(shí)驗(yàn)證明,他們的方法在安全性和性能方面取得了很好的折衷。
Lucas Davi 等人在Stitching the Gadgets[6]中詳細(xì)分析了不同的CFI解決方案包括kBouncer、ROPecker、binCFI、ROPGuard 和Microsoft EMET4.1,并指出它們的安全性不容樂(lè)觀。他們首先重新思考了不同的粗粒度的CFI的假設(shè),對(duì)kBouncer、ROPecker、binCFI、ROPGuard和Microsoft EMET4.1進(jìn)行了詳盡的安全性分析,特別地,整合了這些現(xiàn)有粗粒度CFI,形成了一個(gè)安全策略更為嚴(yán)格的CFI系統(tǒng)。在這個(gè)更為嚴(yán)格的條件下,完成了圖靈完整性的驗(yàn)證。為了更好地展示攻擊能力,他們?cè)贏dobe Reader和mPlayer上進(jìn)行了實(shí)驗(yàn),證明了粗粒度的CFI無(wú)法達(dá)到預(yù)期的安全效果。論文[7]也探索對(duì)CFI進(jìn)行攻擊的手段。多數(shù)防御人員認(rèn)為,通過(guò)影子棧(Shadow Stack)來(lái)檢測(cè)函數(shù)返回目標(biāo),再加上DEP和ASLR的保護(hù),棧應(yīng)該會(huì)變得非常安全,從而將重心轉(zhuǎn)向堆數(shù)據(jù)的安全保護(hù),然而,作者發(fā)現(xiàn),棧還是會(huì)受到攻擊的。他們提出了三種攻擊方法:一是利用堆上的漏洞來(lái)破壞棧上的calleesaved寄存器保存區(qū)域,使得calleesaved寄存器被劫持;二是利用用戶空間和內(nèi)核之間進(jìn)行上下文切換的問(wèn)題,來(lái)劫持sysenter指令,使控制跳轉(zhuǎn)到攻擊者想跳轉(zhuǎn)的位置;三是通過(guò)泄露主棧的地址來(lái)泄露出shadow stack的地址,進(jìn)而進(jìn)行攻擊。
以往CFI方案的問(wèn)題是只實(shí)施了控制流不敏感策略。上下文信息的缺少不可避免地降低了CFI的防御能力,從而給了攻擊者利用空間。上下文敏感的CFI(Context sensitive CFI)是有望解決這一問(wèn)題的方法,它依賴于上下文敏感的靜態(tài)分析,將CFI不變量和CFG中的控制流路徑聯(lián)系到一起,運(yùn)行時(shí)在執(zhí)行路徑上強(qiáng)制執(zhí)行這些不變量。CCFI早在CFI提出之時(shí)已被認(rèn)可,但因其在現(xiàn)實(shí)應(yīng)用中不實(shí)際而被迅速?gòu)U棄。Victor van der Veen 等人提出的Practical Context-Sensitive CFI[8],展示了一個(gè)可用于現(xiàn)實(shí)應(yīng)用程序的高效、可靠、實(shí)用的上下文敏感CFI方案:PathArmor。PathArmor依賴于商用硬件的支持,高效可靠地監(jiān)控通往敏感函數(shù)(可用于實(shí)施控制流轉(zhuǎn)移攻擊)的執(zhí)行路徑;使用仔細(xì)優(yōu)化的二進(jìn)制插樁設(shè)計(jì),在被監(jiān)控路徑上強(qiáng)制執(zhí)行上下文敏感CFI的不變量。PathArmor的路徑不變量是按需在CFG上,通過(guò)一定范圍內(nèi)的上下文敏感靜態(tài)分析得到的,而且路徑驗(yàn)證步驟使用了caching來(lái)提高驗(yàn)證效率。路徑驗(yàn)證本身也是非常高效的,因?yàn)樗械腃FI檢查都在敏感函數(shù)點(diǎn)處集中完成。
John Criswell將CFI做到操作系統(tǒng)內(nèi)核中,使之免受經(jīng)典的控制流劫持、return2user和代碼段修改攻擊,該系統(tǒng)稱為KCoFI[9]。他們?cè)诨跇?biāo)簽的控制流間接轉(zhuǎn)移保護(hù)的基礎(chǔ)上,加入一個(gè)運(yùn)行時(shí)監(jiān)控的軟件層,負(fù)責(zé)保護(hù)一些關(guān)鍵的操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)和監(jiān)控操作系統(tǒng)進(jìn)行的所有底層狀態(tài)操作。并且還通過(guò)形式化方法,證明了一個(gè)子集的正確性。證明涵蓋了頁(yè)表管理、異常處理、上下文切換和信號(hào)分派等操作。實(shí)驗(yàn)表明,KCoFI阻止了攻擊者將控制流向FreeBSD Kernel中的任何gadget的轉(zhuǎn)移。與未修改的內(nèi)核相比,KCoFI在運(yùn)行server測(cè)試集時(shí)具有較小的開(kāi)銷,但運(yùn)行文件系統(tǒng)操作密集型的測(cè)試集時(shí),開(kāi)銷較大。
為了能夠在性能和防御方面取得更好的效果,一些研究著手于利用現(xiàn)有的硬件機(jī)制,來(lái)降低CFI的開(kāi)銷。
Vasilis Pappas提出利用硬件性能計(jì)數(shù)器,在運(yùn)行時(shí)觀察執(zhí)行流的思路,該方法被稱為kBouncer[10]。他們利用LBR(Last Branch Register)來(lái)捕獲最近的16次跳轉(zhuǎn)信息。具體做法是在敏感系統(tǒng)調(diào)用處,對(duì)捕獲的16次跳轉(zhuǎn)進(jìn)行安全性判斷,即return指令需要跳轉(zhuǎn)到調(diào)用點(diǎn)的后繼位置,indirect-call指令的目標(biāo)是函數(shù)入口,其余跳轉(zhuǎn)指令目標(biāo)基本塊長(zhǎng)度不能全部少于20條指令。為了避免攻擊者利用庫(kù)函數(shù)調(diào)用來(lái)完成攻擊,文章在所有的庫(kù)函數(shù)調(diào)用點(diǎn),進(jìn)行上述合法性檢查。為了驗(yàn)證kBouncer的防御效果,作者對(duì)IE瀏覽器、Adobe Flash Player和Adobe Reader進(jìn)行了實(shí)驗(yàn)(利用已知安全漏洞,組織ROP payload攻擊這三種應(yīng)用),實(shí)驗(yàn)結(jié)果表明該方法能夠有效緩解ROP攻擊。同時(shí),該方法的性能開(kāi)銷低于4%。
Yueqiang Chen等人設(shè)計(jì)了一種與kBouncer類似的方法,稱作ROPecker[11],也是利用LBR捕獲程序控制流的方式進(jìn)行ROP攻擊監(jiān)測(cè)。但不同之處在于判斷是否遭受ROP攻擊的邏輯和觸發(fā)監(jiān)測(cè)的時(shí)機(jī)。
1.判斷邏輯:在運(yùn)行時(shí)檢測(cè)過(guò)去(利用LBR)和未來(lái)的執(zhí)行流(模擬執(zhí)行)中是否存在長(zhǎng)gadget鏈(5個(gè)比較短的gadget),若存在,則認(rèn)為這是一次ROP攻擊。Gadget信息是通過(guò)靜態(tài)分析二進(jìn)制程序和共享庫(kù)得到的。
2.運(yùn)行時(shí)監(jiān)測(cè)是事件驅(qū)動(dòng)的,具體時(shí)機(jī)是敏感系統(tǒng)調(diào)用和執(zhí)行流跳出滑動(dòng)窗口觸發(fā)異常。ROPecker設(shè)計(jì)了一個(gè)滑動(dòng)窗口,因?yàn)榇a本身具有時(shí)間和空間的局部性,但是gadget鏈卻是散列的,利用這一特性,系統(tǒng)保證該窗口內(nèi)的gadget數(shù)目不足以構(gòu)成一次ROP攻擊,窗口內(nèi)的代碼設(shè)置可執(zhí)行權(quán)限,窗口外的代碼不可執(zhí)行,當(dāng)執(zhí)行流跳出滑動(dòng)窗口時(shí),便會(huì)觸發(fā)異常,進(jìn)行運(yùn)行時(shí)檢測(cè)。該方法利用代碼本身具有的時(shí)間和空間局部性,針對(duì)gadget鏈?zhǔn)巧⒘械那疤?,提出了滑?dòng)窗口機(jī)制,使用事件驅(qū)動(dòng)的檢測(cè)方法,具有較高的準(zhǔn)確性和高效性。為了驗(yàn)證該方法的安全性,ROPecker選取了有棧溢出的真實(shí)世界應(yīng)用(Linux Hex-editer)進(jìn)行攻防演練。實(shí)驗(yàn)結(jié)果證明,ROPecker能夠有效的阻止ROP攻擊。同時(shí),SPEC CPU2006 benchmark顯示了該方法的開(kāi)銷非常低(2%)。
Yubin Xia等人設(shè)計(jì)的CFIMon[12],也是采用性能計(jì)數(shù)器來(lái)捕獲程序執(zhí)行流,并進(jìn)行合法性判斷。但他們采用的是BTB(Branch Trace Buffer),來(lái)捕獲受保護(hù)程序運(yùn)行過(guò)程中所有跳轉(zhuǎn)指令的信息。BTB 與LBR不同之處在于,BTB可以把程序整個(gè)執(zhí)行過(guò)程中所有的跳轉(zhuǎn)指令的歷史信息都記錄下來(lái),LBR只能記錄16條。但是BTB需要CPU向指定的一個(gè)緩沖區(qū)內(nèi)寫入跳轉(zhuǎn)信息,當(dāng)緩沖區(qū)滿時(shí),CPU會(huì)觸發(fā)異常交給操作系統(tǒng)處理(將緩沖區(qū)內(nèi)容寫入文件中),LBR是循環(huán)的寄存器。使用BTB的程序性能明顯比LBR性能低。CFIMon檢查BTB的時(shí)機(jī)在兩個(gè)階段:一是當(dāng)緩沖區(qū)滿時(shí),操作系統(tǒng)將所有歷史信息寫入另一個(gè)進(jìn)程,由另一個(gè)進(jìn)程進(jìn)行合法性判斷;二是當(dāng)受保護(hù)進(jìn)程執(zhí)行敏感系統(tǒng)調(diào)用時(shí),另一個(gè)進(jìn)程也進(jìn)行歷史信息的合法性判斷。合法性判斷主要檢查間接控制轉(zhuǎn)移的跳轉(zhuǎn)目標(biāo)是合法目標(biāo)集合內(nèi)。如果所有間接控制轉(zhuǎn)移的歷史跳轉(zhuǎn)目標(biāo)在合法目標(biāo)集合中,認(rèn)為當(dāng)前受保護(hù)進(jìn)程沒(méi)有收到攻擊;如果有至少一個(gè)間接控制轉(zhuǎn)移的歷史跳轉(zhuǎn)目標(biāo)在合法目標(biāo)集合中,那么認(rèn)為受保護(hù)進(jìn)程受到攻擊。合法目標(biāo)的集合是在線下通過(guò)靜態(tài)分析獲得的,并且存儲(chǔ)在檢查進(jìn)程中。
大多數(shù)的攻擊都依賴于某種形式的控制劫持來(lái)重定向程序執(zhí)行,CFI(Control Flow Integrity)是一種運(yùn)行時(shí)強(qiáng)制執(zhí)行的技術(shù),用以抵御代碼注入、代碼重用攻擊,也不易受信息泄露攻擊。CFI在運(yùn)行時(shí)強(qiáng)制執(zhí)行預(yù)期的控制流轉(zhuǎn)移,不允許執(zhí)行應(yīng)用程序控制流圖(Control Flow Graph,CFG)中未出現(xiàn)的轉(zhuǎn)移。精確的CFI會(huì)引入大量開(kāi)銷,這一點(diǎn)激勵(lì)了更為實(shí)際的、粗粒度的CFI變體的發(fā)展;粗粒度CFI通過(guò)放寬限制條件來(lái)降低開(kāi)銷,卻也給攻擊者提供足夠的利用空間。另外,CFI的作用也僅僅是用于阻止攻擊者對(duì)控制流的劫持,有研究表明(如Control-Flow Bending,CFB[13]),攻擊者可以僅僅通過(guò)控制函數(shù)調(diào)用的參數(shù),完成攻擊者的目的,如執(zhí)行任意代碼、執(zhí)行受限制的代碼和信息泄露。
從2005年CFI技術(shù)被提出,CFI技術(shù)已經(jīng)歷經(jīng)了10多年的發(fā)展。近兩年涌現(xiàn)出的大量CFI相關(guān)的研究工作,極大推進(jìn)了CFI技術(shù)的發(fā)展。但是,CFI技術(shù)未來(lái)仍有很大的發(fā)展空間,仍然需要研究人員繼續(xù)深入研究,實(shí)現(xiàn)一種高可靠、低開(kāi)銷的CFI技術(shù)。
(作者單位為中國(guó)科學(xué)院計(jì)算技術(shù)研究所)
參考文獻(xiàn)
[1]. Martín Abadi,Mihai Budiu, úlfar Erlingsson, and Jay Ligatti. 2005. Control-flow integrity.InProceedings of the 12th ACM conference onComputer and communications security(CCS ’05). ACM, New York, NY, USA,340-353.
[2]. Chao Zhang, TaoWei, Zhaofeng Chen, Lei Duan, Laszlo Szekeres, Stephen McCamant, Dawn Song, and Wei Zou. 2013. Practical Control Flow Integrity and Randomization for Binary Executables. In Proceedings of the 2013 IEEE Symposium on Security andPrivacy(SP ’13).IEEE Computer Society, Washington,DC, USA, 559-573.DOI=http://dx.doi.org/10.1109/SP.2013.44
[3]. Mingwei Zhang and R. Sekar. 2013. Control flow integrity for COTS binaries. In Proceedingsof the 22nd USENIX conference on Security(SEC’13). USENIX Association,Berkeley, CA, USA, 337-352.
[4]. Enes G?ktas,Elias Athanasopoulos, Herbert Bos, and Georgios Portokalidis. 2014. Out of Control: Overcoming Control-Flow Integrity. In Proceedingsof the 2014 IEEE Symposium on Security and Privacy(SP ’14). IEEE Computer Society,Washington,DC, USA, 575-589.
[5]. Ali JoseMashtizadeh, Andrea Bittau, Dan Boneh, and David Mazières. 2015. CCFI:Cryptographically Enforced Control Flow Integrity. In Proceedingsof the 22nd ACM SIGSAC Conference on Computer and Communications Security(CCS ’15). ACM, New York, NY, USA,941-951.
[6]. Lucas Davi,Ahmad-Reza Sadeghi, Daniel Lehmann, and Fabian Monrose. 2014. Stitching thegadgets: on the ineffectiveness of coarse-grained control-flow integrityprotection. In Proceedings of the 23rd USENIX conference on Security Symposium(SEC’14). USENIX Association, Berkeley, CA, USA, 401-416.
[7]. Mauro Conti, Stephen Crane, Lucas Davi,Michael Franz, Per Larsen, Marco Negro, Christopher Liebchen, Mohaned Qunaibit,and Ahmad-Reza Sadeghi. 2015. Losing Control: On the Effectiveness of Control-FlowIntegrity under Stack Attacks. In Proceedings of the 22nd ACM SIGSAC Conferenceon Computer and Communications Security(CCS ’15). ACM, New York, NY,USA,952-963.
[8]. Victor van der Veen, Dennis Andriesse, EnesG?ktas, Ben Gras,Lionel Sambuc, Asia Slowinska, Herbert Bos, and CristianoGiuffrida. 2015. Practical Context-Sensitive CFI. In Proceedings of the 22ndACM SIGSAC Conference on Computer and Communications Security(CCS ’15). ACM,New York, NY, USA, 927-940.
[9]. John Criswell, NathanDautenhahn, and Vikram Adve. 2014. KCoFI: Complete Control-Flow Integrity forCommodity Operating System Kernels. In Proceedings of the 2014 IEEE Symposium on Security andPrivacy(SP ’14).IEEE Computer Society, Washington,DC, USA, 292-307.
[10]. Vasilis Pappas, MichalisPolychronakis, and Angelos D. Keromytis. 2013. Transparent ROP exploitmitigation using indirect branch tracing. In Proceedings of the 22nd USENIXconference on Security(SEC’13). USENIX Association, Berkeley, CA, USA, 447-462.
[11]. Yueqiang Cheng, Zongwei Zhou,Miao Yu, Xuhua Ding and Robert H. Deng. 2014. ROPecker: A Generic and PracticalApproach for Defending Against ROP Attacks. In Proceedingsof the 2014 Network and Distributed System Security Symposium(NDSS‘14).
[12]. Yubin Xia, Yutao Liu, HaiboChen, and Binyu Zang. 2012. CFIMon: Detecting violation of control flowintegrity using performance counters. In Proceedings of the 2012 42nd Annual IEEE/IFIPInternational Conference on Dependable Systems and Networks(DSN)(DSN ’12). IEEE Computer Society,Washington,DC, USA, 1-12.
[13]. Carlini N, Barresi A, Payer M, Wagner D andGross TR. 2015. Control-Flow Bending: On the Effectiveness of Control-FlowIntegrity. In Proceedings of the 24th USENIX Security Symposium(USENIX Security 15). USENIX Association, Washington,D.C., USA