一种完全上下文敏感的程序控制流完整性保护方法和系统技术方案

技术编号:16270365 阅读:47 留言:0更新日期:2017-09-22 22:00
本发明专利技术公开了一种完全上下文敏感的程序控制流完整性保护方法和系统。本发明专利技术方法在离线分析阶段通过模拟执行收集程序的控制流信息,在运行时跟踪执行路径,跟踪进程到达同一间接分支的执行路径,与控制流信息进行匹配,匹配成功,则表示离线分析时模拟执行的路径和运行时真实执行的路径相同,则根据离线分析的控制流信息可判断随后的合法目标地址,若运行时的目标地址不同于合法目标地址,则判断受到控制流劫持攻击,从而由控制流检查模块通知进程跟踪模块以终止进程。本发明专利技术还实现了一种完全上下文敏感的程序控制流完整性保护系统。本发明专利技术通过对执行路径信息的跟踪和检查来实现完整性保护,保证程序免受控制流劫持攻击的威胁。

【技术实现步骤摘要】
一种完全上下文敏感的程序控制流完整性保护方法和系统
本专利技术属于软件完整性保护领域,更具体地,涉及一种完全上下文敏感的程序控制流完整性保护方法和系统。
技术介绍
现在的软件普遍存在缓冲区溢出漏洞。通过利用缓冲区溢出漏洞,攻击者能对内存任意读写,从而修改代码指针,最终劫持控制流以完成攻击意图。为了保护内存安全,学术和工业界不断研究并部署有效的保护措施。但仍有多项攻击技术,可以绕过以上已有的保护措施。为此,控制流完整性的概念被提出。控制流完整性保护不直接保护内存安全,而是检查控制流是否被劫持,从而判断是否受到攻击。控制流完整性保护方案通常会在程序运行之前为程序生成一个控制流图,在程序运行时利用已生成的控制流图来监控程序的行为,以确保程序控制流符合控制流图。当发现程序控制流不符合控制流图时,通常的做法就是发出警告并终止程序。现有的针对二进制程序的控制流完整性保护方法中,大体上可以分为两种。一种是上下文不敏感的控制流完整性保护方法,即通过人为地建立规则,对执行路径中单个控制流边或部分控制流边进行相对独立的检查。另一种是部分上下文敏感的控制流完整性保护方法,即对执行路径中部分控制流边进行相互关联的检查。然而,上述两种方法都存在一定的不足和局限性。上下文不敏感的控制流完整性保护方法通常采用人为指定的规则,有可能会忽略特殊的控制流转移,导致保护方法不兼容这些特殊的控制流转移,因此难以适用于复杂的大型项目。其次,上下文不敏感的控制流完整性保护方法仅独立地检查执行路径中单个控制流边或部分控制流边,没有考虑执行路径中所有边的相关性,因此不能生成精确性高的控制流图,导致控制流图中包含许多不合法的边,这会被攻击者利用从而绕过检查以实现最终的攻击。另一方面,部分上下文敏感的控制流完整性保护方法对控制流上下文的考虑仅局限于执行路径中所检查的控制流边的个数。而执行路径中某条控制流边的合法性是与该执行路径中的所有边都相关。因此,部分上下文敏感的控制流完整性保护方法生成的控制流图仍然包含许多不合法的边能被攻击者利用。此外,这两种控制流完整性保护方法在运行时都采用插桩技术插入检查代码,这破坏了保护方法的透明性,因此攻击者能够感知保护方案的存在,然后利用被保护程序的漏洞篡改检查逻辑,从而绕过检查。综上所述,现有的针对二进制程序的控制流完整性保护方法存在以下不足:现在的控制流完整性保护方法没有考虑上下文敏感性或只考虑了部分上下文敏感性,导致生成的控制流图包含了许多不合法的控制流边,能够被攻击者利用从而绕过检查。现在的控制流完整性保护方法在运行时都采用了插桩技术插入检查代码,破坏了保护方法的透明性,导致攻击者能够感知到保护方法的存在,并且利用被保护程序的漏洞来篡改检查逻辑。有些控制流完整性保护方法不兼容特殊的控制流转移,因此不适用于复杂的大型项目。
技术实现思路
针对现有技术的以上缺陷或改进需求,本专利技术提供了一种完全上下文敏感的程序控制流完整性保护方法和系统,其目的是在离线分析阶段通过模拟执行和污点分析收集程序的控制流信息,然后在运行时跟踪执行路径,控制流检查模块将控制流信息和进程跟踪信息进行匹配,匹配成功后,检查目标地址是否合法,如果发现不合法,就表示遇到控制流劫持攻击,进而终止进程执行。由此解决现有针对二进制程序的控制流保护方法中出现的上述局限和不足,保证保护方法的透明性、兼容性和模块化支持,并且能实现完全上下文敏感的控制流完整性检查。为实现上述目的,按照本专利技术的一个方面,提供了一种完全上下文敏感的程序控制流完整性保护方法,该方法包括以下步骤:(1)模拟执行:输入预设的测试用例到目标程序,模拟执行目标程序,获取目标程序的控制流信息;(2)基本块信息收集:对目标程序进行文件格式分析和反汇编,识别并保存目标程序二进制文件中的基本块信息;(3)进程跟踪:启动目标程序进程,跟踪目标程序进程的执行路径,并获取进程跟踪信息;(4)控制流检查:根据进程跟踪信息查找基本块,由基本块信息生成路径信息,通过匹配控制流信息和路径信息,实现完整指令路径的合法性检查。进一步地,所述步骤(1)包括以下子步骤:(11)对目标程序指令进行插桩,输入预设的测试用例,启动程序;(12)判断当前插桩点指令是否为目标程序主函数返回指令或结束进程相关的系统调用,若是则结束模拟执行;否则进行污点传播分析,根据指令表达式标记或清除污点数据;(13)判断插桩点指令类型,若是预定义的敏感系统调用的入口,则将敏感系统调用的返回值或被敏感系统调用修改的数据标记为污点数据,运行到下一个插桩点,回到步骤(12);若是分支指令,则进入下一步骤;(14)判断分支指令类型,若是直接无条件分支,则运行到下一个插桩点,回到步骤(12);若是间接分支,则进入步骤(16);若是直接条件分支,则进入步骤(15);(15)计算条件分支指令的目标地址,生成执行路径信息,计算其哈希值作为控制流信息并保存;运行到下一个插桩点,回到步骤(12);(16)判断间接分支指令的目标地址变量是否为污点数据,若是,则丢弃本次模拟执行获取的信息,结束模拟执行;否则,进入步骤(15)。进一步地,所述步骤(2)包括以下子步骤:(21)分析目标程序二进制文件的文件格式,找到代码段的地址范围;(22)对目标程序代码段进行反汇编,获得目标程序代码;(23)对代码进行遍历,分析分支指令并识别基本块:若是直接分支指令,则提取出以该指令结尾的基本块,同时提取出以目标地址指令开头的基本块;若是间接分支指令,提取出以该指令结尾的基本块;(24)当所有代码都已遍历完,保存所有基本块信息。进一步地,所述步骤(3)包括以下子步骤:(31)在目标程序上设置分析起始点和终止点,运行目标程序,当程序运行到分析起点时,配置处理器进程跟踪功能,启动进程跟踪,获取进程跟踪信息;(32)当程序运行到分析终止点时,结束进程跟踪。进一步地,所述步骤(4)包括以下子步骤:(41)判断是否还有进程跟踪信息,是则进入下一步骤;否则结束;(42)根据当前进程跟踪信息查找对应基本块,判断是否能找到,是则由基本块信息生成路径信息,否则更新基本块信息,再由更新的基本块信息生成路径信息;计算路径信息的哈希值;(43)根据路径信息判断执行路径是否达到间接分支,否则寻找下一个进程跟踪信息,回到步骤(41);是则进入下一步骤;(44)在控制流信息的哈希值中匹配当前路径信息的哈希值,若匹配成功则进入下一步骤;若不成功则结束;(45)判断目标地址是否合法;若合法,则寻找下一个进程跟踪信息,回到步骤(41);若不合法,则判断受到攻击,终止程序执行。按照本专利技术的另一方面,提供了一种完全上下文敏感的程序控制流完整性保护系统,该系统包括:模拟执行模块,用于输入预设的测试用例到目标程序,模拟执行目标程序,获取目标程序的控制流信息;基本块信息收集模块,用于对目标程序进行文件格式分析和反汇编,识别并保存目标程序二进制文件中的基本块信息;进程跟踪模块,用于启动目标程序进程,跟踪目标程序进程的执行路径,并获取进程跟踪信息;控制流检查模块,用于根据进程跟踪信息查找基本块,由基本块信息生成路径信息,通过匹配控制流信息和路径信息,实现完整指令路径的合法性检查。进一步地,所述模拟执行模块包括:插桩单元,用于对目标程序指本文档来自技高网
...
一种完全上下文敏感的程序控制流完整性保护方法和系统

