当前位置: 首页 > 专利查询>安徽大学专利>正文

基于动态二进制平台检测运行时程序漏洞的方法技术

技术编号:16919692 阅读:84 留言:0更新日期:2017-12-31 15:06
本发明专利技术公开了一种基于动态二进制平台检测运行时程序漏洞的方法,属于虚拟机与程序分析技术领域,包括:基于二进制代码执行平台Pin,对主存和寄存器中来自外部渠道的输入进行识别并将其作为可疑污染源加以标记;通过中间指令层实现可疑污染源传播行为的跟踪,根据各指令操作数的污点状态对污染行为进行分析,其中污点状态包括被污染、未被污染和受控污染;建立内存模型和寄存器模型记录每个主存字节和寄存器字节的污点状态。本发明专利技术提出受约束的污染状态,提高了漏洞检测的覆盖率。提供全新的Hash链接表结构,该结构可以在不增加存取时间的情况下,减少污点信息的存储空间。通过将不相关的API函数过滤机制,大大降低了系统运行开销。

【技术实现步骤摘要】
基于动态二进制平台检测运行时程序漏洞的方法
本专利技术涉及虚拟机与程序分析
,特别涉及一种基于动态二进制平台检测运行时程序漏洞的方法。
技术介绍
近年来,随着计算机技术的蓬勃发展,软件应用的爆炸式增长以及计算机系统规模与复杂性的增加都使得计算机系统与软件的安全越来越受到重视。软件从开发到发布都不可避免的存在安全漏洞,这些漏洞造成的后果小到系统崩溃,大到攻击者获取相应应用程序的完全控制权。因此需要在程序应用前对程序存在的漏洞进行检测。以漏洞检测为测试目标的软件行为分析方法通常可分为两个主要部分,一部分是具体的测试方法,另一部分是测试用例的生成。在开源操作系统、开源软件以及GPL的推动下,面向源代码的漏洞检测方法取得了很好的发展。但是出于商业利益的考虑,大部分软件厂商不公开其源代码,而是直接发布编译好的执行程序。因此需要在运行执行程序前,对执行程序存在的漏洞进行检测。目前,对于没有源代码的二进制程序,使用二进制插装技术来进行漏洞检测,通过对二进制文件的汇编指令进行插装来获得调用信息,执行回调函数进行相关操作。对汇编指令的插装方式包括两种:静态二进制插装和动态二进制插装。由于对程序进行插装的目的是在程序运行到插装部分时,可以执行插装函数进而获得信息,因此对于二进制程序一般采用动态二进制插装。在动态二进制插装中一般采用的技术手段是运用动态二进制检测框架。基于动态二进制检测框架对二进制程序漏检进行检测的原理是:二进制检测框架并不是真正的插装,而是采用一种虚拟机的技术,将一个目标程序运行在一个特制的虚拟机系统中,该虚拟机系统支持对应的机器指令架构,当程序运行在虚拟机中,由于虚拟机底层是自己书写和改造,所以当执行某些汇编指令时,可以进行有效的监控并进行一定的处理。也有的检测框架是在虚拟系统中将汇编指令完全转换成一个中间表示的指令,以便于在虚拟机中进行分析。当程序运行时,理论上是能够在编译时对每条指令进行观察、检测和操作的。在理论上可以在运行状态下对它进行程序分析、检测、流程跟踪和指令搜集等一系列操作。但是,这种基于动态二进制检测框架对二进制程序漏检进行检测存在的弊端在于:一是,目前流行的污染分析工具主要检测被污染状态以及未被污染状态,存在检测盲点,可能遗漏某些软件漏洞类型。二是,动态二进制分析系统在运行时,系统内耗较大。三是,在漏洞检测过程中,污点所占用的存储空间较大。
技术实现思路
本专利技术的目的在于提供一种基于动态二进制平台检测运行时程序漏洞的方法,以全面检测程序存在的漏洞。为实现以上目的,本专利技术采用的技术方案为:提供一种基于动态二进制平台检测运行时程序漏洞的方法,包括:S1、基于二进制代码执行平台Pin,对主存和寄存器中来自外部渠道的输入进行识别并将其作为可疑污染源加以标记;S2、通过中间指令层实现可疑污染源传播行为的跟踪,根据各指令操作数的污点状态对污点行为进行分析,其中污点状态包括被污染、未被污染和受控污染;S3、建立内存模型和寄存器模型记录每个主存字节和寄存器字节的污点状态。其中,所述的步骤S2,具体包括:将待检测二进制程序中的所有指令进行分类,包括算数/逻辑指令、存储器访问指令、控制传输指令、可传播污染点行为的指令、不帮助传播污点行为的指令以及执行后可以清理受污染和/或受控污染数据的指令;将分析代码放置在基本块的末尾,以对分类后的指令执行之前获取寄存器值;在获取寄存器值后,利用每个指令的操作数来调用相应的指令处理过程来执行指令分析任务。其中,所述的内存模型具体用于:使用两比特来识别所述主存字节的污染状态,并在字节被污染或受控污染时,将该字节添加在链接哈希表中;所述的寄存器模型具体用于:对所述寄存器进行分类,对每个类别的寄存器采用对应的数组记录其污点状态。其中,所述的将分析代码防止在基本块的末尾,以对分类后的指令执行之前获取寄存器值,具体包括:将存储在所述二进制代码执行平台Pin中的基本块所有指令时复制到软件保留指令缓存中;利用INS_InsertCall()获取存储在itrace.out中的寄存器值,并将获取的寄存器值存储在同一个数组中;在执行当前的基本块之后,在数组中顺序的获取所有指令以及所有寄存器值。其中,所述的链接哈希表的组织过程包括:将PA的第31~20位作为索引每个链接列表的键,并通过PA的第31位描述该PA的内存字节是系统空间还是内存空间;如果链接列表的键相同,则将所述主存字节的污点信息放置在相同的链表中;所述主存字节中的节点结构包括标签域、污点信息域以及下一个域,其中标签域用于标示链接列表中的每个节点,污点信息域用于存储由标签指定的16个连续内存字节的污点信息,下一个域用于指向下一个节点。其中,所述的将字节添加在链接哈希表的标准为:当16个连续的内存字节中至少一个被污染或受控污染时,将该字节添加在链接哈希表中。其中,该方法还包括:基于基本块和API对二进制程序漏洞的检测过程进行优化。其中,所述的基于基本块对二进制程序漏洞的检测过程进行优化,具体包括:将相同的基本块的指令存储到所述软件保留指令缓存中;在执行当前的基本块之后,将所述相同基本块的指令同时进行处理。其中,所述的基于API对二进制程序漏洞的检测过程进行优化,具体包括:提取二进制代码的公共部分作为普通签名,并基于普通签名对API函数进行识别;对识别出的API函数的的污染传播行为进行检查,并将检查出的污染传播信息存储在数据库中;根据设定的过滤准则,对不传播污染数据的API函数进行过滤。与现有技术相比,本专利技术存在以下技术效果:本专利技术基于动态程序分析平台Pin,设计了一个具有3种状态的动态污点分析框架,框架作用于X86二进制可执行文件,无需任何特殊硬件支持,实现了在程序运行时精确检测软件的漏洞。所提出三种状态分别为被污染状态、未被污染状态以及受控污染状态,而目前流行的污染分析工具主要检测被污染状态以及未被污染状态,而本专利技术提出了受控污染状态——受约束的污染状态,来检测所有处于受控污染状态的值,这将检测出更多的软件漏洞类型,较好的解决了检测盲点问题,提高了漏洞检测覆盖率。而且本框架也提出了新的Hash链接表结构,可以在不增加存取时间的情况下,减少污点信息的存储空间。附图说明下面结合附图,对本专利技术的具体实施方式进行详细描述:图1是本专利技术中一种基于动态二进制平台检测运行时程序漏洞的方法的流程示意图;图2是本专利技术中一种基于动态二进制平台检测运行时程序漏洞的方法进行污点分析的总体框架结构示意图;图3是本专利技术中的Pin插接平台的基本结构示意图;图4是本专利技术中提出的链接哈希表的组织结构示意图;图5是本专利技术中寄存器模型的结构示意图。具体实施方式为了更进一步说明本专利技术的特征,请参阅以下有关本专利技术的详细说明与附图。所附图仅供参考与说明之用,并非用来对本专利技术的保护范围加以限制。如图1至图3所示,本实施例公开了一种基于动态二进制平台检测运行时程序漏洞的方法,包括如下步骤S1至S3:S1、基于二进制代码执行平台Pin,对主存和寄存器中来自外部渠道的输入进行识别并将其作为可疑污染源加以标记;需要说明的是,在进行动态污点分析开始时,首先在主存或者寄存器中的定位污染源,这些主存器或寄存器最有可能被来自某些不安全渠道通道比如输入文件或网络的输入数据所污染。因此,本文档来自技高网
...
基于动态二进制平台检测运行时程序漏洞的方法

