?

面向動態生成代碼的攻防技術綜述

2016-03-01 10:26煒,霍瑋,鄒
信息安全學報 2016年4期
關鍵詞:控制流編譯器攻擊者

吳 煒,霍 瑋,鄒 維

中國科學院信息工程研究所 北京 中國 100093中國科學院網絡測評技術重點實驗室 北京 中國 100195網絡安全防護技術北京市重點實驗室 北京 中國 100195中國科學院大學 北京 中國 100049

面向動態生成代碼的攻防技術綜述

吳 煒,霍 瑋,鄒 維

中國科學院信息工程研究所 北京 中國 100093中國科學院網絡測評技術重點實驗室 北京 中國 100195網絡安全防護技術北京市重點實驗室 北京 中國 100195中國科學院大學 北京 中國 100049

動態代碼生成技術廣泛使用在瀏覽器、Flash播放器等重要日常軟件中,近年來其中曝出嚴重的安全問題,為控制流劫持攻擊和相應的防御提供了新機會,受到越來越多的關注。針對動態生成代碼在數據區且可被執行和直接依賴輸入的特性,本文從代碼注入攻擊和代碼重用攻擊兩個角度總結分析了控制流劫持攻擊新技術,并從強制性防御和閃避防御(Moving target defense)兩個角度對相關的主要防御新方法進行了闡述。同時提出動態代碼生成系統安全性的衡量模型,對代表性防御技術進行對比分析和評估,并探討了面向動態生成代碼攻防技術的發展趨勢和下一步的研究方向。

軟件安全; 即時編譯; 動態二進制翻譯; 控制流劫持; 防御技術

1 引言

瀏覽器、Flash播放器、虛擬機和模擬器已成為互聯網時代廣泛使用的基礎性軟件,它們普遍采用即時編譯(Just-In-Time compilation)和動態二進制翻譯(Dynamic binary translation)等動態代碼生成(Dynamic code generation)技術。該技術可在軟件系統運行過程中動態產生或修改可執行代碼[1-5],稱為動態生成代碼(Dynamic generating code)。

控制流劫持[6]是一種經典且有效的攻擊方法,攻擊者通過改變目標程序正常的執行流程并進行控制從而達到攻擊的目的??刂屏鹘俪值姆椒ǚ譃閮纱箢? 注入式和非注入式。傳統的注入式攻擊[7]需要同時滿足三個攻擊條件: 1)掌握可注入攻擊代碼的漏洞; 2)控制程序原有執行流程并成功跳轉到攻擊代碼起始處; 3)攻擊代碼可被執行。非注入式攻擊,如代碼重用攻擊(Code reuse attack)[8,9],降低了傳統注入式攻擊的攻擊條件。通過重用目標程序中的工具代碼片段(Gadget)構造攻擊代碼,既避免注入攻擊代碼又可保證攻擊代碼的可執行性。但可被利用的代碼數量和串接難度成為代碼重用攻擊有效的關鍵因素。然而,利用動態生成代碼,既不需依賴漏洞注入攻擊代碼,也不需依賴程序中是否存在合法的攻擊代碼段,僅通過精心設計程序輸入就可以完成攻擊代碼注入或者攻擊代碼段構造,同時可以繞過數據執行保護(Data execution prevention)和地址隨機化(Address space layout randomization)等防御技術,大大降低了控制流劫持的技術難度。

動態代碼生成技術使得傳統代碼安全防護技術的有效性也面臨著挑戰。由于攻擊代碼可與動態生成的正常代碼存儲在同一數據區,數據執行保護無法阻止攻擊代碼的執行??蓤绦写a在運行時被動態生成,因此依賴靜態分析與靜態插裝的控制流完整性(Control flow integrity)[10]保護難以實施,基于靜態分析和靜態二進制變換的軟件多樣化(Software diversification)[11]技術也同樣難以應用。

圍繞動態生成代碼的攻防對抗新技術和新方法成為近年來的研究熱點。2010年Blazakis在Black Hat會議上首先提出了針對Flash播放器中動態生成代碼的攻擊方法[12],隨后這種攻擊方法被擴展到各種動態代碼生成系統。安全研究人員相繼在Pwn2Own、Black Hat和NDSS等頂級會議上提出了面向動態生成代碼的一系列新攻擊方式[13-18]。同時,研究人員也提出了許多針對動態生成代碼的新防御技術[18-28]。本文圍繞動態生成代碼,從攻擊與防御兩方面對近年來的研究成果進行總結歸納,概述技術的基本原理和應用效果,并建立適用于面向動態生成代碼攻防技術的衡量模型,對代表性技術進行對比分析和評價,通過分析潛在的攻擊手段,指出提高動態生成代碼安全性的發展方向。本文的主要貢獻: 1)分類闡述針對動態代碼生成技術的攻擊技術; 2)分類論述加固動態代碼生成系統的防御技術的原理和研究進展; 3)提出面向動態生成代碼系統的安全度量模型,并基于該模型對防御技術進行了對比分析; 4)對基于動態生成代碼的攻防技術的發展趨勢進行了展望。

本文首先對動態生成代碼及相關攻防技術的背景和術語進行了介紹(第2節),然后對動態生成代碼的原理進行了概括,揭示動態生成代碼的特性(第 3節)。從代碼注入攻擊和代碼重用攻擊兩個角度介紹了動態代碼生成技術為攻擊者帶來的新機會(第 4節)。從強制性防御和閃避防御兩個角度闡述了針對動態代碼生成的防御技術的原理、挑戰和研究進展(第5節)?;诜烙杀竞头烙Ч?衡量了動態代碼生成系統的安全性(第6節),最后總結并給出了研究發展建議。

2 研究背景

動態生成代碼主要存在于即時編譯系統和動態二進制翻譯系統中。即時編譯系統廣泛存在于電腦和移動終端,可顯著提高動態語言解釋執行的效率。隨著JavaScript語言廣泛使用于動態網頁中[68],當前主流瀏覽器,如Chrome、Safari、IE、Firefox等都對JavaScript程序提供支持,并采用了即時編譯技術提高 JavaScript的執行效率[1,2],如在特定情況下可使Google V8引擎速度提高12倍。Adobe Flash播放器幾乎安裝在所有的電腦和移動終端,其也采用即時編譯技術加速ActionScript的解釋執行來為用戶帶來更好的多媒體體驗。此外,JVM和.NET CLR等虛擬機均使用了即時編譯技術。動態二進制翻譯[29]廣泛使用在跨平臺支持[5,30]、遺產軟件移植、動態程序分析[31]和安全防御[32,33]中以增強可移植性與安全性。二進制翻譯技術作為虛擬化軟件Qemu[5]的核心技術,隨著云計算的發展而被廣泛使用。由于動態生成代碼直接受控于軟件輸入并存儲于內存堆區,傳統的攻防技術,如控制流劫持、數據執行保護、內存完整性檢測、閃避防御等在應用原理、應用場景和應用效果等方面都面臨新的挑戰,面向動態生成代碼的攻防技術和方法成為新的研究熱點。