【技术保护点】
一种完全上下文敏感的程序控制流完整性保护方法,其特征在于,所述方法包括以下步骤:(1)模拟执行:输入预设的测试用例到目标程序,模拟执行目标程序,获取目标程序的控制流信息;(2)基本块信息收集:对目标程序进行文件格式分析和反汇编,识别并保存目标程序二进制文件中的基本块信息;(3)进程跟踪:启动目标程序进程,跟踪目标程序进程的执行路径,并获取进程跟踪信息;(4)控制流检查:根据进程跟踪信息查找基本块,由基本块信息生成路径信息,通过匹配控制流信息和路径信息,实现完整指令路径的合法性检查。

【技术特征摘要】
1.一种完全上下文敏感的程序控制流完整性保护方法,其特征在于,所述方法包括以下步骤:(1)模拟执行:输入预设的测试用例到目标程序,模拟执行目标程序,获取目标程序的控制流信息;(2)基本块信息收集:对目标程序进行文件格式分析和反汇编,识别并保存目标程序二进制文件中的基本块信息;(3)进程跟踪:启动目标程序进程,跟踪目标程序进程的执行路径,并获取进程跟踪信息;(4)控制流检查:根据进程跟踪信息查找基本块,由基本块信息生成路径信息,通过匹配控制流信息和路径信息,实现完整指令路径的合法性检查。2.根据权利要求1所述的一种完全上下文敏感的程序控制流完整性保护方法,其特征在于,所述步骤(1)包括以下子步骤:(11)对目标程序指令进行插桩,输入预设的测试用例,启动程序;(12)判断当前插桩点指令是否为目标程序主函数返回指令或结束进程相关的系统调用,若是则结束模拟执行;否则进行污点传播分析,根据指令表达式标记或清除污点数据;(13)判断插桩点指令类型,若是预定义的敏感系统调用的入口,则将敏感系统调用的返回值或被敏感系统调用修改的数据标记为污点数据,运行到下一个插桩点,回到步骤(12);若是分支指令,则进入下一步骤;(14)判断分支指令类型,若是直接无条件分支,则运行到下一个插桩点,回到步骤(12);若是间接分支,则进入步骤(16);若是直接条件分支,则进入步骤(15);(15)计算条件分支指令的目标地址,生成执行路径信息,计算其哈希值作为控制流信息并保存;运行到下一个插桩点,回到步骤(12);(16)判断间接分支指令的目标地址变量是否为污点数据,若是,则丢弃本次模拟执行获取的信息,结束模拟执行;否则,进入步骤(15)。3.根据权利要求1所述的一种完全上下文敏感的程序控制流完整性保护方法,其特征在于,所述步骤(2)包括以下子步骤:(21)分析目标程序二进制文件的文件格式,找到代码段的地址范围;(22)对目标程序代码段进行反汇编,获得目标程序代码;(23)对代码进行遍历,分析分支指令并识别基本块:若是直接分支指令,则提取出以该指令结尾的基本块,同时提取出以目标地址指令开头的基本块;若是间接分支指令,提取出以该指令结尾的基本块;(24)当所有代码都已遍历完,保存所有基本块信息。4.根据权利要求1所述的一种完全上下文敏感的程序控制流完整性保护方法,其特征在于,所述步骤(3)包括以下子步骤:(31)在目标程序上设置分析起始点和终止点,运行目标程序,当程序运行到分析起点时,配置处理器进程跟踪功能,启动进程跟踪,获取进程跟踪信息;(32)当程序运行到分析终止点时,结束进程跟踪。5.根据权利要求1所述的一种完全上下文敏感的程序控制流完整性保护方法,其特征在于,所述步骤(4)包括以下子步骤:(41)判断是否还有进程跟踪信息,是则进入下一步骤;否则结束;(42)根据当前进程跟踪信息查找对应基本块,判断是否能找到,是则由基本块信息生成路径信息,否则更新基本块信息,再由更新的基本块信息生成路径信息;计算路径信息的哈希值;(43)根据路径信息判断执行路径是否达到间接分支,否则寻找下一个进程跟踪信息,回到步骤(41);是则进入下一步骤;(44)在控制流信息的哈希值中匹配当前路径信息的哈希值,若匹配成功则进入下一步骤;若不成功则结束;(45)判断目标地址是否合法;若合法,则寻找下一个进程跟踪信息,回到步骤(41);若不合法,则判断受到攻击,终止程序执行。6.一种完全上下文敏感的程序控制流完整性保护系统,其特征在于,所述系统包括:模拟执行模块,用于输入预设的测试用例到目标程序,模拟执行目标程序,获取目标程序的控制流信息;基本块信息收集模块,用于对目标程序进行文件格式分析和反汇编,识别并保存目标程序二进制文件中...

【专利技术属性】
技术研发人员:金海羌卫中黄莹达邹德清
申请(专利权)人:华中科技大学
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1