[發明專利]一種基于LLVM的抵御控制流劫持的系統和方法有效
申請號: | 201710725793.7 | 申請日: | 2017-08-22 |
公開(公告)號: | CN107545174B | 公開(公告)日: | 2020-03-10 |
發明(設計)人: | 傅建明;金睿;史鹿曼 | 申請(專利權)人: | 武漢大學 |
主分類號: | G06F21/54 | 分類號: | G06F21/54 |
代理公司: | 武漢科皓知識產權代理事務所(特殊普通合伙) 42222 | 代理人: | 魯力 |
地址: | 430072 湖*** | 國省代碼: | 湖北;42 |
權利要求書: | 查看更多 | 說明書: | 查看更多 |
摘要: | |||
搜索關鍵詞: | 一種 基于 llvm 抵御 控制 劫持 系統 方法 | ||
1.一種基于LLVM的抵御控制流劫持的系統,其特征在于,包括:
函數隨機化裝置:用于緩解控制流攻擊,具體是在LLVM將源文件編譯成IR層代碼后,識別出函數的信息,將識別出函數的信息保存到函數數組,然后基于隨機生成的隨機因子,重復function級數組長度次后得到新的function級數組,并將新的function級數組的內容插入IR層代碼中;
函數內部控制流限制裝置:用于防御控制流攻擊,具體是遍歷源碼尋找會編譯成間接跳轉指令、間接函數調用指令和返回指令的IR指令,或者識別函數的頭部位置后;插入不同的指令;
函數內部控制流限制裝置包括:
IR層代碼識別模塊:在LLVM將源代碼便以為IR層代碼后,IR層代碼識別模塊遍歷源碼,尋找會編譯成間接跳轉指令、間接函數調用指令和返回指令的IR指令,并通過指針做標記,調用IR層代碼插入模塊;
IR層函數識別模塊:識別函數的頭部位置,調用IR層代碼插入模塊;
IR層代碼插入模塊:本模塊在IR層代碼識別模塊和IR層函數識別模塊調用會產生不同的工作方式;IR層函數識別模塊調用后,本模塊會插入3條指令,分別是生成變量1存儲函數返回地址,生成變量2存儲棧幀值,生成變量3存儲變量1和變量2的異或值;在IR層代碼識別模塊調用后,本模塊會插入如下指令,分別是生成變量4存儲函數返回地址,生成變量5存儲棧幀值,生成變量6存儲變量5和變量4的異或值,生成變量7存儲變量3和變量6的比較結果,生成條件判斷根據變量7結果跳轉到不相等判斷位置和相等判斷位置,生成結果不相等判斷所需執行指令,將相等判斷指向原有標記位置。
2.根據權利要求1所述的一種基于LLVM的抵御控制流劫持的系統,其特征在于,函數隨機化裝置包括:
函數識別保存模塊:在LLVM將源文件編譯成IR層代碼后,由函數識別保存模塊識別出函數的信息,將其保存到函數數組中;其中函數識別可從module入手,在其中使用function級變量遍歷函數;函數保存則將遍歷到的函數指針存入function級的數組中;在函數識別中需將在外部定義的函數去除,識別方式為識別是否有函數體,若沒有則為外部函數;
函數置亂模塊:在函數識別保存模塊后,使用rand函數生成隨機數做隨機因子;重復function級數組長度次,根據其模以function級數組長度,將其值所對應位置與當前次數所對應的位置的數組內容交換,最終得到新的function級數組;
函數刪除模塊:將IR層代碼中的所有非外部函數刪除,刪除時可以使用系統提供的eraseFromParent方法;
函數插入模塊:將新的function級數組的內容插入IR層代碼中,插入時可以使用系統提供的replaceAllUsesWith方法。
3.一種基于LLVM的抵御控制流劫持方法,其特征在于,包括:
函數隨機化步驟:用于緩解控制流攻擊,具體是在LLVM將源文件編譯成IR層代碼后,識別出函數的信息,將識別出函數的信息保存到函數數組,然后基于隨機生成的隨機因子,重復function級數組長度次后得到新的function級數組,并將新的function級數組的內容插入IR層代碼中;
函數內部控制流限制步驟:用于防御控制流攻擊,具體是遍歷源碼尋找會編譯成間接跳轉指令、間接函數調用指令和返回指令的IR指令,或者識別函數的頭部位置后;插入不同的指令。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于武漢大學,未經武漢大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710725793.7/1.html,轉載請聲明來源鉆瓜專利網。