在針對動態生成代碼的攻擊技術中,控制流劫持攻擊是研究的熱點??刂屏鹘俪止敉ㄟ^劫持函數返回地址或代碼指針將控制流跳轉到攻擊者指定的代碼地址并執行,從而完成攻擊。根據攻擊代碼來源的不同,又可進一步分為代碼注入攻擊和代碼重用攻擊。在代碼注入攻擊中,需要利用目標程序漏洞將包含Shellcode的代碼注入到內存可執行區域并讓Shellcode得到執行機會。代碼重用攻擊則利用程序中現有“合法”代碼,繞過數據執行保護完成攻擊,返回導向編程(Return oriented programming,簡稱ROP)[8]攻擊是其中的典型。ROP尋找程序內部的工具代碼片段組合形成ROP鏈(ROP chain)。工具代碼片段是以返回指令結尾的若干連續指令,將多段工具代碼片段精心組合可以構造等效于 Shellcode的ROP鏈直接完成攻擊,或者僅通過構造ROP鏈調用VirtualProtect等函數關閉Shellcode所在頁面的數據執行保護,進而執行Shellcode間接完成攻擊。文獻[34]對 ROP的利用條件進行了建模分析。為使用 ROP技術,需要利用目標程序漏洞控制程序執行流程,依次執行工具代碼片段完成攻擊。

數據執行保護和地址空間隨機化是廣泛應用于現代操作系統中的兩種防御技術。數據執行保護將內存頁設置為可執行的代碼段或不可執行的數據段,一種常見的數據執行保護“W⊕X”可以防止內存頁被同時設置為可寫和可執行,能夠有效防御傳統代碼注入攻擊。地址空間隨機化將程序、鏈接庫的加載位置和堆、棧的起始地址隨機化,使攻擊者難以預測目標指令的地址位置,很大程度上提高了攻擊的門檻。然而,地址隨機化也有兼容性、熵值小和易受到信息泄露攻擊的缺點。一些程序和動態鏈接庫不兼容地址隨機化保護,容易被ROP攻擊直接利用。在32位操作系統中,地址隨機化為堆提供的隨機性不足,低熵的隨機化易受到暴力枚舉的攻擊[35]。堆噴射(Heap spray)是繞過32位地址隨機化的有效方式。同時,研究者發現了利用程序漏洞泄露內存地址從而繞過地址隨機化的方式[36-39]。

控制流完整性[10,41-43]保護是一類通過檢查控制流非正常跳轉從而防止程序控制流被劫持的防御方法。但傳統控制流完整性防護技術只能保護靜態編譯產生的代碼。閃避防御技術(Moving Target Defense)[44]是一種新興的防御技術,其中包括軟件多樣化技術[11]。將軟件多樣化技術應用到動態代碼生成上可以增加生成代碼的不確定性,生成多變的不同形態的但功能相同的代碼,減少攻擊者對于生成代碼的知識,從而降低攻擊成功的概率[24,25]。

3 動態代碼生成技術原理

動態代碼生成技術能夠在運行時新產生并執行優化的本地機器碼,被廣泛應用于即時編譯系統和動態二進制翻譯系統中以提高系統性能、可移植性和安全性。盡管該技術在不同的動態代碼生成器中實現方式不同,但其基本行為特征是相同的,都是對輸入程序代碼,在運行時直接翻譯生成本地機器碼執行或動態優化已生成的本地機器碼并執行。

現代代碼解釋器中廣泛使用了動態代碼生成技術。解釋型語言通常會將程序編譯為其自定義的字節碼并執行。當字節碼在解釋器虛擬機中運行時,即時編譯器開始為其動態生成語義等價且運行速度更快的可執行代碼,通常生成宿主機的本地機器碼。

一個具體的例子如圖 1所示,在上層語言ActionScript中的一段源碼被動態翻譯成了對應的本地代碼。

圖1 動態代碼生成實例

軟件動態翻譯器對動態生成代碼主要有四類操作: 生成、修改、刪除和調用。如圖2所示,軟件動態翻譯器[18]讀入待翻譯的源程序,優化編譯器以函數為單位根據輸入程序生成本地代碼到堆上的代碼緩存(Code cache,又稱Code heap[42]、JIT buffer[15])中,并通過執行器調用動態生成代碼。對于輸入程序的某一個函數,軟件動態翻譯器生成的本地代碼的語義與輸入函數應當是等價的。由于本地代碼會在運行時生成并被調用執行,因此代碼緩存區域需被設置為可寫且可執行。優化編譯器還可以收集輪廓信息修改動態生成代碼,進行代碼優化。垃圾回收器對代碼緩存進行自動內存管理,對動態生成代碼進行刪除。

因此,動態生成代碼具有兩個特性: 1)直接受控于輸入; 2)存儲于可執行的數據區。

圖2 動態代碼生成技術基本框架

4 動態代碼生成的攻擊威脅

控制流劫持漏洞是一類危害嚴重的漏洞??刂屏鹘俪止羰且环N最常見的利用控制流劫持漏洞進行軟件攻擊的手段,可導致攻擊者獲得任意代碼執行能力從而安裝木馬、病毒,對計算機和網絡系統的機密性、可用性和完整性造成破壞??刂屏鹘俪止粢话憧煞譃榇a注入攻擊(Code injection attack)和代碼重用攻擊[6]。傳統代碼注入攻擊可以被數據執行保護防御,但是動態生成代碼位于可執行的數據區,因此向代碼緩存注入的惡意代碼可以繞過數據執行保護。同時,動態生成代碼直接受控于輸入的特性使攻擊者可以操縱輸入程序生成所需的工具代碼,更易于實施代碼重用攻擊。動態代碼生成提供了新的攻擊方式,近年來研究者們發現許多利用動態生成代碼進行攻擊的機會[12,16-18]。

4.1 控制流劫持漏洞

控制流劫持攻擊的必要條件是存在控制流劫持漏洞。出于性能考慮,動態代碼翻譯器(如即時編譯器)往往用C或C++語言編寫。由于動態代碼翻譯器的復雜性,代碼量往往高達數十萬行甚至百萬行。大規模、復雜的C或C++程序中內存安全存在更大的隱患。各類溢出漏洞、釋放后重用漏洞、類型混淆漏洞等均可能被用來劫持程序原有的控制流。如Google V8 JavaScript Engine中存在堆溢出漏洞(CVE-2009-2555),可被用來劫持程序的控制流,跳轉到攻擊代碼執行。根據攻擊代碼來源的不同,又可進一步分為代碼注入攻擊和代碼重用攻擊。

4.2 代碼注入攻擊

傳統代碼注入攻擊利用目標程序的輸入信道將實現惡意功能的Shellcode注入程序內存空間中并通過控制流劫持漏洞執行。數據執行保護通過設置數據頁面不可執行能夠阻止Shellcode執行,很大程度上提高了代碼注入攻擊的門檻。但在動態代碼生成技術中,代碼緩存本身就需要寫和執行權限,使得數據執行保護失效,從而為攻擊者注入執行Shellcode提供了便利。從注入方式的角度,攻擊者可以在利用代碼緩存覆蓋攻擊(利用內存任意寫漏洞向代碼緩存注入惡意代碼)這種傳統方式之外,不利用內存漏洞,僅需構造畸型源程序,就迫使軟件動態翻譯器生成惡意代碼(如JIT噴射攻擊)。

