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

一种软件漏洞挖掘方法技术

技术编号:3994002 阅读:349 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种软件漏洞挖掘方法,属于软件工程和信息安全领域。本方法为:1)将多个正常数据输入目标程序,收集该目标程序的运行时信息;2)生成畸形数据,并将其输入该目标程序,收集该目标程序的运行时信息;3)根据1)、2)收集的运行时信息,识别该目标程序中校验和的检测代码;4)修改校验和的检测代码,使得目标程序处理畸形数据时的执行行为与处理正常数据时一致;5)生成若干畸形数据并输入修改后的目标程序,将使其崩溃的畸形数据作为样本数据;6)修改每个样本数据中校验和的域值并将其输入原目标程序,如果原目标程序崩溃或发生异常则报告一个潜在的安全漏洞。与现有技术相比,本发明专利技术可以大大提高漏洞挖掘的效率。

【技术实现步骤摘要】

本专利技术属于软件工程和信息安全领域,具体涉及。
技术介绍
软件安全问题已经成为信息系统诸多安全问题的根源之一,如何发现软件中的安 全漏洞至关重要。一种常见的软件漏洞挖掘技术是通过对目标软件的正常输入随机修改, 从而构造大量畸形数据作为程序输入,在程序处理这些畸形数据时,观测目标程序的表现, 一旦程序发生异常,则发现了一个潜在的安全问题。然而,很多文件格式和网络协议中都含有校验和(checksum)信息。校验和是一种 常用的数据完整性检测方法。例如,TCP/IP协议报文中含有整个报文的校验和值、PNG图片 中为每个数据块都保存了校验和值。应用程序在处理具有校验和的输入时,通常会重新计 算一个校验值,并与输入中的校验和相比较。进一步地,为表述方便,假设输入数据由两部分组成数据部分D和校验和部分C。 常见的基于校验和的输入数据完整性检测模式如下if (Checksum (D) ! =C)error ();程序在处理每个输入时,通常会重新计算该输入的校验和Checksum ),这里 ChecksumO代表不同的校验和算法。程序进一步比较Checksum )和输入数据中的C,如 果二者不一致,意味着输入数据已经遭到了破坏,程序就不会再处理这个输入(例如,生成 错误信息后退出)。校验和给软件动态漏洞挖掘方法带来很多困难,特别是在文件格式和协议格式不 公开的情况下。对正常数据的随机修改将导致整个数据的完整性遭到破坏,而目标程序内 部通过校验和检测就能发现输入数据遭到破坏,这导致传统动态漏洞挖掘技术生成的畸形 数据很难对目标程序做到有效测试。特别地,当校验和算法未知,文件格式和协议格式不公 开的情况下,现有的大部分软件动态漏洞挖掘技术都无法对目标程序有效测试和分析。校验和函数本质上是单向哈希函数,很难找到具有相同的校验值的不同数据。例 如,对正常数据部分D修改后的数据部分为D’,针对D’重新计算的校验和Checksum ’ ) 很难与原始数据中的校验和C 一致。类似地,对原始数据中校验和部分C的修改为C’, Checksum(D)也不可能与C’ 一致。
技术实现思路
本专利技术的目的在于克服现有软件动态漏洞挖掘技术的不足,提供一种软件漏洞挖 掘方法,特别是当输入格式中含有校验和信息时,本专利技术依然能对目标程序有效测试。本专利技术所提出一种动态软件漏洞挖掘方法,其步骤包括1.对目标程序输入多个正常数据,收集程序处理每个正常数据的运行时信息;2.基于步骤1收集的运行时信息,修改正常数据,生成畸形数据;3.对目标程序输入多个畸形数据,收集程序处理每个畸形数据的运行时信息;4.基于步骤1、3收集的运行时信息,识别程序中进行校验和检测的代码,具体地 说,定位程序中用于检测校验和的条件跳转语句在输入正常数据时,这些条件跳转语句一 直发生跳转/不发生跳转,在输入畸形数据时,这些条件跳转语句一直不发生跳转/发生跳 转;5.基于步骤4的输出,修改目标程序;具体地说,更改步骤4中定位的条件跳转指 令,使得即使输入畸形数据,目标程序的执行行为与输入正常数据时一致;6.生成大量畸形数据,对修改后的目标程序进行测试;7.对于能够使修改后的程序崩溃的畸形样本,修改该样本中的校验和域,使原目 标程序处理修改后的样本数据时的执行行为与处理正常数据时一致(即使修改后的样本 数据能够通过原始目标程序的校验和检测),生成新的畸形样本;8.将步骤7中生成的畸形样本,重新输入至原始目标程序。如果程序处理该样本 时仍然崩溃,收集程序执行的调用栈以及执行上下文信息(例如当时寄存器信息),并报告 一个潜在的安全漏洞。进一步地,上述步骤1在处理每个正常输入时包括1. a)基于系统调用劫持技术(HOOK),劫持文件打开(例如UNIX系统里open ()函 数)、文件读取(例如UNIX系统里read()函数)、文件关闭(例如UNIX系统中close ()函 数),以及网络数据操作函数,监控目标程序对正常数据的读入。根据操作系统不同以及对 输入数据关注点不同,可以对需要劫持的函数范围适当修改,以达到最佳效果。1. b)当目标程序将正常数据读入内存时,进一步地记录相应内存地址与输入数据 之间的依赖关系;特别地,以每个字节在正常输入数据中的位置偏移标示该字节,详细记录 每个内存单元来源于哪些字节。1. c)基于代码植入技术(Code Instrumentation),在目标程序的每条机器指令前 都植入监控代码,跟踪输入数据的每个字节在程序运行的传播。特别的,根据不同指令的语 意信息,植入不同的监控代码,监控每条指令的执行。a)对于算术运算(例如add, sub, mul)和逻辑运算(例如and, or, xor)指令,目 的操作数依赖的输入字节信息等于所有源操作数依赖的输入字节的并集。b)对于数据传送指令(例如mov,stos),目的操作数依赖的输入字节信息等于源 操作数所依赖的输入字节信息。c)对于能够影响EFLAGS的指令(例如test,add,or),记录EFLAGS依赖的输入字 节信息等于所有操作数依赖的输入字节的并集。特别地,记录该指令中第一个操作数和第 二个操作数所依赖的输入字节信息。d)对于条件跳转指令(例 如JNZ,JBE, JL),检查EFLAGS依赖多少输入字节。如果 EFLAGS依赖的输入字节个数超过一个预定义的数值(用户指定),输出该跳转指令的地址、 跳转是否发生、以及影响EFLAGS的指令的第一个操作数和第二个操作数所依赖的输入字 节信息。例如,“0x8000 je 0x8010”代表地址0x8000处的je指令的目的地址是0x8010, 如果执行该指令后发生跳转,而EFLAGS依赖的输入字节个数超过了预定的数值,该步骤输 出指令地址0x8000、该指令发生跳转以及影响EFLAGS的指令的第一个操作数和第二个操 作数所依赖的输入字节信息。e)类似的,对于其他类型的指令(例如setnz),根据指令的语意植入相应的监控 代码。步骤1输出的程序运行时信息包括1)依赖的输入字节数目超过预定值的条件跳 转指令,2)这些跳转指令是否发生跳转,3)影响这些指令中所用到的标志寄存器EFLAGS的 指令的第一个操作数和第二个操作数所依赖的输入字节信息。进一步地,上述步骤2包括2. a)对步骤1中所使用的正常数据,进行修改生成畸形样本。特别地,按照步骤1 输出的条件跳转指令的先后顺序,依次将这些条件跳转指令所依赖的输入字节替换成随机 值,生成畸形样本。进一步地,上述步骤3与步骤1类似,但是输入步骤2中生成畸形数据,收集目标 程序处理畸形样本时的运行时信息。进一步地,上述步骤4包括4. a)对于步骤1中输出的程序运行时信息,统计两个集合P0和Pl。其中,PO包 含步骤1中输出的条件跳转指令中没有发生跳转的指令;Pi包含步骤1中输出的条件跳 转指令中发生跳转的指令。而且,PO U Pl中的每个条件跳转指令中所使用的标志寄存器 EFLAGS依赖的输入字节数目均超过了预定义的数值。4. b)对于步骤3中输出的程序运行时信息,统计计算两个集合PO'和Pl'。其 中,PO'包含步骤3中输出的条件跳转指令中没有发生跳转的指令;Pl'包含步骤3中输出 的条件跳转指令中发生跳转的指令。本文档来自技高网
...

