[发明专利]控制流完整性保护方法、系统、装置及可读存储介质有效
申请号: | 202110300061.X | 申请日: | 2021-03-22 |
公开(公告)号: | CN112966258B | 公开(公告)日: | 2022-12-30 |
发明(设计)人: | 李金库;李睿;向昊;姚青松;马建峰 | 申请(专利权)人: | 西安电子科技大学 |
主分类号: | G06F21/52 | 分类号: | G06F21/52 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 房鑫 |
地址: | 710071 陕*** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 控制 完整性 保护 方法 系统 装置 可读 存储 介质 | ||
1.一种控制流完整性保护方法,其特征在于,包括以下步骤:
获取待保护程序的控制流图;其中,待保护程序的控制流图中,记录有函数指针的位置信息及函数指针的源点信息;
将待保护程序的控制流图导入待保护程序中;
利用store指令插桩获取待保护程序运行时的上下文信息,并将待保护程序运行时的上下文信息存储在MPX表中;
利用间接调用指令插桩查询MPX表,获取上下文信息;并利用上下文信息,验证程序实际运行的跳转目标合法性;
待保护程序的控制流图中CFG元组的表达式为:
(origin/position,ICT,target)
其中,origin为函数指针的源点信息,ICT为间接调用指令的位置信息,target为具体目标,postion为函数指针的位置信息;
利用store指令插桩获取待保护程序运行时的上下文信息,并将待保护程序运行时的上下文信息存储在MPX表中的过程具体如下:
利用Intel MPX工具,通过修改Clang/lib/CodeGen文件,在CodeGenFunction.cpp的store指令生成处添加EmitStoreToMetadata函数;将收集的上下文信息存储到MPX表中;其中,上下文信息包括函数指针的位置信息及函数指针的源点信息;
利用上下文信息验证程序运行时的目标合法性的过程具体如下:
如果源点信息存在,在hash表中查找是否包含(origin,ICT,target)条目;如果包含,则允许运行;若不包含(origin,ICT,target)条目,则终止运行;
如果源点信息不存在,从每条间接调用指令回溯到getelementptr指令获取位置信息,根据位置信息查询MPX表,直到回溯到全局变量中函数指针的位置;根据当前目标和位置信息查找hash表是否包含(position,ICT,target)条目;如果包含,则允许运行;若不包含该(position,ICT,target)条目,则终止运行;
如果MPX表中查找不到源点信息和位置信息,则终止运行。
2.根据权利要求1所述的一种控制流完整性保护方法,其特征在于,获取待保护程序的控制流图过程具体为:
采用LLVM编译器,利用插桩修改后的LLVM Clang工具对待保护程序源代码进行编译,得到待保护程序的中间代码;
利用修改后的SVF工具源码,对待保护程序的中间代码进行静态分析,得到待保护程序的控制流图。
3.根据权利要求2所述的一种控制流完整性保护方法,其特征在于,利用修改后的SVF工具源码,对待保护程序的中间代码进行静态分析,得到待保护程序的控制流图过程具体如下:
采用函数特征匹配的方法,对待保护程序进行分析,得到间接调用指令对应的有效目标集合;
对全局变量进行静态分析,得到函数指针的位置信息;
对store指令进行静态分析,得到函数指针的源点信息;
利用函数指针的位置信息及函数指针的源点信息,对间接调用指令对应的有效目标集合中的目标进行区分,得到待保护程序的控制流图。
4.根据权利要求1所述的一种控制流完整性保护方法,其特征在于,将待保护程序的控制流图导入待保护程序中过程具体如下:
使用objdump命令打印cfg_label段的数据,并使用python脚本根据cfg_label段的数据,对待保护程序的控制流图进行分类处理,生成二进制文件;
采用LLVM编译器的PASS工具,将二进制文件导入到待保护程序文件中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安电子科技大学,未经西安电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110300061.X/1.html,转载请声明来源钻瓜专利网。