堆噴射是一種利用堆操作漏洞向堆上注入包含Shellcode的大量重復指令,從而繞過地址隨機化的注入攻擊方法。數據執行保護是防御堆噴射的傳統方法,因為在這種情況下攻擊者需要先利用ROP等代碼重用技術將數據執行保護關閉(如調用 Virtual-Protect或mprotect函數),才能執行注入的Shellcode,增加了漏洞利用的難度。此外,Egele等還提出一種在字符串緩沖區中發現Shellcode的堆噴射防御技術[46]。針對上述防御方法,攻擊者提出了一種向代碼緩存注入 Shellcode的簡便方法,即 JIT噴射攻擊(JIT Spraying)。JIT噴射攻擊是由堆噴射演進而來的,利用 JIT動態生成本地機器碼的特性完成代碼注入攻擊。由于 Shellcode被直接注入到代碼緩存中,使得數據執行保護和Egele等的防御方法均失效。JIT噴射攻擊最早由Blazakis在2010年Black Hat上提出,可以繞過地址隨機化和數據執行保護攻擊 Adobe Flash的即時編譯器[12]。JIT生成代碼存放在可讀寫并可執行的代碼緩存中,JIT噴射攻擊強制即時編譯器產生大量代碼進行堆噴射攻擊以繞過地址隨機化防御。JIT噴射攻擊的原理如圖3所示。攻擊者利用包含立即數的腳本指令,通過控制源程序將“常量”作為立即數注入即時編譯器的生成代碼中(如指令“XOR EAX 0x3c909090”),然后通過一個控制流劫持漏洞跳轉到“常量”的地址加一個偏移值,此時“常量”就變成了可以被識別執行的代碼片段。通過連續輸入大量的常量就可以在代碼緩存中生成攻擊者需要的 Shellcode。已公開的 JIT噴射攻擊包括針對Safari瀏覽器 JavaScript即時編譯器的攻擊[45]和對Adobe Flash的攻擊。

圖3 JIT噴射攻擊[25]

4.3 代碼重用攻擊

傳統ROP攻擊首先在程序及其依賴庫中尋找工具代碼片段,再在運行時采用繞過地址隨機化的技術獲得工具代碼片段的內存地址,如利用一個地址泄露漏洞獲取某個動態鏈接庫的基址,最后劫持控制流跳轉到工具代碼片段執行。動態代碼生成技術能夠在堆上動態輸出本地機器碼,且輸出內容可以由高層編程語言所構成的輸入所控制。這意味著攻擊者可以生成自己需要的工具代碼片段用于ROP而不依賴于程序和動態加載庫中已存在可利用的工具代碼片段,同時也使G-free編譯[48]等ROP攻擊緩解技術失效。Serna在報告[16]中提出了一種向代碼緩存區噴射用于泄露內存地址的工具代碼片段的攻擊方式。動態代碼生成為ROP等代碼重用攻擊提供了便利。

一種針對動態代碼生成的ROP攻擊可以分為以下三個步驟: 1)控制動態代碼翻譯器的輸入源程序以在代碼緩存產生所需工具代碼片段; 2)通過信息泄露定位代碼緩存區中工具代碼片段的位置; 3)將控制流跳轉到工具代碼片段開始執行。為完成該過程,需要攻擊者深刻理解目標軟件的防御機制并利用目標軟件中的信息泄露漏洞。Athanasakis等人提出一種利用Firefox和IE瀏覽器中JavaScript即時編譯器動態生成工具代碼片段,并結合信息泄露漏洞進行代碼重用攻擊的方法[15]。Snow在文獻[40]中提出JIT-ROP方法,可在上述第二步中應用。該方法利用一個信息泄露漏洞讀取大量內存內容并在其中搜索ROP所需的工具代碼片段,即時構建ROP完成攻擊。

5 動態生成代碼的安全防御

軟件漏洞是導致控制流劫持攻擊的根本原因。研究者提出了一系列控制流劫持漏洞的挖掘技術[49-52]。但是由于漏洞挖掘本身的難度,不能確保發現所有控制流劫持漏洞,因此研究人員提出了漏洞去效技術(vulnerability neutralization),如 Windows平臺的EMET[66]和Linux平臺的grsecurity[67]等,阻止攻擊發生。漏洞去效是指通過部署各種防御機制,使得軟件系統中的漏洞無法被攻擊者成功利用的一類防御技術,典型方法包括數據執行保護、控制流完整性保護和代碼多樣化等。研究者將上述方法應用到動態代碼生成程序中,提出了若干改進技術[18-25]。本文根據防御技術的特點,分強制性防御和靈敏變換攻擊面的閃避防御兩類,對新提出的漏洞去效方法進行介紹和分析。

5.1 強制性防御

強制性防御技術(enforcement-based defenses[11])旨在為程序執行過程中可能被攻擊者利用的部分添加防御,從而防止對此部分的利用。數據執行保護是一種典型的強制性防御技術,該技術通過防止數據段被執行或者代碼段被改寫提高了傳統代碼注入攻擊的難度,但是,攻擊者依然可以利用合法的代碼片段進行代碼重用攻擊。另一種典型的強制性防御技術是控制流完整性保護,該技術用于阻止現實攻擊中常見的劫持控制流行為,并且能夠防御代碼重用攻擊??刂屏魍暾杂行У那疤釛l件是代碼完整性,即代碼段不能被篡改,但動態生成代碼位于可寫數據區,因此攻擊者可能利用內存任意寫漏洞破壞動態生成代碼的完整性以繞過控制流完整性保護。在實際中,控制流完整性和數據執行保護通常組合使用以有效防御代碼注入攻擊和代碼重用攻擊。本節分別從數據執行保護和控制流完整性兩個方面綜述針對動態生成代碼的強制性防御新技術。

5.1.1 數據執行保護

數據執行保護是防御代碼注入攻擊的重要防御手段。目前主流的數據執行保護通過禁止內存頁被同時設置為可寫和可執行,阻止攻擊者執行注入數據段的Shellcode或篡改代碼段,通常記為W⊕X。動態代碼生成需要既可寫又可執行的內存空間以存放或修改動態產生的代碼,與現有數據執行保護實現機制無法兼容。因此,研究者提出了基于權限轉換的數據執行保護[19,26]和基于權限分離的數據執行保護[18,20,28]兩類技術,實現強制性防御。

代表性的基于權限轉換W⊕X方法由南京大學陳平等人[19]提出,其原理如圖4所示。該方法在即時編譯器的不同工作階段,對所使用的內存區域設置不同的權限,在生成本地代碼時將代碼緩存設置為可寫不可執行,在開始執行生成代碼前將代碼緩存頁面設置為不可寫和可執行,從而防御 JIT噴射攻擊。因為即時編譯器比代碼執行器更有可能出現控制流劫持漏洞[20],所以該方法有效縮短了攻擊者的攻擊窗口,能夠對當時的野外JIT噴射攻擊實例進行防御且具有可忽略的運行時開銷。

圖4 基于權限轉換的W⊕X方法[18]

與上述時域的數據執行保護不同,另一種空域的數據執行保護方法將動態代碼生成中生成代碼和執行代碼兩個功能放在不同的進程中實現,通過共享內存等內存映射機制共享代碼緩存,并設置不同的訪問權限。我們稱這種方法為基于權限分離的數據執行保護。

Niu等人在 RockJIT[9]的實現中利用虛擬內存和沙盒機制將代碼緩存區和 RockJIT中影子代碼堆(shadow code heap)映射到相同的物理地址并設置不同的權限,如圖5所示。用沙盒機制將原代碼緩存區設置為不可寫可執行,將RockJIT中的影子代碼堆設置為可寫不可執行。即時編譯器生成的代碼經過RockJIT的安全驗證之后寫入影子代碼堆。而執行生成代碼時依然訪問原代碼緩存。這使得即時編譯器在向代碼緩存區寫入代碼時,只能通過RockJIT寫入影子代碼堆且必須通過 RockJIT的控制流完整性檢測。即便攻擊者能夠在即時編譯器的沙盒中任意寫,也不能夠使惡意代碼通過RockJIT的驗證,所以無法執行Shellcode。

