亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        面向進(jìn)程控制流劫持攻擊的擬態(tài)防御方法

        2021-02-28 04:45:40潘傳幸張錚馬博林姚遠(yuǎn)季新生
        通信學(xué)報(bào) 2021年1期
        關(guān)鍵詞:控制流擬態(tài)調(diào)用

        潘傳幸,張錚,馬博林,姚遠(yuǎn),季新生

        (1.數(shù)學(xué)工程與先進(jìn)計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室,河南 鄭州 450001;2.國(guó)家數(shù)字交換系統(tǒng)工程技術(shù)研究中心,河南 鄭州 450002)

        1 引言

        進(jìn)程控制流劫持是一種常見的攻擊手段,其通常利用緩沖區(qū)溢出[1]等二進(jìn)制漏洞篡改進(jìn)程的控制流,從而進(jìn)行程序正常功能之外的惡意操作[2]。控制流劫持攻擊的危害非常大,控制流劫持的目的往往是獲取目標(biāo)機(jī)器的控制權(quán),然后提取系統(tǒng)特權(quán)對(duì)目標(biāo)機(jī)器實(shí)現(xiàn)全面控制。根據(jù) CWE Top25[3]的排名,內(nèi)存緩沖區(qū)溢出仍然是最危險(xiǎn)的軟件錯(cuò)誤。

        控制流劫持攻擊可以分為代碼注入和代碼重用兩大類[2]。代碼注入類攻擊利用程序本身的輸入功能向進(jìn)程的虛擬地址空間注入惡意代碼,然后通過緩沖區(qū)溢出等方式覆蓋返回地址,實(shí)現(xiàn)控制流劫持。代碼重用類攻擊不需要注入代碼,而是利用程序自身的代碼片段完成攻擊。為了防御進(jìn)程控制流劫持,研究人員和工程技術(shù)人員提出了許多防御手段。早期,控制流劫持攻擊通過代碼注入實(shí)現(xiàn),為了防御代碼注入攻擊,研究人員提出了數(shù)據(jù)執(zhí)行保護(hù)(DEP,data execution prevention)、棧不可執(zhí)行[4]、棧監(jiān)控[5]、地址空間布局隨機(jī)化(ASLR,address space layout randomization)[6]等方法。然而,這些方法卻無法防御面向返回編程(ROP,return oriented programming)[7]等基于代碼重用的控制流劫持[8-11]??刂屏魍暾裕–FI,control-flow integrity)[12-13]是防御代碼重用較有效的方法,其通過對(duì)二進(jìn)制可執(zhí)行程序進(jìn)行靜態(tài)分析,建立可信的控制流圖,在執(zhí)行時(shí)限制控制流轉(zhuǎn)移。但是,對(duì)于信息泄露和面向數(shù)據(jù)編程(DOP,data oriented programming)[14]攻擊,即使細(xì)粒度的CFI 也難以起到防御作用。

        擬態(tài)防御是我國(guó)科研團(tuán)隊(duì)提出的針對(duì)未知漏洞后門的主動(dòng)防御思想[15-16],核心是動(dòng)態(tài)異構(gòu)冗余(DHR,dynamic heterogeneous redundancy)構(gòu)造[17],如圖1 所示。各個(gè)執(zhí)行體之間功能等價(jià),但受到攻擊后的行為表現(xiàn)各異,表決器通過對(duì)比在線執(zhí)行體集中各執(zhí)行體之間的行為是否一致來判斷是否遭到攻擊。一旦表決器判定為遭到攻擊,則調(diào)用動(dòng)態(tài)選擇算法從離線的異構(gòu)構(gòu)件集合中挑選合適的構(gòu)件對(duì)在線執(zhí)行體進(jìn)行替換,這個(gè)過程稱為擬態(tài)變換。輸入代理與表決器中間的部分稱為擬態(tài)界。擬態(tài)界的DHR 構(gòu)造和表決機(jī)制是擬態(tài)防御系統(tǒng)內(nèi)生地具備安全能力的根源[15,18-19]。

        為了防御基于二進(jìn)制漏洞的進(jìn)程控制流劫持攻擊,本文受擬態(tài)防御思想的啟發(fā),采用動(dòng)態(tài)異構(gòu)冗余的方式執(zhí)行程序。在異構(gòu)冗余的基礎(chǔ)上,結(jié)合表決機(jī)制,能夠有效發(fā)現(xiàn)攻擊行為,然后阻斷攻擊。

        本文的主要研究工作及貢獻(xiàn)如下。

        1) 梳理了進(jìn)程控制流劫持攻擊的過程,從漏洞利用過程的角度建立了二進(jìn)制漏洞威脅模型,并依據(jù)此模型提出了針對(duì)關(guān)鍵利用環(huán)節(jié)的“要塞”防御。

        2) 提出了進(jìn)程的擬態(tài)執(zhí)行模型,為防御基于二進(jìn)制漏洞的進(jìn)程控制流劫持攻擊提供了一種主動(dòng)防御式的解決方案。

        圖1 擬態(tài)防御系統(tǒng)DHR 構(gòu)造

        3) 實(shí)現(xiàn)了一個(gè)擬態(tài)執(zhí)行的原型系統(tǒng)——Mimic-Box,并進(jìn)行了有效性驗(yàn)證和性能測(cè)試。經(jīng)測(cè)試,MimicBox 能夠防御絕大多數(shù)已知的基于二進(jìn)制漏洞的進(jìn)程控制流劫持攻擊,并且導(dǎo)致的額外性能開銷不超過13%。

        2 二進(jìn)制漏洞威脅模型

        常見的控制流劫持技術(shù)往往是利用堆和棧開展攻擊。在利用棧的攻擊技術(shù)中[20],棧緩沖區(qū)溢出攻擊占了絕大部分。當(dāng)棧緩沖區(qū)溢出,即程序接收的用戶輸入超過開發(fā)者所分配的緩沖區(qū)大小時(shí),可能會(huì)破壞棧中所存儲(chǔ)的關(guān)鍵數(shù)據(jù),從而引發(fā)錯(cuò)誤。由于棧中存放了函數(shù)的返回地址,因此在沒有保護(hù)的情況下,一旦攻擊者利用棧溢出,使用其他地址覆蓋了原來的函數(shù)返回地址,那么當(dāng)函數(shù)執(zhí)行完成進(jìn)行返回時(shí),就會(huì)去執(zhí)行攻擊者所構(gòu)造的地址處的代碼,攻擊者就可以達(dá)到控制流劫持的目的。在針對(duì)堆的攻擊技術(shù)[21]中,攻擊者首先利用申請(qǐng)和釋放堆塊時(shí)涉及的堆分配機(jī)制進(jìn)行堆布局,然后非正常地申請(qǐng)和釋放堆塊,獲得一個(gè)指向關(guān)鍵內(nèi)存位置處的指針,最后使用程序的輸入功能將其重寫為其他代碼段的地址,從而實(shí)現(xiàn)程序的控制流劫持。

        本文分析了幾種常見的面向Linux 平臺(tái)的控制流劫持方式,并以此為基礎(chǔ)進(jìn)行了二進(jìn)制漏洞威脅建模,威脅模型如圖2 所示。模型遵循的前提與假設(shè)如下。

        1) 目標(biāo)機(jī)器裝有Linux 操作系統(tǒng)。

        2) 攻擊者擁有目標(biāo)程序的可執(zhí)行文件,能夠?qū)δ繕?biāo)程序進(jìn)行靜態(tài)分析。

        圖2 基于二進(jìn)制漏洞的控制流劫持攻擊威脅模型

        3) 目標(biāo)程序是個(gè)應(yīng)用軟件,并且包含可供控制流劫持使用的二進(jìn)制漏洞。

        4) 基于二進(jìn)制漏洞的控制流劫持,目的在于獲取目標(biāo)機(jī)器控制權(quán)和shell。

        5) 將可以獲取 shell 的代碼片段統(tǒng)一記為one_gadget。

        在對(duì)棧溢出漏洞進(jìn)行利用時(shí),攻擊者首先采取靜態(tài)分析的方式獲取ROP 所需的gadget 的地址信息,再以ROP 技術(shù)作為跳板,實(shí)現(xiàn)程序的信息泄露,獲取必要的內(nèi)存信息,然后以此為基礎(chǔ),向棧中存放返回地址的內(nèi)存處寫入one_gadget 地址,從而獲取shell,在某些特殊情況下,攻擊者也可以使用字節(jié)爆破的方式在不獲得信息的情況下向棧內(nèi)注入惡意的地址。

        在程序本身擁有可以實(shí)現(xiàn)控制流劫持的代碼片段(如system、execve 函數(shù))的情況下,當(dāng)目標(biāo)程序被編譯成地址無關(guān)可執(zhí)行(PIE,position-independent executable)程序時(shí),攻擊者可以直接將這些代碼片段作為one_gadget,然后將棧中的返回地址覆蓋為這些代碼片段的地址,路徑1—2—22—29—36 表示一個(gè)完整的ret2text 利用流程;當(dāng)目標(biāo)程序不是PIE 程序時(shí),攻擊者將首先通過一個(gè)信息泄露漏洞,如格式化字符串漏洞,獲取并計(jì)算出想要跳轉(zhuǎn)到的one_gadget 的地址,然后將棧中的返回地址覆蓋為one_gadget 的地址,路徑4—2—22—29—36 表示針對(duì)PIE 程序的ret2text 利用流程。

        當(dāng)程序本身并不擁有可以實(shí)現(xiàn)控制流劫持的代碼片段時(shí),攻擊者往往將libc 系統(tǒng)共享庫中的system 函數(shù)作為one_gadget,使“/bin/sh”作為system函數(shù)的參數(shù)即可。攻擊者首先需要獲取gadget 地址信息,利用ROP 等代碼重用技術(shù)實(shí)現(xiàn)跳轉(zhuǎn)完成信息泄露,然后獲取libc 庫中某個(gè)函數(shù)的地址信息,通過偏移計(jì)算獲得one_gadget 的地址,最后再進(jìn)行多次ROP,把got 表中的某項(xiàng)篡改為one_gadget 的地址,或者直接跳轉(zhuǎn)到libc 中的one_gadget。路徑1—3—5—23—30—36 表示一個(gè)完整的ret2libc 利用流程。

        路徑1—2—25—32—36 表示一個(gè)完整的ret2syscall 攻擊過程,攻擊者使用ROP 技術(shù)并在棧內(nèi)注入syscall 指令地址,然后劫持控制流獲取shell。

        路徑6—7—12—17—26—33—36 表示一個(gè)完整的釋放后使用(UAF,use—after—free)漏洞利用流程。攻擊者首先進(jìn)行堆布局,對(duì)堆進(jìn)行多次非正常申請(qǐng)與釋放,獲得一個(gè)指向got 表中某表項(xiàng)的指針;然后攻擊者利用程序自帶的修改功能(如記事本程序中的編輯功能),把got 表某項(xiàng)的指針指向的內(nèi)容修改為one_gadget 地址,從而完成程序的控制流劫持,獲得shell。

        路徑6—8—13—17—27—34—36、6—9— 14—17—27—34—36、6—10—15—17—27—34—36、6—11—16—17—27—34—36 分別表示攻擊者根據(jù)glibc 管理堆的特性,采取不同的攻擊方式的堆利用流程。其本質(zhì)都是不斷地構(gòu)造特殊的堆并多次非正常地申請(qǐng)與釋放堆,獲得一個(gè)可以修改內(nèi)容的指針,再使用程序自帶的地址寫功能將關(guān)鍵內(nèi)存位置,如將got 表中的表項(xiàng)或malloc_hook 中的內(nèi)容覆蓋為one_gadget 地址,從而達(dá)到控制流劫持獲取shell 的目的。

        無論哪條漏洞利用路徑,攻擊者都無法擺脫對(duì)虛擬內(nèi)存地址的依賴。在大部分情況下,攻擊者首先通過信息泄露獲取one_gadget 的地址信息,然后向程序傳入one_gadget 地址,在其他情況下,攻擊者可以跳過信息泄露這一步驟進(jìn)行漏洞利用,但是仍然需要向程序注入正確的one_gadget 地址。

        3 擬態(tài)執(zhí)行模型

        要想實(shí)現(xiàn)一次完整的攻擊過程,必須要知道one_gadget 的虛擬內(nèi)存地址?;谶@一發(fā)現(xiàn),本文認(rèn)為防御的關(guān)鍵在于兩點(diǎn),一是不泄露one_gadget的地址,二是使泄露的one_gadget 地址失效。因此,為了防御控制流劫持,本文提出擬態(tài)執(zhí)行,將虛擬內(nèi)存地址空間作為擬態(tài)界,在擬態(tài)界內(nèi)部異構(gòu),當(dāng)擬態(tài)界內(nèi)與擬態(tài)界外產(chǎn)生數(shù)據(jù)交換時(shí),則對(duì)數(shù)據(jù)進(jìn)行表決。擬態(tài)執(zhí)行模型如圖3 所示。

        擬態(tài)執(zhí)行過程如下。首先對(duì)一個(gè)即將運(yùn)行的程序進(jìn)行無規(guī)律的內(nèi)存空間布局異構(gòu),異構(gòu)成n(n≥1)份,并使之冗余執(zhí)行。當(dāng)有數(shù)據(jù)流出進(jìn)程的虛擬內(nèi)存空間時(shí)對(duì)數(shù)據(jù)內(nèi)容進(jìn)行表決,總共進(jìn)行m?1(且n、m不能同時(shí)為1)次表決。當(dāng)表決一致時(shí),記錄各冗余運(yùn)行程序的狀態(tài);當(dāng)表決不一致時(shí),說明遭到了攻擊,則阻斷攻擊并隨之進(jìn)行擬態(tài)變換,也就是再次進(jìn)行無規(guī)律的變化運(yùn)行時(shí)的內(nèi)存空間布局。當(dāng)n=1時(shí),每次表決都觸發(fā)一次擬態(tài)變換。

        因?yàn)闀?huì)對(duì)程序進(jìn)行異構(gòu)化處理,所以通過靜態(tài)分析獲得的one_gadget 地址在實(shí)施攻擊時(shí)是無效的。因此,針對(duì)擬態(tài)執(zhí)行的攻擊有2 種情況。

        情況1爆破one_gadget 地址,逐一嘗試暴力枚舉的one_gadget 地址,直到成功。

        情況2如圖4 所示,通過2 次漏洞利用完成,第一次上傳 payload 利用程序本身的漏洞獲取one_gadget 地址,然后根據(jù)one_gadget 再次構(gòu)造并上傳payload 實(shí)施后面的攻擊步驟,最終實(shí)現(xiàn)控制流劫持并獲取shell,獲取機(jī)器控制權(quán)。

        下面,證明擬態(tài)執(zhí)行具備防御控制流劫持的效果。記在擬態(tài)執(zhí)行過程中觸發(fā)的擬態(tài)變換次數(shù)為t(m?1≥t≥0)。

        情況1 的證明如下。當(dāng)n=1時(shí),設(shè)尋址位數(shù)為k,在擬態(tài)變換的干擾作用下,一次地址爆破成功的概率始終為,無論k取32 還是64,都有p≈ 0;當(dāng)n> 1時(shí),只可能按概率p爆破成功一路冗余執(zhí)行進(jìn)程中的one_gadget 地址劫持控制流,然而,其他冗余進(jìn)程仍按照原控制流執(zhí)行,那么一定會(huì)在接下來的表決中發(fā)現(xiàn)不一致的擬態(tài)界內(nèi)外數(shù)據(jù)交換,進(jìn)而阻斷攻擊,然后進(jìn)行擬態(tài)變換使one_gadget 地址失效。

        圖3 擬態(tài)執(zhí)行模型

        圖4 針對(duì)擬態(tài)執(zhí)行的抽象攻擊過程

        情況2 的證明如下。當(dāng)n=1時(shí),每次數(shù)據(jù)流出擬態(tài)界時(shí)需進(jìn)行表決,每次表決都會(huì)觸發(fā)一次擬態(tài)變換,那么攻擊者通過第一次上傳payload 獲取的one_gadget 地址在實(shí)施接下來的攻擊步驟時(shí)(第二次上傳payload)無效。當(dāng)n> 1時(shí),攻擊者通過第一次上傳payload 來泄露one_gaaget 地址意味著one_gadget 地址將作為數(shù)據(jù)流出擬態(tài)界,會(huì)觸發(fā)一次表決,不同冗余執(zhí)行程序中的one_gadget 地址是不同的,那么在表決時(shí)一定會(huì)發(fā)現(xiàn)one_gadget 地址泄露,從而阻斷信息泄露,此時(shí)攻擊端將無法進(jìn)行接下來的攻擊步驟。

        4 原型系統(tǒng)實(shí)現(xiàn)

        本文在Linux 操作系統(tǒng)上實(shí)現(xiàn)了擬態(tài)執(zhí)行的原型系統(tǒng)MimicBox。如圖5 所示,MimicBox 是一個(gè)n>1、t=0的擬態(tài)執(zhí)行系統(tǒng)。MimicBox 對(duì)經(jīng)異構(gòu)處理的冗余執(zhí)行的等價(jià)進(jìn)程進(jìn)行監(jiān)控,當(dāng)程序執(zhí)行到表決點(diǎn)時(shí)進(jìn)行表決,當(dāng)表決判定為不一致時(shí),MimicBox將對(duì)程序進(jìn)行阻斷,從而保證one_gadget 地址不泄露。

        1) 進(jìn)程異構(gòu)化處理

        圖5 MimixBox 原理框架

        Linux 操作系統(tǒng)本身就提供了許多內(nèi)存空間布局異構(gòu)相關(guān)的技術(shù),如Canary 棧監(jiān)控、PIE、ASLR等。在編譯時(shí),Canary 技術(shù)通過在返回地址之前插入一個(gè)隨機(jī)數(shù),能夠?qū)崿F(xiàn)對(duì)程序代碼本身的異構(gòu),PIE 程序在裝載時(shí)可以被裝載進(jìn)隨機(jī)的虛擬內(nèi)存空間;在運(yùn)行時(shí),ASLR 會(huì)對(duì)執(zhí)行進(jìn)程的堆段、棧段、共享庫的基地址進(jìn)行隨機(jī)化。ASLR 技術(shù)和PIE 技術(shù)都能實(shí)現(xiàn)內(nèi)存空間布局的異構(gòu)。MimicBox 充分利用Linux 操作系統(tǒng)提供的上述技術(shù)對(duì)程序進(jìn)行異構(gòu)化處理。

        2) 表決點(diǎn)設(shè)置

        因?yàn)閿M態(tài)執(zhí)行要求在擬態(tài)界內(nèi)與擬態(tài)界外產(chǎn)生數(shù)據(jù)交換時(shí)進(jìn)行表決,并且MimicBox 的擬態(tài)界就是虛擬內(nèi)存空間,所以當(dāng)MimicBox 發(fā)現(xiàn)冗余執(zhí)行的進(jìn)程有數(shù)據(jù)流出虛擬內(nèi)存空間時(shí),主動(dòng)進(jìn)行表決。因?yàn)長(zhǎng)inux 中一個(gè)進(jìn)程的虛擬內(nèi)存中的數(shù)據(jù)必須通過系統(tǒng)調(diào)用才能流向別處,所以MimicBox 將表決點(diǎn)設(shè)置在所有輸出類的系統(tǒng)調(diào)用。

        3) 表決點(diǎn)監(jiān)控

        ptrace 系統(tǒng)調(diào)用是Linux 操作系統(tǒng)向用戶態(tài)提供的調(diào)試接口。當(dāng)ptrace 系統(tǒng)被調(diào)用時(shí),會(huì)產(chǎn)生一個(gè)中斷信號(hào),ptrace 通過監(jiān)聽這個(gè)信號(hào)來判斷是否產(chǎn)生系統(tǒng)調(diào)用。使用ptrace 不僅能夠監(jiān)聽系統(tǒng)調(diào)用的產(chǎn)生,而且還能控制進(jìn)程的運(yùn)行狀態(tài)。MimicBox使用ptrace 系統(tǒng)調(diào)用實(shí)現(xiàn)系統(tǒng)調(diào)用的攔截、替換、表決內(nèi)容提取、返回值覆蓋等功能。

        4) 冗余執(zhí)行體管理

        MimicBox 使用編號(hào)對(duì)冗余執(zhí)行體進(jìn)行管理,編號(hào)從0 開始,依次遞增1。

        5) 冗余輸出合并

        擬態(tài)界內(nèi)部執(zhí)行進(jìn)程的冗余必將導(dǎo)致擬態(tài)界內(nèi)與擬態(tài)界外數(shù)據(jù)交換的冗余,為了不對(duì)擬態(tài)界外造成影響,除了對(duì)數(shù)據(jù)交換進(jìn)行表決之外,還必須合并冗余的數(shù)據(jù)交換。Linux 中使用文件描述符或網(wǎng)絡(luò)套接字來標(biāo)識(shí)具體的數(shù)據(jù)流向的目標(biāo),比如磁盤文件、socket 套接字等。MimicBox 使用目標(biāo)點(diǎn)描述符來管理數(shù)據(jù)交換,目標(biāo)點(diǎn)描述符的定義如圖6所示。當(dāng)MimicBox 發(fā)現(xiàn)open 或openat 系統(tǒng)調(diào)用并且成功打開文件時(shí),將創(chuàng)建一個(gè)目標(biāo)點(diǎn)描述符。當(dāng)MimicBox 發(fā)現(xiàn)等價(jià)的冗余進(jìn)程進(jìn)行寫操作時(shí),就要檢查目標(biāo)點(diǎn)描述符的desc 域,如果一致就進(jìn)行合并。具體來說,使0 號(hào)執(zhí)行體中的進(jìn)程正常執(zhí)行,通過getpid 系統(tǒng)調(diào)用替換其他等價(jià)進(jìn)程中的系統(tǒng)調(diào)用,然后通過0 號(hào)執(zhí)行體中的進(jìn)程系統(tǒng)調(diào)用的返回值覆蓋其他等價(jià)進(jìn)程中系統(tǒng)調(diào)用的返回值。另外,對(duì)于網(wǎng)絡(luò)通信來說,除了要合并相關(guān)的輸出類系統(tǒng)調(diào)用之外,還要對(duì)connect、listen、accept、bind 等相關(guān)系統(tǒng)調(diào)用合并。合并方式與合并輸出類系統(tǒng)調(diào)用的方式類似,不同的是,網(wǎng)絡(luò)通信是在發(fā)現(xiàn)connect、accept 系統(tǒng)調(diào)用時(shí)創(chuàng)建目標(biāo)點(diǎn)描述符。

        圖6 目標(biāo)點(diǎn)描述符的定義

        6) 等價(jià)線/進(jìn)程匹配

        為了更好地支持多線/進(jìn)程,在表決時(shí)要準(zhǔn)確定位到相互功能等價(jià)的冗余線/進(jìn)程,這要求等價(jià)線/進(jìn)程在MimicBox 中要有相同的標(biāo)識(shí)。在MimicBox中,對(duì)線/進(jìn)程按照層次進(jìn)行編號(hào),使用一系列編號(hào)組成的序列標(biāo)識(shí)線/進(jìn)程。圖7 展示了冗余等價(jià)任務(wù)中其中一個(gè)任務(wù)的線/進(jìn)程關(guān)系,進(jìn)程pid=2 646 由進(jìn)程pid=2 645 通過調(diào)用fork 函數(shù)得到,一個(gè)線程從0 開始給它的子線程編號(hào),當(dāng)再創(chuàng)建新線程時(shí),編號(hào)依次遞增1。對(duì)于一個(gè)線程,沿著父線程方向回溯,直到進(jìn)程的第一個(gè)線程,由所途經(jīng)線程的編號(hào)組成的序列即為這個(gè)線程的標(biāo)識(shí)。以線程tid=2 660和線程tid=2 654 為例,它們?cè)谠搱?zhí)行體中的唯一標(biāo)識(shí)序列分別為(2,0,1)和(0,1,0)。在冗余等價(jià)任務(wù)中,具有相同標(biāo)識(shí)的線程視為等價(jià)線程。

        5 評(píng)估

        本文從防御有效性和性能2 個(gè)方面對(duì)MimicBox進(jìn)行了實(shí)驗(yàn)評(píng)估。實(shí)驗(yàn)旨在回答如下2 個(gè)問題。

        1) MimicBox 的防御邊界在哪里?能防御哪些類型的攻擊?

        2) 任何安全措施必將導(dǎo)致效率的降低,MimicBox 是否會(huì)帶來不可接受的性能損耗?

        5.1 有效性驗(yàn)證和評(píng)估

        為了驗(yàn)證MimicBox 防御控制流劫持攻擊的有效性,設(shè)置了3 種測(cè)試環(huán)境,并在3 種不同的場(chǎng)景進(jìn)行有效性驗(yàn)證實(shí)驗(yàn)或測(cè)試。

        5.1.1 理想場(chǎng)景驗(yàn)證實(shí)驗(yàn)

        理想環(huán)境下的驗(yàn)證實(shí)驗(yàn)使用CTF Pwn 奪旗賽中的題目作為實(shí)驗(yàn)樣本。在CTF Pwn 奪旗賽中,通常會(huì)將編譯好的帶漏洞可執(zhí)行程序發(fā)放給選手,選手通過對(duì)二進(jìn)制程序進(jìn)行逆向分析和調(diào)試來找出漏洞,并編寫攻擊代碼,以遠(yuǎn)程代碼執(zhí)行的方式拿到flag。

        Pwn 程序中的漏洞覆蓋面廣泛,幾乎包含了絕大多數(shù)已知的二進(jìn)制漏洞。一般來說,Pwn 程序中除了預(yù)先設(shè)置的漏洞之外不包含其他漏洞,能使實(shí)驗(yàn)更有針對(duì)性。因此本文采用CTF wiki 上的題目作為實(shí)驗(yàn)樣本,進(jìn)行驗(yàn)證實(shí)驗(yàn)。

        使用MimicBox 將CTF wiki 中的Pwn 題目對(duì)應(yīng)的帶漏洞程序保護(hù)起來,然后用CTF wiki 中提供的expliot 腳本進(jìn)行遠(yuǎn)程攻擊。每次執(zhí)行exploit 腳本記錄下是否獲取目標(biāo)機(jī)器的shell,獲取不到shell則意味著攻擊失敗,防御成功。攻擊實(shí)驗(yàn)結(jié)果如表1 所示。對(duì)于棧攻擊、堆攻擊和I/O 文件攻擊,MimicBox 均能防御相關(guān)的漏洞利用。

        5.1.2 真實(shí)攻防場(chǎng)景測(cè)試

        為了測(cè)試在真實(shí)攻防場(chǎng)景下MimicBox 的有效防御能力,將MimicBox 放到了第三屆“強(qiáng)網(wǎng)”擬態(tài)防御國(guó)際精英挑戰(zhàn)賽[22],接受來自世界上40 支戰(zhàn)隊(duì)的挑戰(zhàn)。第三屆“強(qiáng)網(wǎng)”擬態(tài)防御國(guó)際精英挑戰(zhàn)賽在2020 年6 月19 日舉行,為期兩天。此次比賽按照“BMW”模式[23],采取線上白盒積分爭(zhēng)奪賽、線上擬態(tài)白盒挑戰(zhàn)賽、線上擬態(tài)黑盒挑戰(zhàn)賽的全新賽制。其中,白盒積分爭(zhēng)奪賽采取CTF Pwn比賽的形式與規(guī)則,MimicBox 出現(xiàn)在白盒積分爭(zhēng)奪賽上。

        比賽共出了四道題目,其中兩道題目中的程序未被MimicBox 保護(hù),作為基礎(chǔ)題;另外兩道題目中將同樣的帶漏洞程序采用MimicBox 保護(hù),作為進(jìn)階題。經(jīng)過48 h 的不間斷攻擊挑戰(zhàn),完成了對(duì)比測(cè)試。

        題目easy-stack 中的目標(biāo)程序包含一個(gè)格式化字符串漏洞和一個(gè)棧溢出漏洞;題目newpad 的對(duì)應(yīng)程序中包含一個(gè)House of einherjar 類型的堆漏洞。經(jīng)過測(cè)試,大部分戰(zhàn)隊(duì)能解出基礎(chǔ)題目,然而卻沒有一支戰(zhàn)隊(duì)能解出進(jìn)階題目,這意味著沒有任何戰(zhàn)隊(duì)能夠突破MimicBox 的防護(hù),具體測(cè)試結(jié)果如表2 所示。

        圖7 MimicBox 中的進(jìn)/線程關(guān)系

        表1 CTF Pwn 測(cè)試結(jié)果

        5.1.3 真實(shí)漏洞利用場(chǎng)景驗(yàn)證實(shí)驗(yàn)

        理想場(chǎng)景實(shí)驗(yàn)和真實(shí)攻防場(chǎng)景測(cè)試表明,MimicBox 對(duì)一些基礎(chǔ)漏洞完全具備防御能力,為了驗(yàn)證MimicBox 對(duì)信息泄露的防御能力,選取了2 個(gè)真實(shí)世界中的軟件漏洞(CVE-2014-0160 和CVE-2018-16890)進(jìn)行漏洞防護(hù)實(shí)驗(yàn)。

        CVE-2014-0160 是OpenSSL 中的一個(gè)高危漏洞,源于OpenSSL 中的TSL 模塊和DTLS 模塊在調(diào)用memcpy函數(shù)之前沒有對(duì)長(zhǎng)度參數(shù)進(jìn)行邊界檢查,將導(dǎo)致過多的內(nèi)存信息復(fù)制到緩沖區(qū)以每次64 KB 的速度泄露,泄露信息可能包括服務(wù)器私鑰、用戶cookie 和密碼等。

        MimicBox 能夠有效防御CVE-2014-0160。當(dāng)內(nèi)存信息向外泄露時(shí),將會(huì)觸發(fā)表決。由于對(duì)冗余執(zhí)行的等價(jià)進(jìn)程做了異構(gòu)處理,各冗余進(jìn)程泄露的內(nèi)存信息不一致,MimicBox 表決時(shí)將發(fā)現(xiàn)不一致,從而阻斷信息泄露。

        CVE-2018-16890 是7.36.0 版本到7.64.0 版本的curl 中的一個(gè)整數(shù)溢出漏洞。curl 處理NTML type-2消息的函數(shù)ntlm_decode_type2_target沒有驗(yàn)證數(shù)據(jù)是否正確,利用整數(shù)溢出,惡意代碼或者損壞的NTLM 服務(wù)器能夠使curl 接收到錯(cuò)誤的數(shù)據(jù),將導(dǎo)致對(duì)一個(gè)堆緩沖區(qū)的越界讀取。利用此漏洞,攻擊者可以在服務(wù)器上遠(yuǎn)程獲取客戶端內(nèi)存至多64 KB 的原始內(nèi)存信息。而且因?yàn)檫B接可以多次進(jìn)行,服務(wù)器理論上可以多次重復(fù)地獲取客戶端內(nèi)存信息。

        使用MimicBox 保護(hù)curl 客戶端,能夠有效防止信息泄露。防御原理與防御CVE-2018-16890 類似,MimicBox 將通過表決發(fā)現(xiàn)各冗余進(jìn)程泄露的不一致信息從而進(jìn)行阻斷,具體來說,其發(fā)現(xiàn)了sendto 系統(tǒng)調(diào)用向服務(wù)端發(fā)送的內(nèi)容不一致。當(dāng)客戶端被MimicBox 保護(hù)后,在服務(wù)端接收不到客戶端泄露的內(nèi)存信息。

        表2 挑戰(zhàn)賽測(cè)試結(jié)果

        5.1.4 有效性評(píng)估

        理想環(huán)境下的驗(yàn)證實(shí)驗(yàn)結(jié)果表明,MimicBox能夠防御大部分棧漏洞、堆漏洞和I/O 文件漏洞利用。另外,如表1 所示,在有效異構(gòu)的前提下,MimicBox 只需要使用雙余度即可保證有效性。

        真實(shí)攻防環(huán)境下的測(cè)試表明,相對(duì)于單一的基于隨機(jī)的異構(gòu)結(jié)構(gòu),MimicBox 的異構(gòu)冗余結(jié)構(gòu)賦予了程序極強(qiáng)的內(nèi)生安全能力。

        真實(shí)漏洞利用場(chǎng)景下的驗(yàn)證實(shí)驗(yàn)表明,對(duì)于以心臟滴血為代表的信息泄露類漏洞來說,擬態(tài)執(zhí)行中蘊(yùn)含的異構(gòu)冗余特性使MimicBox 具備天然的防御能力。

        總而言之,經(jīng)過3 種不同測(cè)試場(chǎng)景下的充分實(shí)驗(yàn),對(duì)于第一個(gè)問題,擬態(tài)執(zhí)行的原型系統(tǒng)MimicBox 能夠有效阻斷絕大部分已知的基于棧利用、堆利用、I/O 文件攻擊和信息泄露的進(jìn)程控制流劫持。

        5.2 性能評(píng)估

        針對(duì)MimicBox 的性能測(cè)試,則使用SPEC CPU2006 完成。具體實(shí)驗(yàn)環(huán)境配置如表3 所示。首先對(duì)SPECint 2006 中的8 個(gè)樣本進(jìn)行基準(zhǔn)測(cè)試,然后用MimicBox 將這8 個(gè)樣本保護(hù)起來,測(cè)試多余度情況下的性能并計(jì)算額外性能開銷(overhead)。測(cè)試結(jié)果如圖8 所示,額外性能開銷結(jié)果如表4所示。

        對(duì)比基準(zhǔn)程序和MimicBox 多余度測(cè)試結(jié)果,MimicBox 所需的時(shí)間、額外性能開銷與冗余度呈正相關(guān)關(guān)系。橫向觀察表4,隨著冗余度的增加,額外性能開銷也隨之增加??v向觀察表4,當(dāng)n=2時(shí),所有樣本的額外性能損耗都不超過13%。對(duì)于CPU 密集型程序來說,MimicBox 導(dǎo)致的性能損耗是可以接受的。

        表3 性能測(cè)試環(huán)境配置

        5.3 對(duì)比評(píng)估

        在已知的面向進(jìn)程控制流劫持的防御方法中,CFI 是較有效的一種。本節(jié)將對(duì)擬態(tài)執(zhí)行與CFI 進(jìn)行一個(gè)簡(jiǎn)單的對(duì)比。

        CFI 認(rèn)為只有符合控制流圖的控制流轉(zhuǎn)移才是合法的[24]。根據(jù)輸入程序類型的不同,控制流完整性實(shí)施方案可分為面向源代碼和面向二進(jìn)制2 種[25];根據(jù)控制流轉(zhuǎn)移時(shí)檢查的精細(xì)程度,CFI 又分為粗粒度CFI 和細(xì)粒度CFI[12]。CFI 被認(rèn)為是較有效的一種防御控制流劫持的方案,然而,CFI 仍然存在一些局限性。

        圖8 測(cè)試結(jié)果

        表4 MimicBox 多余度額外性能損耗

        粗粒度的CFI 往往有效性較差,而細(xì)粒度的CFI 為了追求高有效性,往往導(dǎo)致不可接受的額外性能開銷。文獻(xiàn)[26]中的Picon 是一個(gè)面向源代碼的CFI 框架,導(dǎo)致程序的平均運(yùn)行時(shí)間增加了900多倍;Bincon[27]是一個(gè)面向二進(jìn)制的CFI 框架,導(dǎo)致程序的平均運(yùn)行時(shí)間增加了20 多倍。為了同時(shí)追求高有效性和低開銷,一些研究者著手于硬件加速,以現(xiàn)有的硬件手段來降低CFI 的開銷[25-30]。使用硬件雖然能帶來一定的開銷下降,但是卻不可避免地帶來了一定的成本上升。

        擬態(tài)執(zhí)行卻是一種輕量、高有效、低開銷、低成本的防御方案。擬態(tài)執(zhí)行不需要在程序執(zhí)行之前建立控制流圖,具備內(nèi)生安全能力,額外性能開銷較低,成本低廉。擬態(tài)執(zhí)行與面向源代碼的CFI 相比,對(duì)源代碼的依賴程度??;與面向二進(jìn)制的CFI相比,不需要進(jìn)行反編譯或插樁;與粗粒度的CFI相比,能夠防御的攻擊類型更廣泛;與細(xì)粒度的CFI相比,有效防御能力相當(dāng),但是擬態(tài)執(zhí)行的額外性能開銷遠(yuǎn)遠(yuǎn)小于CFI。

        另外,CFI 無法抵御內(nèi)存信息泄露,而擬態(tài)執(zhí)行能夠有效防止內(nèi)存信息泄露。

        總之,擬態(tài)執(zhí)行是相對(duì)于CFI 更實(shí)用的一種用來防御進(jìn)程控制流劫持的方法。

        5.4 局限性

        即使MimicBox 是退化的軟件擬態(tài)執(zhí)行系統(tǒng)原型,但是經(jīng)過實(shí)驗(yàn)驗(yàn)證,其幾乎可以防御絕大部分已知類型的控制流劫持攻擊。然而,MimicBox 仍存在以下2 個(gè)方面的局限性。

        1) 對(duì)于I/O 密集型程序,MimicBox 將可能導(dǎo)致較大的性能下降。性能下降的主要原因一方面是擬態(tài)系統(tǒng)的內(nèi)在特性,另一方面是過多的無意義的系統(tǒng)調(diào)用處理。擬態(tài)執(zhí)行強(qiáng)調(diào)在擬態(tài)界內(nèi)向擬態(tài)界外流出數(shù)據(jù)時(shí)進(jìn)行表決,而MimicBox 使用ptrace攔截所有的系統(tǒng)調(diào)用,對(duì)其中的部分系統(tǒng)調(diào)用進(jìn)行表決,這大大降低了ptrace 的有效使用率。另外,使用ptrace 提取系統(tǒng)調(diào)用參數(shù)、控制進(jìn)程狀態(tài)等操作使整個(gè)系統(tǒng)中多出許多次額外的系統(tǒng)調(diào)用。

        2) 存在表決假陽導(dǎo)致的誤報(bào)問題。導(dǎo)致表決假陽的主要原因是MimicBox 中冗余進(jìn)程之間存在內(nèi)生的不一致屬性,比如進(jìn)程號(hào)、隨機(jī)數(shù)、文件描述符等。當(dāng)這些不一致屬性作為數(shù)據(jù)流出擬態(tài)界時(shí),往往導(dǎo)致表決誤報(bào)。

        6 結(jié)束語

        為了防御進(jìn)程控制流劫持攻擊,本文提出了擬態(tài)執(zhí)行方法。將擬態(tài)防御的DHR 構(gòu)造引入進(jìn)程執(zhí)行過程中,在異構(gòu)冗余的基礎(chǔ)之上進(jìn)行表決,能夠有效發(fā)現(xiàn)攻擊并采取防御措施。

        擬態(tài)執(zhí)行的原型系統(tǒng)MimicBox 驗(yàn)證了擬態(tài)執(zhí)行的可行性和防御有效性,同時(shí)說明擬態(tài)執(zhí)行具有良好的發(fā)展前景。擬態(tài)執(zhí)行是一種輕量的、對(duì)用戶透明的防御方式,應(yīng)用領(lǐng)域可以涵蓋云安全、系統(tǒng)安全、物聯(lián)網(wǎng)設(shè)備安全等。

        本文建立了進(jìn)程控制流劫持攻擊的威脅模型,經(jīng)過對(duì)模型的分析,提出了進(jìn)程的擬態(tài)執(zhí)行防御模型,并基于該模型,實(shí)現(xiàn)了原型系統(tǒng)。經(jīng)過對(duì)原型系統(tǒng)的安全性測(cè)試,驗(yàn)證了擬態(tài)執(zhí)行的防御有效性。最后提出了擬態(tài)執(zhí)行的發(fā)展前景和推廣價(jià)值。

        猜你喜歡
        控制流擬態(tài)調(diào)用
        章魚大師的擬態(tài)課堂
        抵御控制流分析的Python 程序混淆算法
        中韓擬聲詞擬態(tài)詞形態(tài)上的特征
        工控系統(tǒng)中PLC安全漏洞及控制流完整性研究
        電子科技(2021年2期)2021-01-08 02:25:58
        抵御控制流分析的程序混淆算法
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        模仿大師——擬態(tài)章魚
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        關(guān)于擬聲擬態(tài)詞的考察
        基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
        欧美a级在线现免费观看| 中国a级毛片免费观看| 极品尤物高潮潮喷在线视频| 综合图区亚洲另类偷窥| 成人av资源在线观看| 国产日韩精品suv| 亚洲xxxx做受欧美| 无码国产日韩精品一区二区| 色噜噜亚洲精品中文字幕| 大又大又粗又硬又爽少妇毛片| 国产欧美日韩综合精品二区| 亚洲色偷拍一区二区三区| 精品久久免费国产乱色也| 天天综合网网欲色| 亚洲av第一页国产精品| av深夜福利在线| 中文字幕一区二区三区| 麻豆网神马久久人鬼片| 久久无码高潮喷水| 亚洲精品乱码久久久久久按摩高清| 成av人片一区二区久久| 又色又爽又黄高潮的免费视频 | 国产思思99re99在线观看| 男女上床视频免费网站| 大量漂亮人妻被中出中文字幕| 天天爽天天爽夜夜爽毛片| 国产日韩在线播放观看| 粗一硬一长一进一爽一a视频| 99re6在线视频精品免费下载| 大肉大捧一进一出好爽视色大师| 91超碰在线观看免费| 色婷婷亚洲精品综合影院| 人妻少妇久久久久久97人妻| 国产精品-区区久久久狼| 国内精品人人妻少妇视频| 黄片视频免费观看蜜桃| 99精品一区二区三区无码吞精| 波多野结衣一区二区三区视频| 中文字幕久久精品一区二区| 国产乱码卡二卡三卡老狼| 欧美另类视频在线|