低计算机系统资源开销的软件漏洞检测系统的制作方法

文档序号:6338617阅读:176来源:国知局
专利名称:低计算机系统资源开销的软件漏洞检测系统的制作方法
技术领域
本发明涉及的是一种计算机技术领域的检测系统,具体是一种低计算机系统资源 开销的软件漏洞检测系统。
背景技术
在程序的运行过程中,信息总是在程序内部对象间传递,从而形成了信息流,给程 序分析提供了一个切入点。污染分析恰是信息流分析的一种形式。在污染分析中,不可信 的数据来源被认为是污染源,它们将被附上某种标签或标记来标识它们的污染状态。
动态污染传播便是在上述基础上,在程序的执行过程中按规则进行污染传播。所 谓的污染传播是指如果对象A的值直接来源于污染对象B的值,或是通过对污染对象B的 值进行一些计算而获得,我们则认为污染传播发生了,对象A被污染并被附上与对象B —样 的污染标记。这些标记能帮助程序分析者跟踪可疑数据,探测其是否影响系统的某些特权 区域或敏感区域,从而发现软件漏洞和恶意代码的恶意行为。
因此,基于动态污染传播的软件漏洞和恶意软件检测是一种行之有效的检测大量 软件漏洞和脆弱点的方法。污染信息能帮助程序分析者跟踪程序的信息流,了解和记录污 染源数据对程序的影响,最终找出程序输出结果和源数据之间的关系。
常规的动态污染分析只对数据给出了两种状态污染和未污染。这种方法只考虑 了污染数据所含的值,而忽略了污染数据的其他属性,如污染数据的长度等。这将使得最终 的分析结果精确度不高,无法尽可能多地发现软件漏洞和恶意代码的恶意行为。
现有的相关系统往往还有如下一种或多种缺点(1)对程序源文件的需求、(2)高 计算机系统资源开销、(3)缺乏足够的检测规则,这些缺点限制了这些系统的用途。发明内容
本发明针对现有系统存在的上述不足,提出一种基于动态污染传播的低计算机系 统资源开销的软件漏洞检测系统,通过引入“受控污染”这一新的状态,提高了程序分析的 精确度,拓宽了漏洞检测的范围,通过增加无关API过滤和基本块执行技术,达到了低计算 机系统资源开销的目的,使得本系统成为一种基于动态污染传播的低计算机系统资源开销 的软件漏洞检测系统。
本发明是通过以下技术方案实现的
本发明包括二进制代码动态插入模块、污染传播初始化模块、信息流跟踪模块、 污染传播管理模块、漏洞规则库,其中二进制代码动态插入模块负责在用户程序运行过程 中,在用户程序的二进制代码中动态插入二进制代码,并将用户程序的二进制代码转化为 汇编代码传送给污染传播初始化模块和信息流跟踪模块;污染传播初始化模块从二进制代 码动态插入模块接收用户程序的汇编代码,并将存放源数据的寄存器和内存单元信息传送 给污染传播管理模块;信息流跟踪模块从二进制代码动态插入模块接收用户程序的汇编代 码,提取汇编代码所使用的内存单元和寄存器信息并查询污染传播管理模块,将从污染传播管理模块得到的查询结果和汇编代码的操作码信息传入漏洞规则库,若未从漏洞规则库 处得到危险反馈,则根据汇编代码的操作码信息确定污染传播方式,并将受影响的寄存器 和内存单元信息传送给污染传播管理模块,若从危险规则库得到危险反馈,则将漏洞信息 传送给系统输出。
所述的二进制代码动态插入模块包括=Intel开发的动态代码插入工具Pin、自定 义程序分析文件。其中=Intel开发的动态代码插入工具Pin能实现在程序运行时,在程序 的任意位置插入任意二进制代码,这些插入代码使得Pin能跟踪API和系统信息、调用用户 自定义程序分析文件中的分析函数,从而完成特定的程序分析。用户自定义程序分析文件 完成对Pin所提供的回调函数的实现。
所述的污染传播初始化模块包括用户程序载入后的初始受污染的内存地址空间 的定位、用户程序载入后的初始受污染的寄存器的定位。
所述的信息流跟踪模块包括指令级分析模块、API及库函数级分析模块。其中 指令级分析模块根据每条汇编指令的操作码确定相应的污染传播方式、API及库函数级分 析模块根据API数据库的相应记录来直接获得其污染传播方式。
所述的API数据库包含每个常见API和库函数所涉及的计算机内存单元和寄存器 的记录。
所述的污染传播管理模块包括内存污染管理模块、寄存器污染管理模块。其中 内存污染管理模块采用链式哈希表数据结构记录受污染的内存地址空间、寄存器污染管理 模块采用数组记录系统中所有寄存器的污染状态。
所述的受控污染状态的定义为受控污染状态是这样一种状态,包含该状态的对 象的值不直接来源于污染对象的值,或是对污染对象的值进行算术计算后获得,来源于污 染对象的其他性质(如长度等)。
本发明对于不会产生污染传播的API直接跳过对它的分析,从而降低系统资源开 销。以基本块为单位进行执行,与以单条指令为单位执行相比,减少了在原程序代码和分析 代码间频繁发生的上下文切换的次数,降低了系统资源开销。本发明能够增加考虑“受控污 染”这一新的状态,添加了对污染数据的其他属性的关注,使得本系统能在更广的范围内发 现软件脆弱点和漏洞,无关API过滤和基本块执行降低了本系统的运行资源和运行时间开 销。