圖5 RockJIT架構[22]

另一種基于權限分離數據執行保護的方法是Jaurnig等人[20]提出的 Lobotomy。該方法在 Firefox TraceMonkey即時編譯器中應用,用于防御JIT噴射攻擊。Lobotomy將JIT引擎分為編譯器和執行器兩個進程,并共享代碼緩存區。編譯進程對緩存區可寫不可執行,執行進程對緩存區可寫可執行。通過上述權限分離,使得攻擊者無法利用編譯進程中的控制流劫持漏洞執行注入的代碼。

Song等人在文獻[18]中指出在多線程環境下[53],即便部署了基于權限轉換的 W⊕X[19],攻擊者依然可以進行基于競爭條件(race condition)的攻擊,在攻擊窗口內向代碼緩存區注入 Shellcode。為解決基于權限轉換的數據執行保護在多線程環境下易受競爭情形攻擊的弱點,Song等人提出了一種廣泛適用于即時編譯和動態二進制轉換的安全動態代碼生成框架SDCG(Secure dynamic code generation),可以為可信的軟件動態翻譯器提供健壯的數據執行保護。競爭條件攻擊利用動態翻譯器為一個線程生成代碼時將代碼緩存區設置為可寫的特點,利用另一線程向代碼緩存區注入Shellcode。如圖6所示,線程A在第①次訪問代碼緩存時沒有修改代碼的權限,訪問②表示代碼生成器正在為線程 A生成代碼,訪問③表示線程B也具有了對代碼緩存的寫權限所以可以注入Shellcode,發起訪問④時線程A已經完成所需代碼的生成,故所有線程不再具有對代碼緩存的寫權限,因此代碼注入攻擊的時間窗口長度是t2-t1。這種攻擊利用了內存訪問權限的粒度只到進程級別,同一進程中的線程具有相同的訪問權限。當一個線程生成代碼時,其他線程都會獲得寫代碼緩存的權限,這就方便了代碼注入攻擊。針對這類攻擊,SDCG的核心是一種通過共享內存將相同的內存映射到不同的進程,并為不同進程設置不同的訪問權限的技術。將屬于可信計算基(TCB)的軟件動態翻譯器放到一個專用進程中,其他進程通過遠程過程調用(Remote procedure call)使用其動態生成代碼的功能。在軟件動態翻譯器進程中,代碼緩存區被設置為可寫不可執行,而在其他進程中代碼緩存區被設置為不可寫可執行。上述內存訪問權限設置通過基于代理的沙盒架構(delegation-based sandbox architecture)[54]攔截所有關于虛擬內存管理的系統調用實現以確保權限設置不被篡改。

圖6 使用雙線程進行競爭條件攻擊[18]

5.1.2 控制流完整性

控制流完整性保護[10]已經歷了10年的發展,被證明是一種防御控制流劫持攻擊的有效手段并開始被工業界采用,Visual Studio 2015中已經支持將控制流保護信息寫入PE文件格式中,但是傳統控制流完整性保護方法并不適用于動態代碼生成。為動態代碼生成程序實施控制流完整性保護除了需要為程序本身插裝外,還需要保護代碼緩存區中動態生成的代碼,其難點如圖7所示。傳統控制流完整性采用的靜態分析和插裝的工作方式可以保護動態代碼翻譯器的控制流。使得被保護程序的控制流跳轉時檢查控制流跳轉目標,確??刂屏魈D目標在通過靜態分析確定的控制流圖中。但傳統控制流完整性對于動態生成的可執行代碼則無能為力。動態代碼生成需要在運行時動態生成或修改代碼,這樣的特性與傳統的控制流完整性的靜態分析與改寫的工作模式矛盾,因此控制流完整性安全策略不能直接用于保護JIT編譯等動態代碼生成技術。

圖7 控制流完整性保護動態生成代碼的難點

為了彌補傳統控制流完整性方法的不足,Ansel等人在文獻[21]中提出了NaCl-JIT,一種用基于本地客戶端沙盒(Native Client Sandbox[55],簡稱NaCl)的保護動態代碼生成的方案。NaCl利用基于軟件的錯誤分離實現了沙盒,它通過靜態分析和插裝軟件護衛(software guards)限制對內存的訪問。為保護動態代碼生成,NaCl-JIT擴展了NaCl的編程接口以接管動態添加、修改和刪除代碼等操作。在動態生成代碼時,NaCl-JIT檢查生成代碼滿足以下安全性質: 生成代碼的目標地址在NaCl的可執行內存區域內; 使用標準的NaCl驗證器對生成代碼進行驗證,生成代碼的目標地址必須是沒有被使用過的保留內存空間;并限制控制流的跳轉目標必須是對齊的地址(32字節對齊)。這實際上也通過限制直接與間接分支跳轉目標,實現了對即時編譯器和代碼緩存的一種粗粒度控制流完整性保護。最近的研究證明粗粒度的控制流完整性策略不能有效保護程序的控制流,精心構造的ROP攻擊[56,57]可以繞過粗粒度的控制流完整性保護,NaCl-JIT實現的控制流完整性難以防御這類攻擊。而且NaCl-JIT由于大量使用NOP填充以對齊指令,造成了較高的運行時開銷。

為了彌補傳統控制流完整性方案不能應用于動態生成代碼的不足,Niu等人在文獻[22]中提出了如圖5所示的加固即時編譯的方案: RockJIT,一種將控制流完整性策略應用于即時編譯的方法。RockJIT提出了一種為即時編譯器進行安全加固的架構。為即時編譯器實施基于 MCFI[42]的細粒度的控制流完整性保護并在運行時用粗粒度的控制流完整性保護動態生成的代碼。通過基于軟件錯誤分離的沙盒限制即時編譯器的系統調用,并確保動態生成代碼在正常調用不含敏感系統調用,因此為JIT生成代碼執行粗粒度的控制流完整性就已足夠。RockJIT通過靜態分析即時編譯器的源代碼以產生細粒度的 CFG,為即時編譯器實施細粒度的控制流完整性保護。為用控制流完整性保護動態代碼生成,在向代碼緩存區添加新的JIT生成代碼、修改已有的JIT生成代碼和刪除JIT生成代碼時需要通過RockJIT的驗證以更新控制流策略。為配合RockJIT,對即時編譯器源代碼進行了修改并將其和代碼緩存放在沙盒之中以確保即時編譯器不再具有對JIT生成代碼堆的寫權限,即時編譯器進行代碼生成、修改、刪除時需要通過RockJIT中驗證器的控制流完整性保護驗證,才能被寫到RockJIT內存中的影子代碼堆,從而防止代碼注入攻擊。

5.2 閃避防御

