[发明专利]一种软件漏洞挖掘方法有效
| 申请号: | 201010171979.0 | 申请日: | 2010-05-07 |
| 公开(公告)号: | CN101847121A | 公开(公告)日: | 2010-09-29 |
| 发明(设计)人: | 王铁磊;韦韬;邹维;张超;戴帅夫;丁羽;李义春 | 申请(专利权)人: | 北京大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 北京君尚知识产权代理事务所(普通合伙) 11200 | 代理人: | 冯艺东 |
| 地址: | 100871 北*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 软件 漏洞 挖掘 方法 | ||
技术领域
本发明属于软件工程和信息安全领域,具体涉及一种软件漏洞挖掘方法。
背景技术
软件安全问题已经成为信息系统诸多安全问题的根源之一,如何发现软件中的安全漏洞至关重要。一种常见的软件漏洞挖掘技术是通过对目标软件的正常输入随机修改,从而构造大量畸形数据作为程序输入,在程序处理这些畸形数据时,观测目标程序的表现,一旦程序发生异常,则发现了一个潜在的安全问题。
然而,很多文件格式和网络协议中都含有校验和(checksum)信息。校验和是一种常用的数据完整性检测方法。例如,TCP/IP协议报文中含有整个报文的校验和值、PNG图片中为每个数据块都保存了校验和值。应用程序在处理具有校验和的输入时,通常会重新计算一个校验值,并与输入中的校验和相比较。
进一步地,为表述方便,假设输入数据由两部分组成:数据部分D和校验和部分C。常见的基于校验和的输入数据完整性检测模式如下:
if(Checksum(D)!=C)
error();
程序在处理每个输入时,通常会重新计算该输入的校验和Checksum(D),这里Checksum()代表不同的校验和算法。程序进一步比较Checksum(D)和输入数据中的C,如果二者不一致,意味着输入数据已经遭到了破坏,程序就不会再处理这个输入(例如,生成错误信息后退出)。
校验和给软件动态漏洞挖掘方法带来很多困难,特别是在文件格式和协议格式不公开的情况下。对正常数据的随机修改将导致整个数据的完整性遭到破坏,而目标程序内部通过校验和检测就能发现输入数据遭到破坏,这导致传统动态漏洞挖掘技术生成的畸形数据很难对目标程序做到有效测试。特别地,当校验和算法未知,文件格式和协议格式不公开的情况下,现有的大部分软件动态漏洞挖掘技术都无法对目标程序有效测试和分析。
校验和函数本质上是单向哈希函数,很难找到具有相同的校验值的不同数据。例如,对正常数据部分D修改后的数据部分为D’,针对D’重新计算的校验和Checksum(D’)很难与原始数据中的校验和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)当目标程序将正常数据读入内存时,进一步地记录相应内存地址与输入数据之间的依赖关系;特别地,以每个字节在正常输入数据中的位置偏移标示该字节,详细记录每个内存单元来源于哪些字节。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010171979.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种PC硬盘信息防盗的逻辑绑定方法
- 下一篇:一种触摸板获取输入信息的方法