【技术保护点】
一种基于动态二进制平台检测运行时程序漏洞的方法,其特征在于,包括如下步骤:S1、基于二进制代码执行平台Pin,对主存和寄存器中来自外部渠道的输入进行识别并将其作为可疑污染源加以标记;S2、通过中间指令层实现可疑污染源传播行为的跟踪,根据各指令操作数的污点状态对污点行为进行分析,其中污点状态包括被污染、未被污染和受控污染;S3、建立内存模型和寄存器模型记录每个主存字节和寄存器字节的污点状态。

【技术特征摘要】
1.一种基于动态二进制平台检测运行时程序漏洞的方法,其特征在于,包括如下步骤:S1、基于二进制代码执行平台Pin,对主存和寄存器中来自外部渠道的输入进行识别并将其作为可疑污染源加以标记;S2、通过中间指令层实现可疑污染源传播行为的跟踪,根据各指令操作数的污点状态对污点行为进行分析,其中污点状态包括被污染、未被污染和受控污染;S3、建立内存模型和寄存器模型记录每个主存字节和寄存器字节的污点状态。2.如权利要求1所述的基于动态二进制平台检测运行时程序漏洞的方法,其特征在于,所述的步骤S2,具体包括:将待检测二进制程序中的所有指令进行分类,包括算数/逻辑指令、存储器访问指令、控制传输指令、可传播污染点行为的指令、不帮助传播污点行为的指令以及执行后可以清理受污染和/或受控污染数据的指令;将分析代码防止在基本块的末尾,以对分类后的指令执行之前获取寄存器值;在获取寄存器值后,利用每个指令的操作数来调用相应的指令处理过程来执行指令分析任务。3.如权利要求1所述的基于动态二进制平台检测运行时程序漏洞的方法,其特征在于,所述的内存模型具体用于:使用两比特来识别所述主存字节的污染状态,并在字节被污染或受控污染时,将该字节添加在链接哈希表中;所述的寄存器模型具体用于:对所述寄存器进行分类,对每个类别的寄存器采用对应的数组记录其污点状态。4.如权利要求2所述的基于动态二进制平台检测运行时程序漏洞的方法,其特征在于,所述的将分析代码放置在基本块的末尾,以对分类后的指令执行之前获取寄存器值,具体包括:将存储在所述二进制代码执行平台Pin中的基本块所有指令时复制到软件保留指令缓存中;利用INS_InsertCall()获取存储在itrace.out中的寄存器值,并将获取的寄存器值存储在同一个数组中...

【专利技术属性】
技术研发人员:朱二周周泽人李学俊
申请(专利权)人:安徽大学
类型:发明
国别省市:安徽,34

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

1