閃避防御(Moving Target Defense)[44]是一種新的防御思想。其核心思想與擬態安全防御(Mimic secu-rity defense)[33]類似,通過對系統配置的靈活變化,變被動為主動,向攻擊者展現一個不斷變化的不可預測的攻擊面,大幅提高攻擊者的利用難度。從攻擊者的角度,動態生成代碼技術的代碼緩存區是一個倍受關注的攻擊點。其可寫可執行的權限設置使其成為惡意代碼注入的入口。動態代碼生成器內在邏輯的確定性使得攻擊者可以通過操縱輸入程序獲得其需要的 Shellcode。閃避防御技術通過移動代碼段和各種隨機化方法為動態生成代碼添加不確定性,將攻擊成功變為一個概率極小的事件。

閃避防御技術的有效性需要針對一個既定的威脅模型進行衡量?,F有的面向動態代碼生成的閃避防御手段通常針對如下的威脅模型: 程序中存在控制流劫持漏洞,攻擊者通過控制輸入代碼產生所需Shellcode或者工具代碼片段。生成代碼多樣化通過為生成代碼添加了不確定性防御上述威脅。

5.2.1 生成代碼多樣化

代碼重用攻擊和代碼注入攻擊依賴于生成代碼的位置和內容具有一定可預測性。研究者提出一系列打破生成代碼可預測性的多樣化方法[23-26]。生成代碼多樣化產生與原生成代碼語義相同但形態不同的代碼,可以使得生成代碼的位置和內容對于攻擊者而言不可預測。從而防止攻擊者通過立即數引入Shellcode或工具代碼片段。

為打破生成代碼的可預測性,北京大學計算機科學技術研究所的韋韜等人在文獻[24]中提出一種生成代碼多樣化技術: INSeRT。針對X86指令格式提出了立即數隨機化(Immediate randomization)、寄存器隨機化(Register randomization)、位移隨機化(Displacement randomization)等技術。立即數隨機化將立即數與一個隨機數異或使得攻擊者不再能控制立即數的值。如指令“mov eax,imm32”就被變換為“mov eax,(imm32^rand_seed);xor eax,rand_seed”。寄存器隨機化將使用各個寄存器的順序隨機化。位移隨機化將函數的參數和與局部變量的位置打亂以隨機化指令中的位移域。與上述方法類似,陳平等人在RIM[23]和 JITsafe[26]中也使用了立即數隨機化和寄存器隨機化的方法。

為應對無法獲得軟件動態翻譯器的源代碼的情況,Homescu等人在文獻[25]提出了一種無需修改動態代碼生成器的生成代碼多樣化方法Librando以加固即時編譯。Librando設置代碼緩存區為不可執行并截取所有在代碼緩存區中開辟可執行區域的調用,將動態生成代碼反編譯為控制流圖,對其中每個基本塊進行多樣化后寫入另一塊可執行內存區域。所有跳轉到原生成代碼的分支都被重定向到多樣化后的生成代碼。其多樣化技術包括了空指令插入(NOP insertion)和常量盲化(Constant blinding)??罩噶畈迦爰夹g在生成代碼中隨機插入各種不影響代碼語義的空指令,從而使得生成代碼的位置和任意兩段生成代碼的相對距離都變得不確定,算法 1是一種空指令插入算法。常量盲化將生成代碼中的立即數加密,使得攻擊者不再能夠控制生成代碼中立即數的值。如圖 8所示,常量盲化是一種在生成代碼中隱藏輸入常量的方法,通過從立即數中減去一個隨機數將每一個產生的立即數加密,并利用LEA指令在運行時對立即數進行解密。

算法1.一種空指令插入算法[25].

圖8 常量盲化實例[25]

6 安全性度量

Merkov等人在文獻[58]中指出,沒有防御手段能實現絕對的安全,攻擊者在有足夠時間、工具、技能和動力的情況下可以攻破任何系統。因此防御手段的目的是提高攻擊者的攻擊成本,同時將在系統中部署防御的開銷保持在應用場景可接受的范圍內。研究者提出了許多加固動態代碼生成技術的防御手段,但是并沒有統一的衡量防御效果的標準,我們結合動態代碼生成技術的特點,首次提出衡量動態代碼生成安全性的模型,并從防御效果和防御成本兩方面衡量動態生成代碼系統的安全性。

6.1 防御效果

防御效果衡量防御技術提高攻擊難度的程度,數據執行保護和控制流完整性等強制性防御手段旨在防御攻擊中的某個必要步驟,而生成代碼多樣化等閃避防御旨在提供一個在攻擊者視角中變幻莫測的攻擊面。

6.1.1 衡量強制性防御效果

強制性防御使特定攻擊方式或步驟無效,例如:細粒度的控制流完整性保護可以防止控制流跳轉到控制流圖外的地址從而防止ROP攻擊[22]; 基于權限轉換的數據執行保護縮減了攻擊者注入和執行惡意代碼的攻擊窗口,所以能夠提高代碼注入攻擊的難度[19],迫使攻擊者利用多線程環境下的競爭條件攻擊[18]。發現一類新的攻擊的難度大于應用已知攻擊。迫使攻擊者發現一類新的攻擊方式能大幅提高攻擊成本。我們衡量了強制性防御手段對代碼注入攻擊和代碼重用攻擊的影響,表 1對面向動態生成代碼的典型強制性防御技術進行了對比分析。根據防范代碼注入和代碼重用兩種攻擊的機制,分析其存在的主要威脅向量。

防御代碼重用攻擊的核心手段是保護控制流完整性。衡量控制流完整性保護有效性的兩個指標是其移除 ROP工具代碼片段的數量和移除間接分支(Indirect branch)的數量。利用上述指標,Niu等人在對RockJIT[22]的安全性進行了如下衡量: 1)利用工具代碼片段查找工具在用細粒度控制流完整性保護加固后的V8即時編譯器中查找工具代碼片段。其結果顯示RockJIT可以移除V8即時編譯器中98.5%的ROP-工具代碼片段; 2)統計RockJIT為V8即時編譯器生成的控制流圖中允許的間接分支跳轉的數量,并與 NaCl-JIT為V8進行粗粒度的控制流完整性保護后所允許的間接分支跳轉的數量進行對比,結果表明,RockJIT比NaCl-JIT多移除了99.97%的間接分支跳轉。

6.1.2 衡量閃避防御效果

閃避防御是一種變化攻擊面的防御手段。最近研究者提出了一系列評價閃避防御效果的方法[59-61]。Hobson等人在文獻[59]中提出了衡量閃避防御有效性的三個維度: 覆蓋面(coverage)、不可預測性(unpredictability)和及時性(timeliness)。由于三者中任何一方面的不足都可能為攻擊者提供一部分確定的攻擊面,因此閃避防御手段要滿足以下三個條件才能顯著提高攻擊成本: 1)覆蓋所有可能被利用的攻擊面; 2)具有足夠高的熵值; 3)能及時變換不給攻擊者留下足夠長的攻擊窗口以進行基于信息泄露的攻擊。我們參考文獻[59]的評價方式,在表2對現有的針對動態代碼生成的閃避防御有效性進行了衡量,從以上三個方面列出了其不足之處。

對于生成代碼多樣化這類閃避防御,其覆蓋面只包含生成代碼,并未提高對系統其他部分的攻擊難度。Athanasakis等人在文獻[15]中認為現有代碼多樣化技術的最大缺陷是及時性的不足: 利用了信息泄露漏洞的代碼重用攻擊可以在運行時讀取生成代碼并利用其構建ROP攻擊,從而完全繞過代碼多樣化防御。Athanasakis用上述方法成功攻擊了Firefox和Internet Explorer兩款常用瀏覽器。