图1系统架构示意图。
图2实施例缓存区溢出漏洞示意图。
具体实施方式
下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行 实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施 例。
如图1所示,本实施例包括二进制代码动态插入模块、污染传播初始化模块、信 息流跟踪模块、污染传播管理模块、漏洞规则库。其中二进制代码动态插入模块负责在用4户程序运行过程中,在用户程序的二进制代码中动态插入二进制代码,并将用户程序的二 进制代码转化为汇编代码传送给污染传播初始化模块和信息流跟踪模块;污染传播初始化 模块从二进制代码动态插入模块接收用户程序的汇编代码,并将存放源数据的寄存器和内 存单元信息传送给污染传播管理模块;信息流跟踪模块从二进制代码动态插入模块接收 用户程序的汇编代码,提取汇编代码所使用的内存单元和寄存器信息并查询污染传播管理 模块,将从污染传播管理模块得到的查询结果和汇编代码的操作码信息传入漏洞规则库, 若未从漏洞规则库处得到危险反馈,则根据汇编代码的操作码信息确定污染传播方式,并 将受影响的寄存器和内存单元信息传送给污染传播管理模块,若从危险规则库得到危险反 馈,则将漏洞信息传送给系统输出。
所述的二进制代码动态插入模块包括=Intel开发的动态代码插入工具Pin、自定 义程序分析文件。其中=Intel开发的动态代码插入工具Pin能实现在程序运行时,在程序 的任意位置插入任意二进制代码,这些插入代码使得Pin能跟踪API和系统信息、调用用户 自定义程序分析文件中的分析函数,从而完成特定的程序分析。用户自定义程序分析文件 完成对Pin所提供的回调函数的实现。
所述的污染传播初始化模块包括用户程序载入后的初始受污染的内存地址空间 的定位、用户程序载入后的初始受污染的寄存器的定位。
所述的信息流跟踪模块包括指令级分析模块、API及库函数级分析模块。其中 指令级分析模块根据每条汇编指令的操作码确定相应的污染传播方式、API及库函数级分 析模块根据API数据库的相应记录来直接获得其污染传播方式。
所述的API数据库包含每个常见API和库函数所涉及的计算机内存单元和寄存器 的记录。
所述的污染传播管理模块包括内存污染管理模块、寄存器污染管理模块。其中 内存污染管理模块采用链式哈希表数据结构记录受污染的内存地址空间、寄存器污染管理 模块采用数组记录系统中所有寄存器的污染状态。
本实施例具体操作过程如下
初始状态假定源数据是不可信数据,被认为是污染数据,则在用户程序载入后, 二进制代码动态插入模块首先在用户程序的二进制代码中插入分析代码或函数调用语句, 以此来在程序运行时动态跟踪API和系统信息、调用用户自定义的程序分析代码,并将正 在执行中的二进制指令所对应的汇编指令传送给污染传播初始化模块和信息流跟踪模块
污染传播初始化模块从二进制代码动态插入模块接收到汇编指令后,分析该汇编 指令的操作数,找到源数据hello所对应的内存单元,将内存单元的信息传送给污染传播 管理模块
污染传播模块接收到污染传播初始化模块的信息,在本模块所维护的计算机内 存和寄存器的数据结构中,将对应的内存单元或寄存器打上污染标记信息流跟踪模块从 二进制代码动态插入模块接收汇编代码,以用户程序的每个基本块为单位进行信息流跟 踪,并在污染传播管理模块和漏洞规则库的协作下,检测程序漏洞。当分析到int Ien = strlen (strlnput)时,由于strlnput是污染变量,且Ien的值并不是由strlnput直接赋 值得到的,而是经过对strlnput算术运算得到,因此被标记上“受控污染”标记。当分析到 foo (strlnput, Ien)时,信息流跟踪模块查询本模块内的API数据库,在发现无此API记录后,fooO函数被认为是与污染传播无关的API而被直接过滤,信息流跟踪模块进入foo函 数体继续分析。当分析到lstrcpyn (buf,strhput,Ien)时,信息流跟踪模块查询本模块内 的API数据库,在识别出库函数IstrcpynO后从API数据库内得到IstrcpynO在所涉及 的计算机内存单元和寄存器的记录,并将该信息传入污染传播模块,查询得到相应的内存 单元和寄存器的污染状态,将返回的污染状态信息和IstrcpynO的库函数名传入漏洞规 则库进行检索,发现满足其中的漏洞规则,系统输出模块发出警报,漏洞发现。
在实施例中,软件漏洞来源于语句Istrcpyn (buf,strlnput, len),此语句在实际 运行时会出现如下3种情况
如果源数据较长,使得strlnput的长度大于buf的长度,则在strlnput中的数据 复制到buf后,buf中的数据会覆盖tmp的一部分,此时虽然fooO函数调用的返回地址未 被覆盖,但仍存在较轻的缓存区溢出漏洞,如图2中空心箭头所示。
如果源数据较长,使得strlnput的长度大于buf的长度,则在strlnput中的数据 复制到buf后,buf中的数据会覆盖到foo函数调用的返回地址,此时发生严重的缓存区溢 出漏洞,如图2中实心箭头所示。
如果源数据较短,使得strlnput的长度小于或等于buf的长度,则在strlnput中 的数据复制到buf后,buf中的数据不会覆盖其他任何非buf所占的内存区域,此时虽然程 序运行正常,但该程序仍存在潜在的缓存区溢出漏洞。
对于情况2),现有的基于动态污染传播的软件漏洞检测系统都能发现并发出警 报,而对于其他两种情况则不能处理。本系统通过引入API数据库、漏洞规则库、受控污 染状态来实现对情况1)和幻的发现和报警。具体过程为通过查询API数据库,识别出 IstrcpynO库函数,并依照API数据库中的记录查询污染传播管理模块,然后将查询得到 的该库函数所涉及的内存和寄存器的污染信息传入漏洞规则库进行漏洞规则检索,从而来 检测是否存在漏洞。
通过测试,本实施例考虑了 “受控污染”这一新的状态,添加了对污染数据的其他 属性的关注,提高了程序分析结果的精确度,并能在更广的范围内发现软件脆弱点和漏洞, 无关API过滤和基本块执行降低了本系统的运行资源和运行时间开销。
权利要求
1.一种基于动态污染传播的低计算机系统资源开销的软件漏洞检测系统,其特征在 于,包括二进制代码动态插入模块、污染传播初始化模块、信息流跟踪模块、污染传播管理 模块、漏洞规则库,其中二进制代码动态插入模块负责在用户程序运行过程中,在用户程 序的二进制代码中动态插入二进制代码,并将用户程序的二进制代码转化为汇编代码传送 给污染传播初始化模块和信息流跟踪模块;污染传播初始化模块从二进制代码动态插入模 块接收用户程序的汇编代码,并将存放源数据的寄存器和内存单元信息传送给污染传播管 理模块;信息流跟踪模块从二进制代码动态插入模块接收用户程序的汇编代码,提取汇编 代码所使用的内存单元和寄存器信息并查询污染传播管理模块,将从污染传播管理模块得 到的查询结果和汇编代码的操作码信息传入漏洞规则库,若未从漏洞规则库处得到危险反 馈,则根据汇编代码的操作码信息确定污染传播方式,并将受影响的寄存器和内存单元信 息传送给污染传播管理模块,若从危险规则库得到危险反馈,则将漏洞信息传送给系统输 出O
2.根据权利要求1所述的基于动态污染传播的低计算机系统资源开销的软件漏洞检 测系统,其特征是,所述的二进制代码动态插入模块包括=Intel开发的动态代码插入工具 Pin、自定义程序分析文件。其中=Intel开发的动态代码插入工具Pin能实现在程序运行 时,在程序的任意位置插入任意二进制代码,这些插入代码使得Pin能跟踪API和系统信 息、调用用户自定义程序分析文件中的分析函数,从而完成特定的程序分析。用户自定义程 序分析文件完成对Pin所提供的回调函数的实现。
3.根据权利要求1所述的基于动态污染传播的低计算机系统资源开销的软件漏洞检 测系统,其特征是,所述的污染传播初始化模块包括用户程序载入后的初始受污染的内存 地址空间的定位、用户程序载入后的初始受污染的寄存器的定位。
4.根据权利要求1所述的基于动态污染传播的低计算机系统资源开销的软件漏洞检 测系统,其特征是,所述的信息流跟踪模块包括指令级分析模块、API及库函数级分析模 块。其中指令级分析模块根据每条汇编指令的操作码确定相应的污染传播方式、API及库 函数级分析模块根据API数据库的相应记录来直接获得其污染传播方式。
5.根据权利要求4所述的基于动态污染传播的低计算机系统资源开销的软件漏洞检 测系统,其特征是,所述的API数据库包含每个常见API和库函数所涉及的计算机内存单元 和寄存器的记录。
6.根据权利要求1所述的基于动态污染传播的低计算机系统资源开销的软件漏洞检 测系统,其特征是,所述的污染传播管理模块包括内存污染管理模块、寄存器污染管理模 块。其中内存污染管理模块采用链式哈希表数据结构记录受污染的内存地址空间、寄存器 污染管理模块采用数组记录系统中所有寄存器的污染状态。
全文摘要
一种计算机技术领域的低计算机系统资源开销的软件漏洞检测系统。二进制代码动态插入模块负责在用户程序运行过程中,将用户程序的二进制代码转化为汇编代码传送给污染传播初始化模块和信息流跟踪模块;污染传播初始化模块从二进制代码动态插入模块接收用户程序的汇编代码,并将存放源数据的寄存器和内存单元信息传送给污染传播管理模块;信息流跟踪模块接收用户程序的汇编代码,提取汇编代码所使用的内存单元和寄存器信息并查询污染传播管理模块,将从污染传播管理模块得到的查询结果和汇编代码的操作码信息传入漏洞规则库。本发明降低了系统资源开销减少了在原程序代码和分析代码间频繁发生的上下文切换的次数,降低了系统资源开销。
文档编号G06F21/00GK102034045SQ201010587600
公开日2011年4月27日 申请日期2010年12月15日 优先权日2010年12月15日
发明者倪康奇, 周侃, 张若愚, 王卓, 黄实秋 申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1