【技术保护点】
一种软件漏洞挖掘方法,其步骤为:1)将多个正常数据分别输入目标程序,收集该目标程序处理每个正常数据的运行时信息;2)根据步骤1)所得的运行时信息,修改正常数据,生成畸形数据;3)将生成的多个畸形数据分别输入该目标程序,收集该目标程序处理每个畸形数据的运行时信息;4)根据步骤1)、3)收集的运行时信息,识别该目标程序中校验和的检测代码;5)修改识别出的校验和的检测代码,使得修改后的目标程序处理畸形数据时的执行行为与处理正常数据时一致;6)生成若干畸形数据并输入步骤5)所修改后的目标程序;7)将使修改后的目标程序崩溃的畸形数据作为样本数据,修改每个样本数据中校验和的域值,使修改后的样本数据能够通过原始目标程序的校验和检测;8)将步骤7)修改后的样本数据输入原目标程序,如果原目标程序崩溃或发生异常则收集原目标程序执行的调用栈以及执行上下文信息,并报告一个潜在的安全漏洞;其中,所述运行时信息包括:条件跳转指令、条件跳转指令是否发生跳转、影响条件跳转指令中所用到的标志寄存器指令的第一个操作数所依赖的输入字节信息和第二个操作数所依赖的输入字节信息。

【技术特征摘要】

【专利技术属性】
技术研发人员:王铁磊韦韬邹维张超戴帅夫丁羽李义春
申请(专利权)人:北京大学
类型:发明
国别省市:11[中国|北京]

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

1