表1 強制性防御有效性衡量

表2 閃避防御有效性的衡量

6.2 防御成本

除了提高攻擊成本的能力,衡量面向動態生成代碼的防御手段的實用性還需要考慮系統性能損失、實現復雜度、是否需要源代碼等因素。表 3從保護對象、系統性能損失、代碼修改量和是否需要源代碼四個方面對研究者提出的各種防御技術的防御成本進行對比分析。

系統性能損失是動態代碼生成場景下最重要的防御成本因素。動態代碼生成系統的可用性不應被防御技術損害。特別是更快、更高效是在瀏覽器,Flash Player等程序中應用動態代碼生成的主要目的,因此動態代碼生成安全加固措施應當具有較低的運行時開銷。如果運行時時間開銷超過5%~10%,工業界就不愿犧牲性能而采取這樣的防御措施[6]。

代碼修改行數體現了防御機制的復雜性。復雜的安全機制需要投入更多資源實現,同時復雜性本身也會帶來新的缺陷和漏洞。黑盒的防御方式(如Librando)不需要對保護對象的源代碼進行修改。

源代碼需求對部署防御的可行性有一定影響: 1)依賴源代碼的防御手段在不開源的動態代碼生成器上就不適用; 2)在新的威脅出現時,不需要修改程序源代碼的防御措施(例如Librando)可以迅速給系統打補丁而無需等待廠商推出安全補丁。

7 技術展望

攻擊動態生成代碼系統的難度隨著防御機制發展不斷增加,需要針對系統防御機制研究攻擊技術。

防御技術的有效性和開銷依然存在矛盾(例如:細粒度的控制流完整性具有較高的運行時開銷),所以有必要研究運行時開銷更少且不削弱防御有效性的防御技術。

與細粒度的控制流完整性保護相比,Kuznetsov在 2014年提出的代碼指針完整性(Code pointer integrity,簡稱 CPI)[62]是一種同樣有效,并且運行時開銷更小的強制性防御技術,其實現已經開源。但將CPI應用于動態代碼生成還存在著很大的挑戰,因此仍然需要對適用于動態代碼生成的代碼指針完整性進行深入的研究。

表3 防御成本衡量

閃避防御及其理論仍然處于起步階段,依然有許多問題等待進一步研究解決。例如: 面向動態生成代碼的多樣性防御技術不能有效防御內存泄露攻擊[38,40]盡管最近研究者們提出了一些應對信息泄露攻擊的防御技術[63,64],但還并沒有被工業界采用。而且,將此類技術應用于動態代碼生成存在著新的挑戰。

對于動態代碼生成系統源代碼不可得的情況,依然缺少低開銷的黑盒防御技術。因此有必要對高效的黑盒防御技術展開研究。

沒有一種防御手段能夠一勞永逸地解決所有安全問題。為保護動態代碼生成,需要將不同的防御手段結合起來。組合防御的優點在于防御手段可以相互補充彼此的弱點。強制性防御和閃避防御的巧妙組合將可能增加系統的安全性[63,64]。理想的分層布置防御應當使得攻擊成本能夠隨防御層數增加而指數性增長[65],而實際中防御手段的組合只能線性提高攻擊難度,因此更有效的組合防御方法還有待研究。

8 總結

動態代碼生成在運行時生成、修改可執行代碼的特性作為提高動態語言執行速度和實現虛擬化的關鍵技術,也可以被攻擊者利用實現任意代碼執行或高級可持續威脅。如今動態代碼生成的應用場景幾乎無處不在,其安全性問題尤為重要。本文對面向動態代碼生成的攻擊和防御技術進行了綜述。介紹了動態生成代碼的數據平面和代碼平面耦合導致的安全問題,針對動態代碼生成的代碼注入攻擊和代碼重用攻擊的特點,分析了對應防御方法的實現方法,并對防御效果進行了衡量。

目前,工業界對于動態生成代碼防御并無成熟的解決方案,其攻防關鍵技術(例如: 高級ROP攻擊與防御、軟件多樣化和閃避防御)的研究狀態還處在“魔高一尺,道高一丈”的對抗發展階段。安全性和防御成本依然是需要權衡的矛盾,有效且低成本的防御技術是研究的重點。

致 謝

在此向對本文的工作給予建議的龔曉銳老師和給我們提出建議的評審專家 表示感謝。

[1] “V8 JavaScript Engine,” Google,https://developers.google.com/ v8/design.

[2] “SpiderMonkey 1.8.8,”Mozilla,2014.

[3] “Java Hotspot,” Oracle,http://www.oracle.com/technetwork/java/ whitepaper-135217.html.

[4] Facebook. HHVM. http://hhvm.com/.

[5] F. Bellard,“QEMU,a Fast and Portable Dynamic Translator,” in Proceedings of the annual conference on USENIX Annual Technical Conference(ATEC’05),pp. 41–46,2005.

[6] L. Szekeres,M. Payer,T. Wei and D. Song,“SoK: Eternal war in memory,” in Proc. IEEE Symp. Security and Privacy(SP’13),pp. 48-62,2013.

[7] One A. “Smashing the stack for fun and profit,” Phrack magazine,vol. 7,no. 49,pp. 14-16,1996.

[8] R. Roemer,E. Buchanan,H. Shacham,and S. Savage,“Return-oriented programming: Systems,languages,and applications,”In ACM Transactions on Information and System Security (TISSEC),vol. 15,no. 1,pp. 2,2012.

[9] T. Bletsch,“Code-reuse attacks: new frontiers and defenses [Ph.D. dissertation],” North Carolina State University,2011.

[10] M. Abadi,M. Budiu,ú. Erlingsson,and J. Ligatti,“Control-flow integrity principles,implementations,and applications,” In ACM Transactions on Information System Security (TISSEC),vol. 13,no. 4,2009.

[11] P. Larsen,A. Homescu,S. Brunthaler and M. Franz,“SoK: Automated Software Diversity,” In Proc. IEEE Symp. Security and Privacy(SP’14),pp. 276-291,2014.

[12] D. Blazakis,“Interpreter exploitation,” In Proceedings of the 4th USENIX conference on Offensive technologies,2010.

[13] C. Rohlf and Y. Ivnitskiy. “Attacking clientside JIT compilers,”Black Hat USA,2011.

[14] P. Pie,“chrome on Android exploit writeup,” Mobile Pwn2Own,Autumn,2013.

[15] Athanasakis M,Athanasopoulos E,Polychronakis M,et al. “The Devil is in the Constants: Bypassing Defenses in Browser JIT Engines,” In Proceedings of the 2015 Network and Distributed System Security (NDSS) Symposium. 2015.

[16] “Flash JIT – Spraying info leak gadgets,” F. J. Serna,http:// zhodiac.hispahack.com/my-stuff/security/Flash_Jit_InfoLeak_Gadgets .pdf,July,2013.

[17] “Writing JIT-spray shellcode for fun and profit,” A. Sintsov,https://packetstormsecurity.com/files/download/ 86975/Writing-JIT-Spray-Shellcode.pdf,2010.

[18] C. Song,C. Zhang,T. Wang,W. Lee and D. Melski,“Exploiting and Protecting Dynamic Code Generation,” In Proceedings of the 2015 Network and Distributed System Security (NDSS) Symposium,2015.

