• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    二進制代碼塊: 面向二進制程序的細粒度控制流完整性校驗方法

    2016-02-20 03:23:22王明華AbhishekVasishtBhaskar蘇璞睿馮登國
    信息安全學報 2016年2期
    關(guān)鍵詞:控制流二進制結(jié)點

    王明華, 尹 恒, Abhishek Vasisht Bhaskar, 蘇璞睿, 馮登國

    ?

    二進制代碼塊: 面向二進制程序的細粒度控制流完整性校驗方法

    王明華1,2, 尹 恒2, Abhishek Vasisht Bhaskar2, 蘇璞睿3,4, 馮登國4

    1百度X-Lab2雪城大學3中國科學院軟件研究所計算機科學國家重點實驗室4中國科學院軟件研究所可信計算與信息保障實驗室

    控制流完整性(CFI)是一種在程序中通過保護間接轉(zhuǎn)移有效減少代碼注入和代碼重用攻擊等威脅的技術(shù)。由于二進制程序缺少源代碼級別的語義, CFI策略的設定需要很謹慎。現(xiàn)有的面向二進制的 CFI解決方案, 如BinCFI和CCFIR, 雖然能夠提供對二進制程序的防護能力, 但它們應用的策略過于寬松, 依然會受到復雜的代碼重用攻擊。本文提出一種新的面向二進制的CFI保護方案, 稱為BinCC。它可以通過靜態(tài)二進制重寫為x86下的二進制程序提供細粒度保護。通過代碼復制和靜態(tài)分析, 我們把二進制代碼分成幾個互斥代碼塊。再進一步將代碼中的每個間接轉(zhuǎn)移塊歸類為塊間轉(zhuǎn)移或塊內(nèi)轉(zhuǎn)移, 并分別應用嚴格CFI策略來限制這些轉(zhuǎn)移。為了評估BinCC, 我們引入新的指標來評估每種間接轉(zhuǎn)移中合法目標的平均數(shù)量, 以及利用call-preceded gadgets產(chǎn)生ROP漏洞利用的難度。實驗結(jié)果表明與BinCFI比較, BinCC顯著地將合法轉(zhuǎn)移目標降低了81.34%, 并顯著增加了攻擊者繞過CFI限制實施復雜的ROP攻擊的難度。另外, 與BinCC可以降低大約14%的空間開銷, 而只提升了4%的運行開銷。

    控制流完整性

    1 前言

    ASLR[22]和DEP[2]能夠緩解傳統(tǒng)漏洞威脅。然而, 即使ASLR和DEP開啟, 攻擊者仍然能夠通過代碼重用實施攻擊[4,21], 例如ROP[20]就是這樣一種代碼重用技術(shù)。近年來, 一些研究工作[3][6-8][13][19][24]已經(jīng)提出針對代碼重用攻擊的解決方案, 并且取得了一定的成果。

    控制流完整性[1]在緩解控制流劫持攻擊中扮演著重要的角色, 其主要思想是依據(jù)控制流圖(CFG)來限制程序中的控制流轉(zhuǎn)移。對于具有源代碼的程序, CFG圖的構(gòu)造趨于完整, 能夠依次提出嚴格的CFI約束策略。但是, 對于二進制程序而言, 由于缺乏源代碼或調(diào)試信息, 無法構(gòu)造完整的CFG信息, 所以提出的CFI策略僅能是粗粒度的。盡管諸如CCFIR和BinCFI等CFI解決方案可以阻止絕大多數(shù)控制流劫持威脅, 但是它們?nèi)匀豢赡苁艿嚼胏all-preceded實現(xiàn)的復雜ROP的攻擊[5][10]。

    本文提出一個新的面向二進制程序的CFI保護方法——BinCC, 旨在為二進制程序提供更細粒度的保護。具體的方法是: 通過復制少量的代碼, 并執(zhí)行靜態(tài)分析, 把二進制代碼分成幾個互斥代碼塊, 并將每個間接轉(zhuǎn)移分為塊間轉(zhuǎn)移或塊內(nèi)轉(zhuǎn)移。接下來提出嚴格的CFI策略來約束這兩種控制流轉(zhuǎn)移, 其中, 塊內(nèi)轉(zhuǎn)移只允許到達當前塊內(nèi)的目標, 塊間轉(zhuǎn)移只允許到達代碼塊中特定類型的目標, 從而顯著地縮減了控制流轉(zhuǎn)移合法目標的數(shù)量。

    為了評估BinCC, 我們引入新的指標來評估每種間接轉(zhuǎn)移中合法目標的平均數(shù)量, 以及利用call- preceded gadgets實現(xiàn)ROP利用攻擊的難度。與BinCFI相比較, 實驗結(jié)果表明BinCC在這兩方面均有顯著的提高。其中, BinCC將合法轉(zhuǎn)移目標降低了81.34%。尤其, BinCC對returns指令(ret)提供細粒度的保護, 將合法目標數(shù)量平均降低了87%, 顯著增加了通過call-preceded gadget實現(xiàn)的復雜ROP攻擊的難度。除此之外, BinCC還具有合理的性能。相比BinCFI, BinCC運行開銷僅增加4%, 而空間開銷降低14%。

    總言之, BinCC做出了如下貢獻:

    ? BinCC通過代碼復制和代碼塊構(gòu)造, 將程序中的間接控制流轉(zhuǎn)移分類為塊內(nèi)轉(zhuǎn)移和塊間轉(zhuǎn)移, 并分別實施了細粒度的CFI策略。

    ? 與BinCFI和CCFIR相比, BinCC顯著縮減了間接控制流轉(zhuǎn)移(尤其是returns指令)的合法目標數(shù)量。

    ? BinCC不僅可以緩解常見的控制流劫持威脅, 而且能夠顯著增加了利用call-preceded gadget實施復雜ROP利用攻擊的難度。

    ? BinCC加固的程序具有合理的性能。比起B(yǎng)inCFI, BinCC能夠?qū)⒓庸痰某绦虼笮p少約14%, 運行時間增加約4%。

    內(nèi)容組織如下。在第二章中討論背景和相關(guān)技術(shù), 接著在第三章中介紹代碼塊的概念和CFI策略。在第四章中介紹代碼塊結(jié)構(gòu), 在第五章中介紹CFI的實施方法。第六章為實驗評估。第七章探討本文方法的局限性。第八章對本文進行總結(jié)。

    2 背景和相關(guān)技術(shù)

    CFI解決方案包括基于源代碼和基于二進制兩類。由于在實踐中我們獲得的二進制程序大部分都是沒有源碼的, 所以我們將側(cè)重點放在基于二進制的解決方案上。為了說明問題, 我們對CCFIR和BinCFI的實現(xiàn)方式, 以及針對它們的攻擊方式進行討論。

    2.1 基于源代碼的CFI

    許多研究工作[3][11][12][16][23]依賴于源代碼來提出CFI的防護策略。研究工作[11][23]主要側(cè)重于保護虛函數(shù)的調(diào)用。主要思路是利用類繼承結(jié)構(gòu)分析來識別合法目標, 并插入檢查代碼來實現(xiàn)類方法和vtable檢查。這兩種解決方案都可以為虛函數(shù)調(diào)用操作提供細粒度保護, 但無法對返回操作進行保護。CFL[3]為在每個間接轉(zhuǎn)移前加一個鎖操作, 并僅在合法地址處進行相應的解鎖操作。這個方法與我們的方法在相關(guān)調(diào)用函數(shù)返回上類似, 但是它依賴于源碼, 而源碼在實際應用中并不容易得到, 而且這個方法缺乏對模塊化支持。MCFI[15]是一個支持模塊化的CFI解決方案。它使用幾個地址表來存儲間接轉(zhuǎn)移的合法目標, 并在模塊動態(tài)加載時使用輔助類型信息來更新目標。在運行時, MCFI通過執(zhí)行特定的校驗例程, 對間接控制流轉(zhuǎn)移的合法性進行校驗。

    RockJIT[16]是MCFI[15]工作的擴展, 它可以緩解與JIT代碼相關(guān)的控制流攻擊, 可以阻止由JITed代碼引起的控制流攻擊。通過使用JIT編譯器的源代碼來計算程序的CFG, 并通過運行時產(chǎn)生的動態(tài)代碼來更新CFI策略。CPI[12]提出了指針代碼完整性和指針代碼分離的思想。通過有選擇地保護易受控制流劫持攻擊的指針訪問, 該方法可以保障程序控制流安全。

    2.2 基于二進制的CFI

    研究工作[14][24][25]是基于面向二進制的解決方案。O-CFI利用一個查詢表來存放合法控制流轉(zhuǎn)移目標地址, 輔助O-CFI在運行時對轉(zhuǎn)移目標的校驗。O-CFI額外使用了隨機化技術(shù)對程序中所有代碼塊進行了隨機化處理, 減低了程序遭受信息泄露的風險。SFI[24]是一種沙箱技術(shù), 用來實施控制流完整性保護。其基本思想是使不可信的模塊在相同的程序地址空間內(nèi)執(zhí)行, 不允許其訪問其他程序的數(shù)據(jù)和代碼。PittSFIled[13]和NaCl[25]是基于SFI實現(xiàn)的, 用于保護局部代碼安全, 而且其限制間接轉(zhuǎn)移的目標也需要滿足內(nèi)存對齊的要求。

    Lockdown[17]使用影子棧對ret指令進行約束。然而, 影子??赡芤敫叩倪\行開銷, 同時為了維護call/ret對, 需要更多的內(nèi)存讀和寫操作。此外, 影子棧需要存儲在安全內(nèi)存域中, 這需要由硬件或類似SFI的分離技術(shù)來提供支持。安全內(nèi)存域也可能存在信息泄露的風險, 能夠被攻擊者利用, 如文獻[9]中一個真實的攻擊實例。

    CCFIR[26]是一個面向Windows x86 PE二進制程序的CFI解決方案。它將間接轉(zhuǎn)移的目標安排在一個稱為“springboard”的新節(jié)中。不同類型的跳轉(zhuǎn)目標在springboard按照不同的粒度對齊。在間接控制流轉(zhuǎn)移時, 首先跳轉(zhuǎn)至springboard中, 檢測轉(zhuǎn)移目標地址是否按照某種粒度對齊。如果對齊, 控制流會由springboard中對應stub函數(shù)接管, 繼續(xù)執(zhí)行; 否則, 轉(zhuǎn)移目標被認為不合法。BinCFI[27]是另一種面向Linux x86 ELF二進制程序的CFI方案。BinCFI通過反匯編二進制碼, 改寫間接控制流轉(zhuǎn)移指令, 再將最終代碼放入新代碼段。對于每個指令, 它都維護一個原位置與新位置的映射表。當間接轉(zhuǎn)移發(fā)生時, BinCFI會使其跳轉(zhuǎn)至相應的地址轉(zhuǎn)換例程, 在地址轉(zhuǎn)換例程中完成對目標地址的查找和轉(zhuǎn)換。除此之外, BinCFI還對模塊化具有很好的支持。

    CFG依賴二進制程序自身, 因此無法精確表示, 所以提出的CFI策略都是粗粒度的。雖然CFI策略能夠減少大量普通控制流攻擊, 但允許的策略仍然可能被攻擊者繞過。圖1顯示了針對CCFIR和BinCFI可能的攻擊方式。實線表示運行時的執(zhí)行流, 虛線表示可能被攻擊的路徑。對CCFIR來說, 如圖1(a)所示, springboard中的目標, 只要滿足對齊到常量M_R, 任何調(diào)用地址都將被認為是合法的。同樣, 對于BinCFI, 一個ret能夠返回到二進制程序中的任何調(diào)用點, 如圖1(b)所示。這些返回都是不受保護的, 因此攻擊者能夠利用call-preceded gadget實施ROP利用攻擊。工作[10]已經(jīng)證實了這種攻擊的可能。

    3 方法框架

    本文提出一種細粒度的CFI策略, 可以顯著的改善間接控制流轉(zhuǎn)移中的合法目標。通過復制一些必要代碼和執(zhí)行靜態(tài)分析將二進制程序劃分為一些獨立代碼部分, 并將每個間接轉(zhuǎn)移定義為代碼塊內(nèi)轉(zhuǎn)移和代碼塊間轉(zhuǎn)移。因此, 我們可以執(zhí)行獨立、嚴格的策略來達到細粒度保護。下面, 我們將首先通過一個例子介紹代碼塊相關(guān)概念, 然后介紹CFI策略。

    3.1 代碼塊

    代碼塊是由函數(shù)的Super-CFG(超級控制流圖)構(gòu)成的。對于一個函數(shù), 其Super-CFG是由其CFG(控制流圖)構(gòu)成的(Super-CFG構(gòu)造算法將在第四章討論)。通過對函數(shù)的Super-CFGs進行合并, 構(gòu)建每個代碼塊的有向圖, 而這些代碼塊之間兩兩互斥。

    我們通過圖2的示例進行說明。示例中二進制代碼原始函數(shù)包含:,,,和。是二進制程序的入口點。圖中的節(jié)點代表代碼中相應的指令。在圖中,CC表示由函數(shù)的Super- CFG生成的代碼塊。由于函數(shù)在指令3處被直接調(diào)用, 所以, 由指令5、6和7組成的函數(shù)也被包含在CC中。CC表示由函數(shù)的Super-CFG生成的代碼塊, 包含有四個結(jié)點。

    我們將包含一個代碼塊中的結(jié)點分為三類: 根結(jié)點, 邊緣結(jié)點和內(nèi)部結(jié)點。根結(jié)點表示間接調(diào)用函數(shù)的入口, 在圖中用灰色表示。例如, 1和5是CC的根結(jié)點。邊緣結(jié)點代表間接轉(zhuǎn)移指令, 其目標無法在計算Super-CFG時識別, 在圖中用條紋表示。例如, 2、4和6都是CC的邊緣結(jié)點。那些既不是根結(jié)點也不是邊緣結(jié)點的結(jié)點稱為內(nèi)部結(jié)點, 在圖中用白色表示。這些內(nèi)部結(jié)點所表示的指令是那些非控制流轉(zhuǎn)移指令或在Super-CFG中具有確定目標的控制流轉(zhuǎn)移指令, 例如3和7。

    通過劃分結(jié)點, 我們可以將間接轉(zhuǎn)移分為兩類, 即塊內(nèi)轉(zhuǎn)移和塊間轉(zhuǎn)移。塊內(nèi)轉(zhuǎn)移是由內(nèi)部結(jié)點發(fā)起的間接轉(zhuǎn)移, 塊間轉(zhuǎn)移則是由邊緣結(jié)點發(fā)起的間接轉(zhuǎn)移。值得注意的是, 在本文方法中, 我們確保每個間接轉(zhuǎn)移僅為塊內(nèi)轉(zhuǎn)移或塊間轉(zhuǎn)移的一種, 從而實施不同粒度的約束策略。為了達到該目標, 我們在代碼塊構(gòu)造前, 首先需要完成對一部分代碼的復制。

    通常二進制代碼中的函數(shù)分為兩類, 即間接被調(diào)函數(shù)(ICF, Indirect Called Function)和直接被調(diào)函數(shù)(DCF, Direct Called Function)。但可能存在一些函數(shù)既是ICF又是DCF。我們將兩類交集部分的函數(shù)進行復制, 并將這部分新函數(shù)視為ICF。這樣, 所有函數(shù)最終被歸進兩個互斥的集合中, 如圖3所示。當程序運行時, 在一個間接調(diào)用位置, 當原始函輸被調(diào)用時, 我們會實時調(diào)度來執(zhí)行復制的函數(shù)。這樣, 在程序運行過程中, 一個函數(shù)只會按照一種特定的方式被調(diào)用, 即間接或直接。因此, ret僅返回到一個特定類型的調(diào)用點。ret也被分成兩類: 直接ret和間接ret。其中直接ret返回到直接調(diào)用點; 間接ret返回到間接調(diào)用點。

    在圖2示例代碼中, ICF由、、、組成, 而DCF由組成。只有函數(shù)被兩種方式同時調(diào)用。假設從開始執(zhí)行,函數(shù)首先在9處被間接調(diào)用, 接著在3處被直接調(diào)用, 因此返回指令7應該分別返回到這兩個調(diào)用點。在BinCC中,是一個通過復制函數(shù)生成的新函數(shù), 它在指令9處被間接調(diào)用。這使得指令7變成塊內(nèi)轉(zhuǎn)移, 指令7’變成塊間轉(zhuǎn)移, 也就是說7作為直接ret應該返回到3處, 而作為間接ret, 則返回到9處, 如兩個虛箭頭所示。

    3.2 CFI策略

    本小節(jié), 我們提出塊內(nèi)策略和塊間策略來分別約束塊內(nèi)和塊間的間接轉(zhuǎn)移。

    塊內(nèi)策略

    這類策略是用來限制內(nèi)部節(jié)點描述間接轉(zhuǎn)移的, 其轉(zhuǎn)移目標是由靜態(tài)分析確定的。這些目標通常存在于代碼塊的內(nèi)部, 并且在構(gòu)成代碼塊的Super-CFG中確定。在一個代碼塊中, 我們只關(guān)心兩種間接控制流轉(zhuǎn)移。一種是直接ret, 另一種是與switch-case跳轉(zhuǎn)表相關(guān)的間接jmp。對于每個直接ret, 合法的目標是處于當前代碼塊內(nèi)的對應目標調(diào)用點。對于每個間接跳轉(zhuǎn)而言, 相應跳轉(zhuǎn)表中所有條件分支都是合法的目標。跳轉(zhuǎn)表中的條件分支可以通過靜態(tài)分析確定。我們在構(gòu)造Super-CFG時, 將間接跳轉(zhuǎn)與它的條件分支相關(guān)聯(lián)來確定其目標。

    如示例所示, 這些代碼塊中有一個塊內(nèi)間接轉(zhuǎn)移, 即CC中7處的ret, 它只允許返回至調(diào)用點3。

    塊間策略

    這類策略用于限制邊界結(jié)點, 這些結(jié)點的轉(zhuǎn)移目標不能從Super-CFG中靜態(tài)確定。根據(jù)不同的轉(zhuǎn)移類型, 我們提出如下策略。

    1. 間接call結(jié)點只能到達表示ICF入口點的根結(jié)點。

    2. 間接ret結(jié)點只能回到表示間接call的邊界結(jié)點。

    3. 間接跳轉(zhuǎn)結(jié)點, 不能通過靜態(tài)分析得出其目標, 但可以達到根結(jié)點或表示間接call的邊界結(jié)點。

    這些策略的合理性在于: 在函數(shù)分成兩個互斥集合之后, ICF只能被間接調(diào)用指令調(diào)用, 因此, ICF的間接返回只能回到間接調(diào)用點。間接jmp通常與跳轉(zhuǎn)表相關(guān), 這些跳轉(zhuǎn)的目標可以通過靜態(tài)分析得到。但是也有一些間接jmp無法通過靜態(tài)分析得到, 它們的目標可能是ICF的入口點或調(diào)用點。

    圖2示例中, 根結(jié)點是ICF(1,5,5’,8和12)的入口點, 邊界結(jié)點包含間接call結(jié)點(2,6和9)和間接ret結(jié)點(4,11,13和7’)。在BinCC中, 間接call結(jié)點(2,6和9)可以調(diào)用ICF(1,5,5’,8和13), 間接ret(4,11,13和7’)可以返回到間接call(2,6和9)。

    4 代碼塊構(gòu)造

    為了構(gòu)建代碼塊, 我們首先在二進制程序中識別所有的DCF和ICF, 然后通過控制流分析來獲得這些函數(shù)的CFG, 進而計算Super-CFG, 并基于Super-CFG構(gòu)建代碼塊。下面我們將進行深入討論。

    4.1 DCF識別

    每個DCF是通過一個相關(guān)的call調(diào)用。函數(shù)的入口地址可以由call指令的地址和操作數(shù)計算得出。按照這種思路, 我們可以獲得所有DCF。

    4.2 ICF識別

    程序中ICF地址與程序中存在的常量有關(guān), 函數(shù)地址是常量自身, 或由常量計算而來。根據(jù)這一特點, 我們在程序中找出所有與函數(shù)地址相關(guān)的常量。

    如果二進制程序中包含重定位表, 則所有被間接調(diào)用函數(shù)的地址信息都將在重定位表中。在這種情況下, 我們計算重定位表中的每個常量與代碼基地址的和, 如果結(jié)果在此代碼區(qū)中, 那么這個和即是一個ICF的地址。

    對于不包含重定位表的二進制程序, 可能有non-PIC或PIC兩種情況。在這些情況下, 我們采用同樣的方法, 在二進制程序的常量中篩選ICF。

    對于non-PIC模塊, 我們使用一個窗口值(例如: 在32-bit的系統(tǒng)中為4字節(jié))在data、.rodata、.init_array、exported symbol sections和其他可能存在表示合法代碼地址的程序段中掃描常量。同時, 我們也在代碼域中收集常量。結(jié)合反匯編的結(jié)果, 如果此常量, 或常量與代碼基址的和是有效代碼地址, 且滿足一個合法指令的邊界, 我們就認為它是一個候選的ICF。

    對于一個PIC模塊, 函數(shù)可以被PC thunks調(diào)用。因此, 除了與non-PIC執(zhí)行相同的方法來收集常量之外, 我們還要識別出所有的PC thunks, 并查看是否被用作函數(shù)調(diào)用。如果是, 那么也將這些計算出來的函數(shù)地址, 加入到候選ICF中。

    需要注意的是, 最終得到的常量并不都是ICF。一些常量實際上是switch-case跳轉(zhuǎn)表中條件分支的地址或函數(shù)調(diào)用點的地址。這些顯然不是函數(shù)入口點的地址, 所以我們?nèi)サ暨@兩種候選常量, 剩下的則是最終的ICF。

    4.3 控制流分析

    接下來我們通過靜態(tài)控制流分析來計算所有函數(shù)的CFG。我們嘗試識別每個間接分支的所有可能的目標。這部分的主要困難在于如何分辨出間接跳轉(zhuǎn)中所有可能的目標。在大多數(shù)常見的情況下, 間接jmp是用于跳轉(zhuǎn)表的調(diào)度執(zhí)行, 這個跳轉(zhuǎn)的所有合法目標是對應的條件分支, 這些可以通過之前發(fā)現(xiàn)的常量識別出來。因此, 對間接jmp來說, 檢查它是否與跳轉(zhuǎn)表相關(guān), 如果相關(guān)則將它與對應條件分支聯(lián)系起來。

    4.4 代碼復制

    如上所述, 為了實現(xiàn)本文提出的CFI策略, 我們需要復制ICF和DCF的交集。然而, 某些情況下, 由于編譯器的優(yōu)化, 一些ICF可能與DCF擁有相同的ret, 并且這些ret無法明確地定義其轉(zhuǎn)移類型(塊內(nèi)或塊間)。為了解決這個問題, 如果ICF與DCF這兩個函數(shù)擁有同樣的ret, 我們復制ICF。這個復制的函數(shù)在二進制程序中會成為一個新的ICF。

    接下來我們復制函數(shù)CFG中所有指令。在添加CFI校驗策略(在第五章討論)之后, 所有代碼被放置于新增的代碼段中。源代碼段被標記為不可執(zhí)行, 而所有數(shù)據(jù)段都保持不變。被復制指令中的常量也沒有變動, 所以這些指令在執(zhí)行時, 仍然能夠保證對數(shù)據(jù)段的正常訪問。

    4.5 代碼塊構(gòu)造

    代碼塊由函數(shù)的Super-CFG構(gòu)成。算法1說明了如何計算一個函數(shù)的Super-CFG。首先在函數(shù)中定位所有的直接調(diào)用, 然后通過在直接調(diào)用處加上被調(diào)用函數(shù)的Super-CFG。這個函數(shù)引入了兩條新的邊, 一條由直接調(diào)用點(如, 結(jié)點i)指向被調(diào)用點的入口, 另一條由被調(diào)用點返回到直接調(diào)用點。

    算法1.SuperCFG(CFGfunc): 基于CFG計算func的Super-CFG

    輸入: CFGfunc: 計算func函數(shù)的CFG

    輸出: sg: func的super-graph

    1: sg ← CFGfunc2: FOReachi∈Nodes(CFGfunc) DO3: IFiis a direct call to fTHEN4: sg = AddSuperCFG(sg,i,SuperCFG(f))5: END IF6: END FOR7: RETURN sg

    算法2顯示了如何構(gòu)造代碼塊和在代碼塊中劃分結(jié)點。此算法的輸入為所有ICF。首先為每個ICF計算Super-CFG, 然后基于共同邊(例如, 共同的被調(diào)用點)合并這些Super-CFG。這一過程通過實現(xiàn)。這個算法最終得到互斥的代碼塊集合, 每一個代碼塊包含了劃分好的根結(jié)點、邊界結(jié)點和內(nèi)部結(jié)點。從此算法中可以看到, 根結(jié)點來自當前塊中ICF的入口點。邊界結(jié)點來自間接調(diào)用()、間接返回()和無法靜態(tài)確定目標的間接跳轉(zhuǎn)(ijmp)的結(jié)點。內(nèi)部結(jié)點則由表示當前塊中非控制流指令和目標已確定的控制流轉(zhuǎn)移結(jié)點組成。

    我們還考慮了一種特殊的情況, 即可能存在無法進行靜態(tài)控制流分析的孤立的代碼塊。例如, 一個間接跳轉(zhuǎn)未的目標分支或是dead code等。考慮到這部分代碼也可能執(zhí)行, 所以也需要制定CFI約束。為此, 我們?yōu)槊總€孤立代碼塊生成了一個代碼塊。孤立代碼塊由Super-CFG組成, 此Super-CFG由算法1生成。其中, 代碼塊中的指令被看作“CFG”(記作CFGfunc)。并且, Super-CFG中的(如), 是為邊界結(jié)點, 它由、和ijmp組成。Super-CFG的(如)為內(nèi)部結(jié)點??紤]到孤立塊不能作為函數(shù), 因此不能被間接call調(diào)用。我們將孤立塊中的入口當作邊界結(jié)點, 而不是根結(jié)點。

    算法2.ConstructCC(ICFs): 將ICFs作為輸入生成出代碼塊

    輸入: 所有ICFs: ICFs

    輸出: 所有代碼塊: CC

    3:=(CFG);=

    5: IFis aicall or aijmpor aTHEN

    6:={}

    7: ELSE

    8:={}

    9: END IF

    10: ENDFOR

    12: ENDFOR

    14:cc=;SG=SG{}

    15:cc.border=cc.border{}

    16:cc.inner=cc.inner{}

    17:cc.root=cc.root{}

    19: IF(,) THEN

    20:cc=(cc,)

    21:cc.border=cc.border{}

    22:cc.inner=cc.inner{}

    23:cc.root=cc.root{}

    24:SG=SG{}

    25: END IF

    26: ENDFOR

    28: ENDFOR

    29: RETURN

    5 CFI實施

    在構(gòu)造代碼塊之后, 利用二進制重寫方法來寫入CFI約束規(guī)則。此部分主要通過對BinCFI進行擴展來實現(xiàn)。下面, 我們首先簡要闡述BinCFI的基本架構(gòu), 然后再詳細討論為實施本文CFI策略所做的擴展和修改。

    5.1 基礎(chǔ)架構(gòu)

    BinCFI基于反匯編結(jié)果對間接指令進行改寫, 將最終的代碼插入到新生成的代碼段中, 并修改原代碼段使其不可執(zhí)行。對于原代碼段中的每一條指令, BinCFI使用形如的地址對, 將這條指令在原代碼段中的地址關(guān)聯(lián)到新代碼段的地址。這些地址對用來進行從原代碼段到新代碼段中的地址轉(zhuǎn)換。BinCFI對所有間接轉(zhuǎn)移目標產(chǎn)生地址對, 并用兩個不同地址轉(zhuǎn)換哈希表存放, 。其中, 一個哈希表用于維護ret指令的合法目標, 另一個用于維護間接jmp和call的合法目標。所有地址轉(zhuǎn)換表都是只讀屬性。

    BinCFI對間接call/jmp和ret進行改寫。對于與跳轉(zhuǎn)表相關(guān)聯(lián)的間接jmp, 它們的操作數(shù)被改寫為*(CE+Ind)+CE這種形式, 其中CECE為常量,CE表示跳轉(zhuǎn)表相關(guān),*(CE+Ind)表示所有可能的條件分支。另外, BinCFI基于每個CE引入一個新的跳轉(zhuǎn)表, 用來存放轉(zhuǎn)換后的條件分支地址。對于剩下的間接轉(zhuǎn)移, 改寫過程如圖4所示, 首先將運行目標(例如, %eax)存到一個線程局部變量中(例如, %gs:0x40), 接著執(zhí)行地址轉(zhuǎn)換例程。

    圖5顯示的處理過程。首先檢查轉(zhuǎn)移是否違反CFI規(guī)則。如果沒有, 則進行地址轉(zhuǎn)換。%gs:0x40中存放的是原代碼段的地址, 即orig_addr。BinCFI通過相關(guān)地址轉(zhuǎn)換表尋找對應的轉(zhuǎn)換地址, 即new_addr。如果找到, 則跳轉(zhuǎn)到new_addr執(zhí)行。否則, 調(diào)用全局地址轉(zhuǎn)換例程, 來完成不同模塊間的地址轉(zhuǎn)換。

    全局地址轉(zhuǎn)換例程通過查詢GTT(全局轉(zhuǎn)換表)來進行地址轉(zhuǎn)換。對于每個加載模塊, GTT記錄了模塊基地址和地址之間的對應關(guān)系。在上述例子中, 通過%gs:40可以獲知目標模塊, 如果GTT中沒有找到該模塊, 則觸發(fā)警告; 如果找到, 控制流則轉(zhuǎn)移到目標模塊的例程, 接著進行地址檢測和轉(zhuǎn)換操作。全局地址轉(zhuǎn)換例程和GTT都被加入載入程序中, 且每次加載到不同的內(nèi)存地址。另外, 當運行時加載一個新模塊, 也會更新GTT, 加入這個模塊的相關(guān)信息。

    5.2 擴展架構(gòu)

    為實現(xiàn)本文CFI策略, 我們對BinCFI進行了擴展和修改。

    擴展地址轉(zhuǎn)換表

    我們對地址轉(zhuǎn)換表進行兩項擴展。首先, 通過代碼復制, 將新引入的間接轉(zhuǎn)移目標引入新表項, 其中包含復制的函數(shù)和返回調(diào)用點。接著, 修改復制函數(shù)的有關(guān)表項。因此, 如果原函數(shù)在運行時被調(diào)用, 則實際執(zhí)行的是對應的新函數(shù)。

    我們以圖2代碼中的foo為例進行說明。圖6(a)展示了BinCFI記錄的foo地址對, 圖6(b)顯示BinCC的擴展, 在表中加入了函數(shù)入口<5’, 5’>與調(diào)用點<6’, 6’>。其中, 5_new被修改成5’。當foo在被間接調(diào)用時, 將實際執(zhí)行foo’。

    雖然代碼復制會引入新的間接轉(zhuǎn)移目標, 但并不會影響保護效果。由于新加入目標的數(shù)量很少, 因此僅需復制很小比例(見6.1節(jié))的函數(shù)。此外, 新的控制流轉(zhuǎn)移也使用的相同的方法, 實驗結(jié)果表明, 不會對保護效果造成影響。

    塊內(nèi)策略實施

    這種策略用來約束代碼塊中代表間接轉(zhuǎn)移的內(nèi)部結(jié)點, 如直接ret和跳轉(zhuǎn)表相關(guān)的間接jmp。它們的目標是確定的, 可以從代碼塊構(gòu)成的Super-CFG中獲得。

    為了約束直接ret, 我們?yōu)槊總€ret都準備了一個獨立的地址轉(zhuǎn)換哈希表來存儲合法目標。對每個直接ret, 其目標為與Super-CFG相關(guān)聯(lián)的調(diào)用點。對直接ret指令的改寫過程如圖7所示。插在兩個指令中的和表明了對應地址轉(zhuǎn)換表的具體位置。我們用另一個線程局部變量%gs:0x50來存儲第一個指令地址——。轉(zhuǎn)換例程在運行時使用%gs:0x50來獲取和以定位地址轉(zhuǎn)換表, 接著進行地址校驗和轉(zhuǎn)換操作。

    對與跳轉(zhuǎn)表相關(guān)的間接jmp, 也可以使用相似的結(jié)構(gòu)。然而, BinCFI已經(jīng)實現(xiàn)了對這類jmp轉(zhuǎn)移的約束, 所以, 我們沿用BinCFI對這類jmp的改寫方式。

    塊間策略實施

    我們按照3.2節(jié)中所述的策略, 對相應執(zhí)行進行改寫。改寫方式與圖4相似。每種控制流轉(zhuǎn)移都有自己的地址轉(zhuǎn)換表和地址轉(zhuǎn)換例程來實現(xiàn)地址檢查與轉(zhuǎn)換。

    我們需要對PLT條目中的間接jmp進行特殊處理。這類跳轉(zhuǎn)用于動態(tài)符號解析。一般只有兩種合法目標, 一種是下一條指令的地址, 也就是在符號解析之前初始化的值; 另一種是在運行時確定的符號解析地址。在這些動態(tài)地址解析后, 對這些jmp做出約束, 使其只能跳轉(zhuǎn)至對應的動態(tài)解析符號地址。此外, 我們把間接跳轉(zhuǎn)的所有目標安排在一個地址轉(zhuǎn)換表中, 并將表放在新引入的只讀數(shù)據(jù)域中。另外, 通過修改加載器使其能將數(shù)據(jù)域的屬性改為可寫, 然后用符號解析后的解析地址更新對應表項, 最后將可寫屬性改回。

    除此之外, , 我們將孤立塊中的間接ret定義為孤立ret。由于不能通過靜態(tài)分析識別孤立塊的調(diào)用方, 因此, 允許孤立ret返回至任何函數(shù)調(diào)用點。

    C++異常

    我們還需要考慮C++異常。在C++程序中, 異常處理的必要信息存儲在域中。當異常被觸發(fā), 系統(tǒng)會使用當前執(zhí)行的上下文來執(zhí)行棧展開操作, 識別對應的catch分支。由于中沒有我們通過代碼復制引入新代碼的異常元數(shù)據(jù), 當一個復制函數(shù)包含C++異常邏輯且異常被觸發(fā)時, 棧展開過程無法找到異常處理函數(shù), 于是程序?qū)惓_\行。為了避免這個問題, 我們不復制包含C++異常邏輯的函數(shù), 允許這些函數(shù)中的ret返回至任意調(diào)用點。

    6 實驗評估

    我們通過從SPEC CPU 2006測試集編譯得到的二進制程序?qū)inCC進行評估。編譯器為GCC 4.6.1, 編譯優(yōu)化級別為-O2。實驗環(huán)境為1.0GB內(nèi)存、20G硬盤、單核的Ubuntu 11.10 32位虛擬機。

    表1 復制函數(shù)統(tǒng)計數(shù)據(jù)

    6.1 代碼復制評估

    CFI策略實施的一個關(guān)鍵操作是代碼復制。我們需要評估一下復制的代碼量。

    表1列出了ICF和DCF的數(shù)量, 以及每個程序的所有函數(shù)和復制函數(shù)的總量。從中可以看到, 為了實現(xiàn)本文CFI策略, 我們僅需要復制少量的函數(shù)(約占所有函數(shù)的3.4%)。

    另外從表1中, 我們發(fā)現(xiàn)C++程序(如omnetpp和soplex)通常比C程序需要更多的函數(shù)復制。在這些C++程序中, 大多數(shù)的復制函數(shù)是C++虛擬函數(shù)。函數(shù)指針在虛擬表中被識別為ICF, 它們既能被間接調(diào)用, 也能被直接調(diào)用(例如, 通過同一個類的繼承函數(shù)), 所以我們對這些函數(shù)進行復制。

    圖8顯示了示例中需要復制指令的百分比。平均而言, 只需要復制7%的二進制指令。

    6.2 間接轉(zhuǎn)移的度量

    BinCFI引入平均間接目標縮減量(AIR)來評估CFI防護粒度。公式定義如下。

    在這個式子里,T表示間接轉(zhuǎn)換i的合法目標集。表示二進制編碼的長度。對于BinCC, 因為需要對代碼進行復制, 因此, 編碼的長度、間接轉(zhuǎn)換的數(shù)目, 以及合法目標集T有可能會增加。考慮到這些因素, 計算AIR結(jié)果表明BinCFI為98.86%, 而BinCC為99.54%。

    AIR這個評估指標有失客觀, 因為二進制中S要遠高于T, 這使得粗粒度的CFI方案都可以獲得一個較高的AIR值。所以, 我們提出了一種新的度量方法RAIR(Relative AIR)。RAIR用來說明BinCC與BinCFI比較, 對間接控制流轉(zhuǎn)移合法目標的縮減程度。

    其中,T’表示BinCFI中間接轉(zhuǎn)換i的合理目標,T表示BinCC中i的合理目標。圖9列出了關(guān)于這個指標的一些統(tǒng)計數(shù)據(jù)。平均來說, BinnCC比BinCFI減少了81.34%的間接控制流轉(zhuǎn)移目標。

    相比BinCFI, BinCC縮減了每種間接轉(zhuǎn)換的合理目標。我們用下面的表達式來評估每種間接控制流轉(zhuǎn)移的合法目標的平均數(shù)量。

    在上式中,i是某個特定種類的間接控制流指令;T表示在CFI執(zhí)行的二進制代碼中i的合法目標集; N表示二進制程序中所有間接控制流轉(zhuǎn)移的數(shù)量。我們計算三種間接控制流轉(zhuǎn)移的AVG值, 并計算, 即BinCC與BinCFI相比, 對控制流轉(zhuǎn)移合法目標縮減的百分比。圖10, 11, 12分別展示了BinCC對間接call, 間接jmp和間接ret縮減的百分比。

    在圖10中, 相比BinCFI, BinCC為每一個間接call縮減了40%的合法目標。根據(jù)BinCFI實現(xiàn), 所有可能的常量代碼指針是間接調(diào)用的潛在目標。然而一些常量實際上是函數(shù)返回地址和跳轉(zhuǎn)表中的分支地址, 并不是函數(shù)。我們在實現(xiàn)中已經(jīng)把它們從目標集中移除。

    對于間接jmp, 很多是在PLT中, 這些跳轉(zhuǎn)有明確的目標, 即被解析的符號地址。因此, 相比BinCFI, BinCC為間接jmp減少了35%的合法目標集, 如圖11所示。

    如圖12所示, 相比BinCFI, BinCC為ret指令平均減少了87%的合法目標。從圖中可以看到, gcc提升幅度最大。這是由于在這個二進制程序中, 直接ret比間接ret多, 且每一個直接ret的合法目標遠少于間接ret的合法目標。

    6.3 ROP攻擊評估

    由于ASLP和DEP的引入, ROP已成為攻擊者常用的攻擊手段。CCFIR和BinCFI等CFI解決方案能夠有效緩解傳統(tǒng)ROP攻擊, 然而, 研究工作[5,10]表明在一些情況下攻擊者仍然能夠通過call-preceded gadget繞過CFI的防護, 實施ROP攻擊。

    為了評估BinCC在抵御ROP攻擊的能力, 我們提出評估指標——GS(GadgetSurvivability)來說明在CFI防護下, 利用call-preceded gadget實現(xiàn)ROP的難度。定義如下。

    這個指標旨在評估: 假設在一個CFI加固的二進制程序中, 一條ret指令被攻擊者完全掌控, 那么這個ret能夠返回到一個call-preceded gadget的幾率。

    定義中C表示在CFI策略下ret指令r的合法目標集,表示所有的ret指令構(gòu)成的集合,表示由所有call-preceded gadget構(gòu)成的集合。對于ret指令r, 能夠達到|C|個call-preceded gadget。所以, 它被控制并且能返回一個call-preceded gadget的概率是。在考慮所有ret指令之后, 平均概率是或。

    對于BinCC來說, 對于每一個r, |C|等于||, 所以這個指標值是100%。這符合實際情況, 即: 攻擊者能夠在CFI下返回到任一call-preceded gadget。

    表2 BinCC與BinCFI中可用的gadget比例對比

    對于BinCC而言, GS值將很小。因為BinCC對直接ret和間接ret, 都顯著縮減了它們的合法目標。當被控制的ret是一個間接ret時, 它可以返回到任一間接調(diào)用點; 如果ret是一個直接ret, 則僅允許返回至以特定直接調(diào)用點起始的call-preceded gadget。表2展示了BinCC和BinCFI對所有的測試用例求得的GS值。從表中可知, BinCC顯著降低了利用 call-preceded gadget 實現(xiàn)ROP攻擊的可能。具體而言, 與BinCFI的100%相比, BinCC只有大約0.7%的可能。

    6.4 性能開銷

    我們對空間和時間的開銷進行評估。對于空間開銷, 主要比較BinCC和BinCFI地址轉(zhuǎn)換表的增長量, 同時對增加的編碼長度及所有文件比原始文件的增加量進行評估。對于時間的開銷, 我們先執(zhí)行BinCC和BinCFI, 然后進行比較。

    6.4.1 空間開銷

    由于采用相同的BinCC架構(gòu)來改寫二進制程序, 因此文件大小增加的原因和BinCFI的相同, 即新增的代碼段和地址轉(zhuǎn)換哈希表。對于BinCC, 新代碼段較原始代碼長度增加了1.4倍; 對于BinCFI, 這部分增加了1.2倍。BinCC引入了四種表存儲間接call, 間接jmp, 間接ret和直接ret的合法目標, 而BinCFI只使用兩種表來存儲間接call、jmp和ret??傮w而言, BinCC引入的表的大小比BinCFI減小了20%。這是由于哈希表大小是2的冪, 而BinCC顯著縮減了間接控制流的合法目標, 使得表的大小小于BinCFI中表的大小。另外, BinCC生成文件的大小比原始的二進制大小增加125%, 比BinCFI低了14%。

    6.4.2 時間開銷

    圖13展示了由BinCC和BinCFI加固的二進制程序的實際運行時間。在實驗環(huán)境中, BinCC加固的程序較原始程序在運行時間開銷上增加22%, 較BinCFI加固的程序僅增加4%。這是因為BinCC在對間接控制流指令進行替換時, 增加了額外的指令, 來實現(xiàn)更嚴格的CFI約束策略??紤]到數(shù)據(jù)和指令的對齊會對程序執(zhí)行效率產(chǎn)生影響, 所以, 我們在二進制重寫操作前, 對一些數(shù)據(jù)和指令進行必要的對齊操作, 以此來提升訪問數(shù)據(jù)和指令執(zhí)行的效率, 減少時間開銷。我們將在后續(xù)工作中進行完善。

    7 討論

    較已有的二進制CFI解決方案, BinCC對間接控制流轉(zhuǎn)移進行了更為細粒度的約束, 顯著縮減了ret的合法目標, 使得可利用的call-preceded gadget顯著減少。然而, 對于indirect call轉(zhuǎn)移目標的約束, 盡管已經(jīng)將轉(zhuǎn)移目標限制在間接被調(diào)函數(shù), 但是仍然存在被攻擊者利用的可能。攻擊者可以將indirect call操作數(shù)篡改為合法目標集合中的任何一個地址, 繞過對indirect call的CFI的檢測, 可能造成程序運行崩潰或拒絕服務攻擊等。這是針對二進制程序的CFI解決方案共同面臨的問題。由于不依賴程序源代碼和調(diào)試符號信息, 所以無法構(gòu)造完整CFG, 也無法準確確定indirect call的目標函數(shù)。研究工作[18]針對特定一類的間接函數(shù)(C++虛函數(shù))的調(diào)用提出了約束和檢驗方法, 具體是對調(diào)用虛函數(shù)的indirect call進行加固, 僅允許調(diào)用目標為它所在類或其他同類族(class hierarchy)中的虛函數(shù)。在下一步工作中, 我們可以結(jié)合這種方法進一步提升BinCC對控制流指令的約束粒度。

    另外, 當前BinCC不支持動態(tài)生成代碼(例如JIT代碼, 或者混淆代碼等)。而這些問題也是面向二進制CFI解決方案存在的共同問題。我們將在下一步工作中對這部分內(nèi)容進行系統(tǒng)的研究。

    8 小結(jié)

    對于面向二進制程序的CFI方法, 由于不依賴于程序源代碼和調(diào)試符號, 所以已有解決方案采用粗粒度的CFI策略, 雖然能夠防范普通控制流劫持攻擊, 但是對于復雜ROP攻擊防護能力有限。攻擊者仍然能夠構(gòu)造利用繞過CFI規(guī)則的ROP鏈, 實現(xiàn)目的。

    本部分提出了一種新的CFI解決方案BinCC, 為二進制程序?qū)嵤┘毩6鹊目刂屏魍暾孕r灐T摲椒ㄍㄟ^復制部分程序代碼和靜態(tài)分析, 將二進制程序劃分為多個互斥的代碼塊。進一步將二進制程序中所有的控制流指令歸類為代碼塊內(nèi)轉(zhuǎn)移指令和代碼塊間的轉(zhuǎn)移指令, 并為這兩種類型的控制流指令分別實施不同的轉(zhuǎn)移約束條件。BinCC嚴格地限定了間接控制流轉(zhuǎn)移的合法目標, 顯著提高控制流轉(zhuǎn)移的防護效果。為了檢驗我們所提出的控制流完整性約束的策略, 我們提出若干新的評估指標, 并將BinCC和BinCFI進行了比較。實驗結(jié)果表明, BinCC具有較低的時間開銷和空間開銷。

    致謝 我們感謝幫助完成這篇論文的匿名評論者的反饋。這項工作是在Minghua Wang作為美國雪城大學的訪問學生時完成的。本研究由國家科學基金會資助# 1054605, 美國空軍研究實驗室資助# FA8750- 15-2-0106, 中國的國家基礎(chǔ)研究發(fā)展計劃資助# 2012 CB315804, 中國的國家自然科學基金資助# 91418206, 以及中國國家留學基金委(CSC)等機構(gòu)出資支持。本材料中任何意見、發(fā)現(xiàn)和結(jié)論都屬于作者, 不代表資金會機構(gòu)的觀點。

    [1] M. Abadi, M. Budiu, ú. Erlingsson, and J. Ligatti. Control-flow integrity principles, implementations, and applications., 13(1): 4, 2009.

    [2] S. Andersen and V. Abella. Data execution prevention. changes to functionality in microsoft windows xp service pack 2, part 3: Memory protection technologies, 2004.

    [3] T. Bletsch, X. Jiang, and V. Freeh. Mitigating code-reuse attacks with control-flow locking.In Proceedings of the 27 Annual Computer Security Applications Conference, pages 353–362. ACM, 2011.

    [4] T. Bletsch, X. Jiang, V. W. Freeh, and Z. Liang. Jump-oriented programming: a new class of code-reuse attack., pages 30–40. ACM, 2011.

    [5] N. Carlini and D. Wagner. Rop is still dangerous: Breaking modern defenses., 2014.

    [6] Y. Cheng, Z. Zhou, M. Yu, X. Ding, and R. H. Deng.Ropecker: A generic and practical approach for defending against rop attacks., 2014.

    [7] L. Davi, A.-R. Sadeghi, and M. Winandy. Ropdefender: A detection tool to defend against return-oriented programming attacks., Computer and Communications Security, pages 40–51. ACM, 2011.

    [8] U. Erlingsson, M. Abadi, M. Vrable, M. Budiu, and G. C.Necula. Xfi: Software guards for system address spaces., pages 75–88. USENIX Association, 2006.

    [9] I. Evans, S. Fingeret, J. González, U. Otgonbaatar, T. Tang, H. Shrobe, S. Sidiroglou-Douskos, M. Rinard, and H. Okhravi. Missing the point (er): On the effectiveness of code pointer integrity1., 2015.

    [10] E. Goktas, E. Athanasopoulos, H. Bos, and G. Portokalidis. Out of control: Overcoming control-flow integrity., 2014 IEEE Symposium on, pages 575–589. IEEE, 2014.

    [11] D. Jang, Z. Tatlock, and S. Lerner. Safedispatch: Securing c++ virtual calls from memory corruption attacks., 2014.

    [12] V. Kuznetsov, L. Szekeres, M. Payer, G. Candea, R. Sekar, and D. Song. Code-pointer integrity., 2014.

    [13] S. McCamant and G. Morrisett. Evaluating sfi for a cisc architecture., page 15, 2006.

    [14] V. Mohan, P. Larsen, S. Brunthaler, K. Hamlen, and M. Franz. Opaque control-flow integrity., 2015.

    [15] B. Niu and G. Tan. Modular control-flow integrity., page 58. ACM, 2014.

    [16] B. Niu and G. Tan. Rockjit: Securing just-in-time compilation using modular control-flow integrity., pages 1317–1328. ACM, 2014.

    [17] M. Payer, A. Barresi, and T. R. Gross. Fine-grained control-flow integrity through binary hardening., and Vulnerability Assessment, 2015.

    [18] A. Prakash, X. Hu, and H. Yin. vfguard: Strict protection for virtual function calls in cots c++ binaries., NDSS, volume 15, 2015.

    [19] A. Prakash, H. Yin, and Z. Liang. Enforcing system-wide control flow integrity for exploit detection and diagnosis. In Proceedings of the 8th ACM SIGSAC symposium on Information,, pages 311–322. ACM, 2013.

    [20] R. Roemer, E. Buchanan, H. Shacham, and S. Savage. Return-oriented programming: Systems, languages, and applications., 15(1): 2, 2012.

    [21] H. Shacham. The geometry of innocent flesh on the bone: Return-into-libc without function calls (on the x86)., pages 552–561. ACM, 2007.

    [22] P. Team. Pax address space layout randomization, 2003.

    [23] C. Tice, T. Roeder, P. Collingbourne, S. Checkoway, ú. Erlingsson, L. Lozano, and G. Pike. Enforcing forward-edge control-flow integrity in gcc&llvm., 2014.

    [24] R. Wahbe, S. Lucco, T. E. Anderson, and S. L. Graham.Efficient software-based fault isolation., volume 27, pages 203–216.ACM, 1994.

    [25] B. Yee, D. Sehr, G. Dardyk, J. B. Chen, R. Muth, T. Ormandy, S. Okasaka, N. Narula, and N. Fullagar. Native client: A sandbox for portable, untrusted x86 native code., 2009 30th IEEE Symposium on, pages 79–93. IEEE, 2009.

    [26] 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., 2013 IEEE Symposium on, pages 559–573. IEEE, 2013.

    [27] M. Zhang and R. Sekar. Control flow integrity for cots binaries., pages 337–352, 2013.

    王明華 現(xiàn)為Baidu X-Lab高級研發(fā)工程師。2016年1月在中國科學院大學計算機應用技術(shù)專業(yè)獲得博士學位。研究興趣包括: 程序安全分析、軟件漏洞分析等。Email: wmhfzh@163.comHeng Yin 美國雪城大學副教授。研究領(lǐng)域包括惡意代碼檢測和分析、軟件漏洞分析、移動應用安全性分析、虛擬化安全等。Email: heyin@syr.edu Abhishek Vasisht Bhaskar 現(xiàn)為美國雪城大學碩士研究生。研究興趣包括:程序安全分析、虛擬化安全等。Email: abhaskar@syr.edu蘇璞睿 中國科學院研究員、博士生導師, 研究方向為可信計算與信息保障。研究興趣包括: 惡意代碼動態(tài)逆向分析、移動終端應用安全、軟件漏洞分析與評估等。Email: supurui@tca.iscas.ac.cn 馮登國 中國科學院研究員、博士生導師, 研究方向為可信計算與信息保障。研究興趣包括: 密碼算法設計與分析、安全協(xié)議設計與分析、PKI理論與關(guān)鍵技術(shù)、可信計算理論與關(guān)鍵技術(shù)、信息與網(wǎng)絡安全等。Email: feng@tca. iscas.ac.cn

    Binary Code Continent: Finer-Grained Control Flow Integrity for Stripped Binaries

    Minghua Wang1,2,4, Heng Yin2, Abhishek Vasisht Bhaskar2, Purui Su1,3, Dengguo Feng1

    1Trusted Computing and Information Assurance Laboratory, Institute of Software, Chinese Academy ofSciences2Syracuse University3State Key Laboratory of Computer Science, Institute of Software, Chinese Academy of Sciences4University of Chinese Academy of Sciences

    Control Flow Integrity (CFI) is an effective technique to mitigate threats such as code-injection and code-reuse attacks in programs by protecting indirect transfers. For stripped binaries, a CFI policy has to be made conservatively due to the lack of source code level semantics. Existing binary-only CFI solutions such as BinCFI and CCFIR demonstrate the ability to protectstripped binaries, but the policies they apply are too permissive, allowing sophisticated code-reuse attacks. In this paper, we propose a new binary-only CFI protection scheme called BinCC, which applies static binary rewriting to provide finer-grained protection for x86 stripped ELF binaries. Through code duplication and static analysis, we divide the binary code into several mutually exclusive code continents. We further classify each indirect transfer within a code continent as either an Intra-Continent transfer or an Inter-Continent transfer, and apply separate, strict CFI polices to constrain these transfers. To evaluate BinCC, we introduce new metrics to estimate the average amount of legitimate targets of each kind of indirect transfer as well as the difficulty to leverage call preceded gadgets to generate ROP exploits. Compared to the state of the art binary-only CFI, BinCFI, the experimental results show that BinCC significantly reduces the legitimate transfer targets by 81.34% and increases the difficulty for adversaries to bypass CFI restriction to launch sophisticated ROP attacks. Also, BinCC achieves a reasonable performance, around 14% of the space overhead decrease and only 4% runtime overhead increase as compared to BinCFI.

    control flow integrity

    TP309.7

    王明華, 于2016年在中國科學院軟件研究所可信計算與信息保障實驗室獲得博士學位。現(xiàn)為Baidu X-Lab高級研發(fā)工程師。研究領(lǐng)域為信息安全。研究興趣包括: 程序安全分析、軟件漏洞分析。Email: wmhfzh@163.com。

    本課題得到國家科學基金會資助# 1054605, 美國空軍研究實驗室資助# FA8750-15-2-0106, 中國的國家基礎(chǔ)研究發(fā)展計劃資助# 2012 CB315804, 中國的國家自然科學基金資助# 91418206, 以及中國國家留學基金委(CSC)等機構(gòu)出資支持。

    2015-11-18; 修改日期: 2016-3-15; 定稿日期: 2016-4-23

    DOI號 10.19363/j.cnki.cn10-1380/tn.2016.02.006

    本文是Binary Code Continent: Finer-Grained Control Flow Integrity for Stripped Binaries(發(fā)表于ACSAC 2015)的擴展。

    猜你喜歡
    控制流二進制結(jié)點
    用二進制解一道高中數(shù)學聯(lián)賽數(shù)論題
    抵御控制流分析的Python 程序混淆算法
    工控系統(tǒng)中PLC安全漏洞及控制流完整性研究
    電子科技(2021年2期)2021-01-08 02:25:58
    抵御控制流分析的程序混淆算法
    有趣的進度
    二進制在競賽題中的應用
    Ladyzhenskaya流體力學方程組的確定模與確定結(jié)點個數(shù)估計
    基于控制流隱藏的代碼迷惑
    基于Raspberry PI為結(jié)點的天氣云測量網(wǎng)絡實現(xiàn)
    一個生成組合的新算法
    精品午夜福利在线看| 可以在线观看毛片的网站| 日本熟妇午夜| 黄片无遮挡物在线观看| 淫秽高清视频在线观看| 亚洲成人久久爱视频| 亚洲av成人精品一区久久| 国产毛片a区久久久久| 大型黄色视频在线免费观看| 亚洲国产欧美人成| 能在线免费观看的黄片| 欧美最黄视频在线播放免费| 日韩一本色道免费dvd| 亚洲18禁久久av| 国产成人影院久久av| 日本三级黄在线观看| 少妇熟女aⅴ在线视频| 亚洲av中文av极速乱| 一边亲一边摸免费视频| 久99久视频精品免费| 亚洲人成网站高清观看| 日本-黄色视频高清免费观看| 国内揄拍国产精品人妻在线| 午夜福利在线观看吧| 一卡2卡三卡四卡精品乱码亚洲| 亚洲性久久影院| 神马国产精品三级电影在线观看| 成人漫画全彩无遮挡| 男人和女人高潮做爰伦理| 亚洲人与动物交配视频| 给我免费播放毛片高清在线观看| 在线观看午夜福利视频| 性插视频无遮挡在线免费观看| 日日摸夜夜添夜夜爱| 一级毛片我不卡| 久久久久网色| 日本撒尿小便嘘嘘汇集6| 干丝袜人妻中文字幕| 色尼玛亚洲综合影院| 久久久精品大字幕| 免费一级毛片在线播放高清视频| 久久久久久久久久成人| 岛国毛片在线播放| 高清午夜精品一区二区三区 | 亚洲一级一片aⅴ在线观看| 欧美日韩乱码在线| 高清毛片免费看| 网址你懂的国产日韩在线| 少妇被粗大猛烈的视频| 午夜福利在线观看吧| 亚洲国产精品久久男人天堂| 婷婷精品国产亚洲av| 热99在线观看视频| 午夜福利视频1000在线观看| 一级毛片aaaaaa免费看小| 日本黄色视频三级网站网址| 国产私拍福利视频在线观看| 久久综合国产亚洲精品| 国产精品久久久久久久久免| 欧美潮喷喷水| 精品熟女少妇av免费看| 在线免费观看的www视频| 国模一区二区三区四区视频| 久久久久久久亚洲中文字幕| 久久精品人妻少妇| 午夜亚洲福利在线播放| 日本在线视频免费播放| 在线天堂最新版资源| 97超视频在线观看视频| 日韩亚洲欧美综合| 成人一区二区视频在线观看| 欧美日本亚洲视频在线播放| 卡戴珊不雅视频在线播放| 亚洲久久久久久中文字幕| 一个人看的www免费观看视频| 国产蜜桃级精品一区二区三区| 亚洲高清免费不卡视频| 日本一本二区三区精品| 日韩人妻高清精品专区| 国产黄色小视频在线观看| 91精品国产九色| 青春草视频在线免费观看| 赤兔流量卡办理| 亚洲性久久影院| 九九在线视频观看精品| 国产精品福利在线免费观看| 国产成人精品婷婷| 免费搜索国产男女视频| 精品一区二区三区视频在线| 国产激情偷乱视频一区二区| 亚洲欧美日韩无卡精品| 中国美女看黄片| 国产亚洲av片在线观看秒播厂 | 精品人妻一区二区三区麻豆| 国产高潮美女av| 一级毛片电影观看 | 欧美高清性xxxxhd video| .国产精品久久| 久久精品国产清高在天天线| 乱系列少妇在线播放| 成人午夜精彩视频在线观看| 亚洲乱码一区二区免费版| 欧美一区二区亚洲| 日韩欧美国产在线观看| 久久热精品热| 色5月婷婷丁香| 国内少妇人妻偷人精品xxx网站| 九九热线精品视视频播放| 免费在线观看成人毛片| 久久精品国产亚洲av涩爱 | 亚洲在线自拍视频| 22中文网久久字幕| 日本爱情动作片www.在线观看| 国产精品久久电影中文字幕| 色哟哟哟哟哟哟| 国国产精品蜜臀av免费| 校园春色视频在线观看| 久久精品91蜜桃| 变态另类丝袜制服| 欧美成人免费av一区二区三区| 成年版毛片免费区| 久久精品人妻少妇| 特级一级黄色大片| 亚洲国产精品成人综合色| 久久久久久久午夜电影| 中国国产av一级| 成人性生交大片免费视频hd| 亚洲av成人精品一区久久| 亚洲电影在线观看av| 2021天堂中文幕一二区在线观| 亚洲国产欧美在线一区| 亚洲国产精品成人综合色| 男人狂女人下面高潮的视频| av在线亚洲专区| 99国产极品粉嫩在线观看| 亚洲熟妇中文字幕五十中出| 男人的好看免费观看在线视频| 精品人妻一区二区三区麻豆| 国产高清不卡午夜福利| 国产蜜桃级精品一区二区三区| 国模一区二区三区四区视频| 成年免费大片在线观看| 久久久久久久亚洲中文字幕| 啦啦啦韩国在线观看视频| 欧美不卡视频在线免费观看| 日日啪夜夜撸| 99久久中文字幕三级久久日本| 国国产精品蜜臀av免费| 午夜免费激情av| 亚洲人成网站在线播| 欧美+日韩+精品| 只有这里有精品99| 国产高清视频在线观看网站| 男人的好看免费观看在线视频| 国内久久婷婷六月综合欲色啪| 国产精品.久久久| 91av网一区二区| 青春草亚洲视频在线观看| 一本一本综合久久| 最近最新中文字幕大全电影3| 欧美激情久久久久久爽电影| 国产三级中文精品| 神马国产精品三级电影在线观看| 人妻夜夜爽99麻豆av| 看非洲黑人一级黄片| 中文字幕av成人在线电影| 中出人妻视频一区二区| 国产又黄又爽又无遮挡在线| 成人一区二区视频在线观看| 亚洲国产精品合色在线| 国产极品精品免费视频能看的| 小蜜桃在线观看免费完整版高清| 一本精品99久久精品77| 成人二区视频| 国产美女午夜福利| 国产精品一区www在线观看| 精品人妻熟女av久视频| 成人av在线播放网站| 人妻少妇偷人精品九色| 国产美女午夜福利| 成人av在线播放网站| 亚洲精品久久国产高清桃花| 亚洲精品色激情综合| 日日啪夜夜撸| 色哟哟哟哟哟哟| 国产爱豆传媒在线观看| 99久久久亚洲精品蜜臀av| 成人毛片a级毛片在线播放| 成年女人看的毛片在线观看| 日本黄大片高清| 我的老师免费观看完整版| 久久久久久九九精品二区国产| 国产乱人视频| 大型黄色视频在线免费观看| 国产极品天堂在线| 99久久久亚洲精品蜜臀av| 欧美一区二区精品小视频在线| 中文字幕av成人在线电影| 只有这里有精品99| 91av网一区二区| 国产精品av视频在线免费观看| 色综合亚洲欧美另类图片| 99久久中文字幕三级久久日本| 精品午夜福利在线看| 国产一区二区亚洲精品在线观看| 亚洲最大成人av| 午夜亚洲福利在线播放| 99久久无色码亚洲精品果冻| 99riav亚洲国产免费| 国产老妇伦熟女老妇高清| 狂野欧美白嫩少妇大欣赏| 亚洲一区高清亚洲精品| 午夜福利成人在线免费观看| 国产乱人偷精品视频| 国产日韩欧美在线精品| 美女被艹到高潮喷水动态| 国产精品一区www在线观看| 午夜福利成人在线免费观看| 又爽又黄无遮挡网站| 精品99又大又爽又粗少妇毛片| 亚洲久久久久久中文字幕| av在线老鸭窝| 亚洲天堂国产精品一区在线| 日韩大尺度精品在线看网址| 少妇的逼水好多| 国产精品99久久久久久久久| 国产极品精品免费视频能看的| 看非洲黑人一级黄片| 国产精品,欧美在线| 综合色丁香网| 国产中年淑女户外野战色| 国产亚洲精品av在线| 亚洲真实伦在线观看| 日本av手机在线免费观看| 99久国产av精品| 变态另类成人亚洲欧美熟女| 久久久久久久久久黄片| 国产精品久久久久久精品电影小说 | 午夜精品国产一区二区电影 | 亚洲国产精品成人久久小说 | 少妇被粗大猛烈的视频| 亚洲熟妇中文字幕五十中出| 午夜爱爱视频在线播放| 精品少妇黑人巨大在线播放 | or卡值多少钱| 一本久久精品| 欧美丝袜亚洲另类| 在线播放国产精品三级| 国产精品电影一区二区三区| av专区在线播放| 亚洲人成网站在线观看播放| 亚洲性久久影院| 夫妻性生交免费视频一级片| 久久精品久久久久久噜噜老黄 | 变态另类成人亚洲欧美熟女| 少妇被粗大猛烈的视频| 激情 狠狠 欧美| 少妇人妻精品综合一区二区 | 久久久色成人| 麻豆成人午夜福利视频| 老司机影院成人| 国产精华一区二区三区| 国产精品嫩草影院av在线观看| 亚洲va在线va天堂va国产| 国产乱人偷精品视频| 中文亚洲av片在线观看爽| 亚州av有码| 国产真实乱freesex| 18+在线观看网站| 国产真实伦视频高清在线观看| 青青草视频在线视频观看| 免费黄网站久久成人精品| 欧美日韩综合久久久久久| av国产免费在线观看| 成年女人永久免费观看视频| 最近中文字幕高清免费大全6| 一本一本综合久久| 内地一区二区视频在线| 看十八女毛片水多多多| 国产成人91sexporn| 1024手机看黄色片| 天堂网av新在线| 国产乱人视频| 最近中文字幕高清免费大全6| 日本黄色片子视频| 国产精品国产高清国产av| 欧美日韩精品成人综合77777| 好男人视频免费观看在线| 乱码一卡2卡4卡精品| 伊人久久精品亚洲午夜| 久久精品夜夜夜夜夜久久蜜豆| 我的女老师完整版在线观看| 成人特级av手机在线观看| 久久九九热精品免费| 欧美潮喷喷水| 天天躁夜夜躁狠狠久久av| 国产精品一及| 插阴视频在线观看视频| 啦啦啦观看免费观看视频高清| 日产精品乱码卡一卡2卡三| 亚洲婷婷狠狠爱综合网| 国产激情偷乱视频一区二区| 久久精品国产自在天天线| 一本一本综合久久| 亚洲,欧美,日韩| 在线免费观看的www视频| 中文字幕精品亚洲无线码一区| 国产精品一区二区三区四区免费观看| 亚洲国产欧洲综合997久久,| 免费看日本二区| 伊人久久精品亚洲午夜| 日韩欧美三级三区| 国产日本99.免费观看| 国产精品一区二区在线观看99 | 麻豆一二三区av精品| 精品人妻视频免费看| 国内精品宾馆在线| 内射极品少妇av片p| 五月玫瑰六月丁香| 国产一级毛片在线| 精品熟女少妇av免费看| 观看美女的网站| 国产精品麻豆人妻色哟哟久久 | 欧美人与善性xxx| 久久久久久久久久黄片| 韩国av在线不卡| 一级黄色大片毛片| 又粗又硬又长又爽又黄的视频 | 国产精品人妻久久久影院| 国产精品久久久久久精品电影| 欧美zozozo另类| 性欧美人与动物交配| 亚洲丝袜综合中文字幕| 熟女电影av网| 久久久精品94久久精品| 九九爱精品视频在线观看| 边亲边吃奶的免费视频| 最近中文字幕高清免费大全6| 国内精品久久久久精免费| 日本色播在线视频| 国产精品嫩草影院av在线观看| 欧美激情国产日韩精品一区| 亚洲18禁久久av| 免费看日本二区| 在线观看66精品国产| 日本av手机在线免费观看| 小蜜桃在线观看免费完整版高清| 日韩制服骚丝袜av| 国产精品嫩草影院av在线观看| 一个人看视频在线观看www免费| 国产精品一及| 色视频www国产| 亚洲一区二区三区色噜噜| 精品无人区乱码1区二区| 看黄色毛片网站| 久久这里只有精品中国| 美女 人体艺术 gogo| 欧美激情久久久久久爽电影| 国产一区二区亚洲精品在线观看| 尤物成人国产欧美一区二区三区| 男人舔奶头视频| 日本一二三区视频观看| 久久鲁丝午夜福利片| 床上黄色一级片| 久久精品国产亚洲av天美| 国产av在哪里看| 日韩亚洲欧美综合| 黄色一级大片看看| 日韩强制内射视频| 十八禁国产超污无遮挡网站| 日韩中字成人| 中文字幕精品亚洲无线码一区| 亚洲中文字幕日韩| 国产高清视频在线观看网站| 美女内射精品一级片tv| 日本一本二区三区精品| 男女啪啪激烈高潮av片| 少妇猛男粗大的猛烈进出视频 | 少妇熟女欧美另类| 成人永久免费在线观看视频| 日本与韩国留学比较| 国产成人精品婷婷| 非洲黑人性xxxx精品又粗又长| 亚洲av二区三区四区| 97在线视频观看| 国产中年淑女户外野战色| 看黄色毛片网站| 九九久久精品国产亚洲av麻豆| 久久精品夜色国产| .国产精品久久| 中国国产av一级| 欧美一级a爱片免费观看看| 少妇被粗大猛烈的视频| 日韩 亚洲 欧美在线| 人体艺术视频欧美日本| 一个人免费在线观看电影| 大又大粗又爽又黄少妇毛片口| 久久亚洲精品不卡| 狂野欧美白嫩少妇大欣赏| 日本成人三级电影网站| 综合色丁香网| 一级毛片aaaaaa免费看小| www.色视频.com| 国产精品一二三区在线看| 国产免费一级a男人的天堂| 精品免费久久久久久久清纯| 看黄色毛片网站| 最近视频中文字幕2019在线8| 亚洲欧美成人精品一区二区| 91在线精品国自产拍蜜月| 老熟妇乱子伦视频在线观看| 一本久久精品| 欧美一区二区精品小视频在线| 美女 人体艺术 gogo| 中文字幕av成人在线电影| 毛片女人毛片| 日韩欧美国产在线观看| 三级国产精品片| 女人久久www免费人成看片| 午夜激情久久久久久久| 国产精品麻豆人妻色哟哟久久| 看非洲黑人一级黄片| 另类精品久久| 欧美三级亚洲精品| 亚洲av电影在线观看一区二区三区| 极品少妇高潮喷水抽搐| 高清午夜精品一区二区三区| 免费大片18禁| 人妻 亚洲 视频| 国产欧美另类精品又又久久亚洲欧美| 狠狠精品人妻久久久久久综合| 蜜臀久久99精品久久宅男| 大香蕉97超碰在线| 性高湖久久久久久久久免费观看| 成人影院久久| 精品一品国产午夜福利视频| 最近最新中文字幕免费大全7| 国产欧美日韩一区二区三区在线 | 午夜91福利影院| 欧美激情国产日韩精品一区| 精品一区在线观看国产| 丝袜喷水一区| 精品国产一区二区久久| 日韩一区二区三区影片| 成人手机av| 成年av动漫网址| 一本—道久久a久久精品蜜桃钙片| 大码成人一级视频| 午夜影院在线不卡| 狂野欧美激情性xxxx在线观看| 精品人妻熟女毛片av久久网站| 大片免费播放器 马上看| 熟女电影av网| 99热6这里只有精品| 五月伊人婷婷丁香| 在线观看人妻少妇| 91久久精品国产一区二区三区| 亚洲,欧美,日韩| 丝袜美足系列| 91久久精品电影网| 国产一级毛片在线| 18禁裸乳无遮挡动漫免费视频| 日韩欧美一区视频在线观看| 久久久久久久精品精品| 人体艺术视频欧美日本| 欧美xxxx性猛交bbbb| 亚洲熟女精品中文字幕| 免费黄频网站在线观看国产| 国产亚洲最大av| 久久久久国产网址| 一本一本综合久久| 街头女战士在线观看网站| 亚洲不卡免费看| 又粗又硬又长又爽又黄的视频| 国产精品不卡视频一区二区| 99久久综合免费| 永久免费av网站大全| 国产69精品久久久久777片| 国产国语露脸激情在线看| 在线观看一区二区三区激情| 欧美性感艳星| 99视频精品全部免费 在线| 水蜜桃什么品种好| 少妇丰满av| 黄色欧美视频在线观看| 9色porny在线观看| 99国产综合亚洲精品| 亚洲伊人久久精品综合| 黄色欧美视频在线观看| 人人妻人人添人人爽欧美一区卜| 一级毛片黄色毛片免费观看视频| 麻豆精品久久久久久蜜桃| 国产伦精品一区二区三区视频9| 久久狼人影院| 黄色怎么调成土黄色| 插逼视频在线观看| 人妻系列 视频| 亚洲国产av影院在线观看| 精品一品国产午夜福利视频| 9色porny在线观看| 插逼视频在线观看| 99热这里只有是精品在线观看| 亚洲国产av影院在线观看| 日韩一区二区视频免费看| 国产黄片视频在线免费观看| 国产免费福利视频在线观看| 日本黄色片子视频| 中国三级夫妇交换| 在线播放无遮挡| av国产久精品久网站免费入址| a级毛片在线看网站| 欧美3d第一页| 观看av在线不卡| 国产精品一二三区在线看| 亚洲成人一二三区av| 91午夜精品亚洲一区二区三区| 免费黄色在线免费观看| 纵有疾风起免费观看全集完整版| 午夜福利影视在线免费观看| 午夜福利在线观看免费完整高清在| 下体分泌物呈黄色| 22中文网久久字幕| 免费观看的影片在线观看| 色网站视频免费| 春色校园在线视频观看| 精品熟女少妇av免费看| 亚洲欧美中文字幕日韩二区| 少妇丰满av| 亚洲精品久久成人aⅴ小说 | videos熟女内射| 亚洲国产精品一区三区| 精品国产一区二区三区久久久樱花| 秋霞在线观看毛片| 桃花免费在线播放| 欧美激情 高清一区二区三区| 亚洲国产最新在线播放| 久久久亚洲精品成人影院| 自线自在国产av| 男女高潮啪啪啪动态图| 欧美激情极品国产一区二区三区 | 性色av一级| 亚洲精品乱久久久久久| 日韩一区二区视频免费看| 搡老乐熟女国产| 亚洲国产日韩一区二区| 人妻少妇偷人精品九色| 国产精品秋霞免费鲁丝片| 午夜免费男女啪啪视频观看| 国语对白做爰xxxⅹ性视频网站| 亚洲精品,欧美精品| 久久久a久久爽久久v久久| 欧美日韩视频高清一区二区三区二| 亚洲第一区二区三区不卡| 蜜桃国产av成人99| 日韩av免费高清视频| 久久久久久久久久久免费av| 51国产日韩欧美| 久久久久精品久久久久真实原创| 考比视频在线观看| 能在线免费看毛片的网站| 久久99蜜桃精品久久| 国产成人精品一,二区| 国产黄片视频在线免费观看| 伊人亚洲综合成人网| av线在线观看网站| 久久久久人妻精品一区果冻| 狠狠婷婷综合久久久久久88av| 欧美3d第一页| 国产亚洲欧美精品永久| 国产精品.久久久| 亚洲五月色婷婷综合| 十分钟在线观看高清视频www| 99国产精品免费福利视频| 成年人午夜在线观看视频| 国产国语露脸激情在线看| 国产又色又爽无遮挡免| 春色校园在线视频观看| 3wmmmm亚洲av在线观看| 久久毛片免费看一区二区三区| 性色avwww在线观看| 午夜av观看不卡| 一级毛片aaaaaa免费看小| 美女内射精品一级片tv| 日本与韩国留学比较| 中文字幕久久专区| 亚洲成人手机| 在线观看免费日韩欧美大片 | 午夜免费鲁丝| 国产永久视频网站| videos熟女内射| 久久青草综合色| 伊人亚洲综合成人网| 97在线人人人人妻| 观看美女的网站| 美女大奶头黄色视频| 极品少妇高潮喷水抽搐| 久久久久久久精品精品| a级毛片在线看网站| 久久久a久久爽久久v久久| 国精品久久久久久国模美| 这个男人来自地球电影免费观看 | 色视频在线一区二区三区| av网站免费在线观看视频| 极品少妇高潮喷水抽搐| 久久精品久久精品一区二区三区| 亚洲精品乱码久久久久久按摩| 亚洲国产毛片av蜜桃av| 91久久精品国产一区二区成人| 亚洲精品日韩在线中文字幕| 国产日韩欧美在线精品| 国产精品久久久久久av不卡| 黄片无遮挡物在线观看| 日韩一区二区视频免费看| 婷婷色综合www| 日韩不卡一区二区三区视频在线|