[发明专利]一种基于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.vipzhuanli.com/pat/books/201710725793.7/1.html,转载请声明来源钻瓜专利网。