[19] P. Chen,Y. Fang,B. Mao and X. Li,“JITDefender: A defense against JIT spraying attacks.” In Future Challenges in Security and Privacy for Academia and Industry,Springer Berlin Heidelberg,pp. 142-153,2011.

[20] M. Jauernig,M. Neugschwandtner,C. Platzer and P.M. Comparetti,“Lobotomy: An Architecture for JIT Spraying Mitigation,” In Proceedings of the Ninth International Conference on Availability,Reliability and Security(ARES),pp. 50-58,2014.

[21] J. Ansel,P. Marchenko,ú Erlingsson,E. Taylor,B. Chen,D. Sehr,C.L. Biffle and B. Yee,“Language-independent sandboxing of just-in-time compilation and self-modifying code,” In ACM SIGPLAN Notices,vol. 46,no. 6,pp. 355-366,2011.

[22] B. Niu,G. Tan,“RockJIT: Securing just-in-time compilation using modular control-flow integrity,” In Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security(CCS’14),pp. 1317-1328,2014.

[23] R. Wu,P. Chen,B. Mao and L. Xie. “RIM: A Method to Defend from JIT Spraying Attack,” In Proceedings of the Seventh International Conference on Availability,Reliability and Security(ARES),pp. 143-148,2012.

[24] T. Wei,T. Wang,L. Duan and J. Luo. “INSeRT: Protect dynamic code generation against spraying,” In Proceedings of InternationalConference on Information Science and Technology (ICIST),pp. 323-328,2011.

[25] A. Homescu,S. Brunthaler,P. Larsen and M. Franz,“librando: Transparent code randomization for just-in-time compilers,” In Proceedings of the 2013 ACM SIGSAC conference on Computer and Communications Security(CCS’13),pp. 993-1004,2013.

[26] P. Chen,R. Wu,B. Mao,“JITSafe: a framework against Just-in-time spraying attacks,” In IET Information Security, vol.7 no.4 pp. 283-292,2013.

[27] W. De Groef,N. Nikiforakis,Y. Younan,and F. Piessens. “Jitsec: Just-in-time security for code injection attacks,” In Proceedings of the Conference on Security and Privacy in Wireless and Mobile Networks,pp. 1-15,2010.

[28] C. Zhang,M. Niknami,K. Chen,C. Song,Z. C and D. Song,“JITScope: Protecting web users from control-flow hijacking attacks,” In Proceedings of 2015 IEEE Conference on Computer Communications (INFOCOM),pp. 567-575,2015.

[29] J. Li,X. Ma and C. Zhu,“Dynamic Binary Translation and Optimization,” Journal of Computer Research and Development,vol. 44,no. 1,pp.161-168,2007. (李劍慧,馬湘寧,朱傳琪,“動態二進制翻譯與優化技術研究”,計算機研究與發展,2007,44(1): 161-168.)

[30] T. Bai,X. Feng,C,Wu and Z. Zhang,“Optimizing Dynamic Binary Translator in DigitalBridge,” Journal of Computer Engineering,vol. 31,no.10,pp. 103-105,2005. (白童心,馮曉兵,武成崗,張兆慶,“優化動態二進制翻譯器DigitalBridge”,計算機工程,2005,31(10).)

[31] C.K. Luk,R. Cohn,R. Muth,H. Ratil,A. Klauser,G. Lowney,S. Wallace,V.J. Reddi and K. Hazelwood,“Pin: building customized program analysis tools with dynamic instrumentation,” In ACM Sigplan Notices,vol. 40,no. 6,pp. 190-200,2005.

[32] E.G. Barrantes,D.H. Ackley,T.S. Palmer,D. Stefanovic and D.D. Zovi,“Randomized instruction set emulation to disrupt binary code injection attacks,” In Proceedings of the 10th ACM conference on Computer and communications security,pp. 281-289,2003.

[33] J. Wu,“Meaning and Vision of Mimic Computing and Mimic Security Defense,” in Telecommunications Science,vol. 1,no.7,pp. 1-7,2014. (鄔江興,“專題導讀--擬態計算與擬態安全防御的原意和愿景”,電信科學,2014,30(7): 1-7.)

[34] R. Skowyra,K. Casteel,H. Okhravi,N. Zeldovich and W. Streilein,“Systematic Analysis of Defenses against Return-Oriented Programming,” In Research in Attacks,Intrusions,and Defenses,Springer Berlin Heidelberg,pp. 82-102,2013.

[35] H. Shacham,M. Page,B. Pfaff,E. Goh,N. Modadugu and D. Boneh. “On the effectiveness of address-space randomization,” In Proceedings of the 11thACM conference on Computer and communications security(CCS’04),pp. 298-307,2004.

[36] Strackx R,Younan Y,Philippaerts P,F. Piessens,S. Lachmund and T. Walter. “Breaking the memory secrecy assumption,” In Proceedings of the Second European Workshop on System Security(EUROSEC’09),pp. 1-8,2009.

[37] G.F. Roglia,L. Martignoni,R. Paleari and D. Bruschi. “Surgically returning to randomized lib (c),” in Proceedings of the 25th Annual Computer Security Applications Conference(ACSAC’09),pp. 60-69,2009.

[38] A. Bittau,A. Belay,A. Mashtizadeh and D. Boneh,“Hacking blind,” In Proceedings of the 35thIEEE Symposium on Security and Privacy(SP’14),pp. 227-242,2014.

[39] F.J. Serna,“The info leak era on software exploitation,” Black Hat USA,2012.

[40] K.Z. Snow,F. Monrose,L. Davi,A. Dmitrienko,C. Liebchen and A. Sadeghi,“Just-in-time code reuse: On the effectiveness of fine-grained address space layout randomization,” In Proceedings of the 34thIEEE Symposium on Security and Privacy(SP’13),pp. 574-588,2013.

[41] C. Zhang,T. Wei,Z. Chen,L. Duan,L. Szekeres,S. McCamant,D. Song and W. Zou,“Practical control flow integrity and randomization for binary executables,” In Proceedings of the 34thIEEE Symposium on Security and Privacy(SP’13),pp. 559-573,2013.

[42] B. Niu,G. Tan,“Modular control-flow integrity,” In Proceedings of the 35th ACM SIGPLAN Conference on Programming Language Design and Implementation(PLDI’14),pp. 577-587,2014.

[43] M. Zhang M,R. Sekar,“Control Flow Integrity for COTS Binaries,” In Proceeding of the 22nd USENIX Security Symposium(SEC’13),pp. 337-352,2013.

[44] S. Jajodia,A.K. Ghosh,V. Swarup,C. Wang and X.S. Wang,“Moving Target Defense,” Springer,2011.

[45] “Safari JS JITed Shellcode,” A. Sintsov,http://www.exploit-db. com/exploits/14221/ ,2010.

[46] M. Egele,P. Wurzinger,C. Kruegel and E. Kirda,“Defending browsers against drive-by downloads: Mitigating heap-spraying code injection attacks,” In Detection of Intrusions and Malware,and Vulnerability Assessment. Springer Berlin Heidelberg,pp. 88-106,2009.

[47] C. Rohlf,Y. Ivnitskiy,“The security challenges of client-side just-in-time engines,” In IEEE Security & Privacy,vol. 10,no. 2,pp. 84-86,2012.

[48] K. Onarlioglu,L. Bilge,A. Lanzi,D. Balzarotti and E. Kirda,“G-Free: defeating return-oriented programming through gadgetless binaries,” In Proceedings of the 26thAnnual Computer Security Applications Conference(ACSAC’10),pp. 49-58,2010.

