[發(fā)明專利]一種基于LLVM的抵御控制流劫持的系統(tǒng)和方法有效
申請?zhí)枺?/td> | 201710725793.7 | 申請日: | 2017-08-22 |
公開(公告)號: | CN107545174B | 公開(公告)日: | 2020-03-10 |
發(fā)明(設計)人: | 傅建明;金睿;史鹿曼 | 申請(專利權)人: | 武漢大學 |
主分類號: | G06F21/54 | 分類號: | G06F21/54 |
代理公司: | 武漢科皓知識產(chǎn)權代理事務所(特殊普通合伙) 42222 | 代理人: | 魯力 |
地址: | 430072 湖*** | 國省代碼: | 湖北;42 |
權利要求書: | 查看更多 | 說明書: | 查看更多 |
摘要: | |||
搜索關鍵詞: | 一種 基于 llvm 抵御 控制 劫持 系統(tǒng) 方法 | ||
本發(fā)明涉及一種基于LLVM的抵御控制流劫持的系統(tǒng)和方法,主要是用來對控制流劫持中的返回導向攻擊和跳轉(zhuǎn)導向攻擊進行緩解和防御。本方法抵御控制流劫持主要包括以下幾種:基于LLVM的編譯時函數(shù)隨機化方法,基于LLVM的強制函數(shù)內(nèi)控制流按正常程序流執(zhí)行方法。通過以上方法的綜合利用,本發(fā)明能夠有效的在編譯階段打亂函數(shù)順序增加攻擊者猜解程序的難度,在運行時限制函數(shù)的執(zhí)行流程,從而抵御控制流劫持。通過測試發(fā)現(xiàn),本發(fā)明對軟件的開銷極低,能夠抵御常見的控制流劫持攻擊。
技術領域
本發(fā)明屬于軟件安全領域。通過在編譯時進行函數(shù)隨機化和插樁限制控制流的方式,抵御常見控制流劫持攻擊。
背景技術
控制流劫持一直是軟件漏洞利用的重要方式之一。控制流劫持是通過程序漏洞,修改程序的代碼指針或返回地址,將其指向攻擊者想要執(zhí)行的代碼。
現(xiàn)有的控制流劫持利用方案有代碼注入攻擊和代碼復用攻擊。在代碼注入攻擊中,攻擊者劫持控制流指向以數(shù)據(jù)形式注入的程序代碼,從而執(zhí)行該代碼完成其惡意目的。代碼注入攻擊已可以被操作系統(tǒng)使用的數(shù)據(jù)執(zhí)行保護機制防御。代碼復用攻擊則將控制流劫持到程序本身的代碼片段中,通過服用多個程序代碼片段來完成惡意功能。代碼復用攻擊使用的代碼片段多為彈棧指令、間接函數(shù)調(diào)用指令、間接跳轉(zhuǎn)指令、函數(shù)返回指令的組合。其中以函數(shù)返回指令結尾的一種代碼復用攻擊形式(ROP)已經(jīng)被證明為圖靈完備的。
現(xiàn)階段,隨機化和控制流完整性保護用來緩解和防御控制流劫持攻擊。地址空間布局隨機化是一種比較粗粒度的隨機化方案,廣泛應用于現(xiàn)代操作系統(tǒng)中,其通過改變內(nèi)存段的基址,使得攻擊者難以直接利用離線分析得到的函數(shù)或代碼片段地址來構造代碼復用攻擊。但是通過離線分析配合某段代碼的信息泄露,攻擊者則可以輕易繞過該技術。控制流完整性檢測是通過對程序插樁,在部分改變程序控制流的指令前檢測其執(zhí)行是否合規(guī),已經(jīng)被應用于Windows 10的edge瀏覽器中。但是其開銷較大,推廣較困難。
發(fā)明內(nèi)容
本發(fā)明針對現(xiàn)有防御技術存在的上述問題,提出一種基于LLVM的抵御控制流劫持的系統(tǒng)和方法,其目的在于,在LLVM編譯器上,通過函數(shù)隨機化和限制函數(shù)內(nèi)部執(zhí)行流程來緩解和防御控制流劫持攻擊。
本發(fā)明的方法采用的技術方案是:
一種基于LLVM的抵御控制流劫持的系統(tǒng),其特征在于,包括:
函數(shù)隨機化裝置:用于緩解控制流攻擊,具體是在LLVM將源文件編譯成IR層代碼后,識別出函數(shù)的信息,將識別出函數(shù)的信息保存到函數(shù)數(shù)組,然后基于隨機生成的隨機因子,重復function級數(shù)組長度次后得到新的function級數(shù)組,并將新的function級數(shù)組的內(nèi)容插入IR層代碼中;
函數(shù)內(nèi)部控制流限制裝置:用于防御控制流攻擊,具體是遍歷源碼尋找會編譯成間接跳轉(zhuǎn)指令、間接函數(shù)調(diào)用指令和返回指令的IR指令,或者識別函數(shù)的頭部位置后;插入不同的指令。
在上述的一種基于LLVM的抵御控制流劫持的系統(tǒng),函數(shù)隨機化裝置包括:
函數(shù)識別保存模塊:在LLVM將源文件編譯成IR層代碼后,由函數(shù)識別保存模塊識別出函數(shù)的信息,將其保存到函數(shù)數(shù)組中。其中函數(shù)識別可從module入手,在其中使用function級變量遍歷函數(shù)。函數(shù)保存則將遍歷到的函數(shù)指針存入function級的數(shù)組中。值得注意的是,在函數(shù)識別中需將在外部定義的函數(shù)去除,識別方式為識別是否有函數(shù)體,若沒有則為外部函數(shù);
函數(shù)置亂模塊:在函數(shù)識別保存模塊后,使用rand函數(shù)生成隨機數(shù)做隨機因子。重復function級數(shù)組長度次,根據(jù)其模以function級數(shù)組長度,將其值所對應位置與當前次數(shù)所對應的位置的數(shù)組內(nèi)容交換,最終得到新的function級數(shù)組;
函數(shù)刪除模塊:將IR層代碼中的所有非外部函數(shù)刪除,刪除時可以使用系統(tǒng)提供的eraseFromParent方法;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于武漢大學,未經(jīng)武漢大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業(yè)授權和技術合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710725793.7/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。