[49] C. Zhang,T. Wang,T. Wei,Y. Chen and W. Zou,“IntPatch: Auto-matically fix integer-overflow-to-buffer- overflow vulnerability at compile-time,” InProceedings of the 15thEuropean conference on Research in computer security(ESORICS’10),pp. 71-86,2010.

[50] J. Ye,C. Zhang and X. Han,“POSTER: UAFChecker: Scalable Static Detection of Use-After-Free Vulnerabilities,” InProceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security(CCS’14),pp. 1529-1531,2014.

[51] M. Sutton,A. Greene and P. Amini,“Fuzzing: brute force vulnerability discovery,”Pearson Education,2007.

[52] T. Wang,T. Wei,G. Gu and W. Zou,“TaintScope: A checksum-aware directed fuzzing tool for automatic software vulnerability detection,” InProceedings of the 31thIEEE Symposium on Security and Privacy(SP’10),pp. 497-512,2010.

[53] “Web Workers,” W3C,http://www.w3.org/TR/workers/,2012.

[54] T. Garfinkel,B. Pfaff,M. Rosenblum,“Ostia: A Delegating Architecture for Secure System Call Interposition,” InProceedings of the 2004 Network and Distributed System Security (NDSS) Symposium,2004.

[55] B. Yee,D. Sehr,G. Dardyk,J.B. Chen,R. Myth,T. Ormandy,S. Okasaka,N. Narula and N. Fullagar. “Native client: A sandbox for portable,untrusted x86 native code,” InProceedings of the 30thIEEE Symposium on Security and Privacy(SP’09),pp. 79-93,2009.

[56] N. Carlini,D. Wagner,“Rop is still dangerous: Breaking modern defenses,” InProceeding of the 23rdUSENIX Security Symposium(SEC’14),pp. 385-399,2014.

[57] E. G?ktas,E. Athanasopoulos,H. Bos and G. Portokalidis,“Out of control: Overcoming control-flow integrity,” InProceedings of the 35thIEEE Symposium on Security and Privacy(SP’14),pp. 575-589,2014.

[58] Stamp M,“Information security: principles and practice,”JohnWiley & Sons,2011.

[59] T. Hobson,H. Okhravi,D. Bigelow,R. Rudd and W. Streilein,“On the Challenges of Effective Movement,” InProceedings of the First ACM Workshop on Moving Target Defense(MTD 2014),pp. 41-50,2014.

[60] J. Xu,P. Guo,M. Zhao,R.F. Erbacher,M. Zhu and P. Liu,“Comparing Different Moving Target Defense Techniques,” InProceedings of the First ACM Workshop on Moving Target Defense(MTD 2014),pp. 97-107,2014.

[61] G. Cybenko and J. Hughes,“No free lunch in cyber security,” InProceedings of the First ACM Workshop on Moving Target Defense(MTD 2014),pp. 1-12,2014.

[62] V. Kuznetsov,L. Szekeres,M. Payer,G. Candea,R. Sekar and D. Song,“Code Pointer Integrity,” inProceedings of the 11th USENIX conference on Operating Systems Design and Implementation(OSDI’14),pp. 147-163,2014.

[63] L. Davi,C. Liebchen,A. Sadeghi,K.Z. Snow and F. Monrose,“Isomeron: Code randomization resilient to (just-in-time) return-oriented programming,” InProceedings of the 22ndNetwork and Distributed System Security (NDSS) Symposium. 2015.

[64] V. Mohan and P. Larsen,S. Brunthaler,K. Hamlen and M. Franz,“Opaque control-flow integrity,” InProceedings of the 22ndNetwork and Distributed System Security (NDSS) Symposium,2015.

[65] S.M. Bellovin,“On the brittleness of software and the infeasibility of security metrics,” InIEEE Security & Privacy,vol. 4,no. 4,pp. 96-96,2006.

[66] “The Enhanced Mitigation Experience Toolkit,” Microsoft,https:// support.microsoft.com/en-us/kb/2458544.

[67] “grsecurity,” grsecurity,http://grsecurity.net/features.php.

[68] “Usage of JavaScript for websites,” W3techs,http://w3techs.com/ technologies/details/cp-JavaScript/all/all,2014.

Survey on Attacking and Defending Technologies of Dynamic Code Generation

WU Wei, HUO Wei, ZOU Wei
Institute of Information Engineering,Chinese Academy of Sciences,Beijing 100093,China Key Laboratory of Network Assessment Technology,Chinese Academy of Sciences,Beijing 100195,China Beijing Key Laboratory of Network Security and Protection Technology,Beijing 100195,China University of Chinese Academy of Sciences,Beijing 100049,China

Dynamic code generation (DCG) is a technique widely deployed in important daily software such as web browser and Flash player. The threat posed by dynamic code generation has gained more and more attention in recent years because it provides new opportunities for control flow hijacking attack. In this paper,we summarize new control flow hijack attacks against DCG based on the paradigm that DCG generates executable code according to input program on-the-fly in two categories: code injection attack and code reuse attack. We systematically present the defense mechanisms for DCG in two categories: enforcement-based defense and moving target defense. We propose a model to evaluate existing defense technology based on defense benefit and defense cost. We also analyze the developing trend of attacking/defending technologies on dynamic code generation and give some suggestions on future research.

software security; JIT compilation; dynamic binary translation; control flow hijack; defense mechanism

吳煒 2014年在中國科學技術大學信息安全專業獲得學士學位?,F在中國科學院信息工程研究所攻讀博士學位。研究領域為網絡與軟件安全。研究興趣包括: 漏洞挖掘與利用、程序分析及網絡對抗技術。Email: wuwei@iie.ac.cn

霍瑋 博士,副研究員。2010年在中國科學院計算技術研究所獲得博士學位。主要研究方向為軟件漏洞挖掘和安全評測、基于大數據的軟件安全分析、智能終端系統及應用安全分析等。Email: huowei@iie. ac.cn

鄒維 研究員、博士生導師?,F任中國科學院信息工程研究所副所長。中國科學院“百人計劃”人選,中國計算機學會優秀博士論文指導教師。研究領域包括網絡與軟件安全、攻防對抗理論與技術等。Email: zouwei@iie.ac.cn

TP 309.1 DOI號 10.19363/j.cnki.cn10-1380/tn.2016.04.005

霍瑋,博士,副研究員,Email: huowei@iie.ac.cn。

本課題得到中國科學院百人計劃[人字(2013)46號]、北京市科委重點項目課題“行業場景構建與漏洞分析關鍵技術研究”(D161100001216001)和中國科學院戰略性先導科技專項“重點行業應用系統信息安防關鍵技術研究”(XDA06010703)資助。

2016-06-15; 修改日期: 2016-08-03; 定稿日期: 2016-10-10

猜你喜歡
控制流編譯器攻擊者
機動能力受限的目標-攻擊-防御定性微分對策
抵御控制流分析的Python 程序混淆算法
基于返回地址簽名的控制流攻擊檢測方法
基于相異編譯器的安全計算機平臺交叉編譯環境設計
基于控制流的盒圖動態建模與測試
運行速度大突破華為《方舟編譯器》詳解
基于Petri網數據流約束下的業務流程變化域分析
正面迎接批判
有限次重復博弈下的網絡攻擊行為研究
通用NC代碼編譯器的設計與實現
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合