一种整型溢出漏洞自动化挖掘方法

文档序号:6560149阅读:167来源:国知局
专利名称:一种整型溢出漏洞自动化挖掘方法
技术领域
本发明涉及软件工程技术领域,尤其是一种整型溢出漏洞自动化挖掘方法。
背景技术
在软件测试中,对从外界得到的参数必须进行合法性检查,而很多软件开发者因为考虑不周忽略了参数有效性检查导致软件处理出错,整型溢出就是这种出错的一种情况。
通常,整型溢出主要是由于解析程序在处理字段时对字段类型进行处理时考虑不周全,在经过运算之后,导致申请的空间大小小于实际拷贝的空间大小,在拷贝操作时覆盖堆栈中的数据,最终造成进程崩溃,甚至执行任意代码。
例如void function(char *userdata,short rawlen)//userdata为用户指定的字符,rawlen为用户指定的预分配空间大小{char *buff;short len=rawlen;if(len!=strlen(userdata))return false;len=len *2;//len长度为用户提交长度的2倍,如果是0x8001的话,//最终的结果就是0x10002字节,同时len是一个有符号short型,//因此最终的长度为2字节buff=malloc(len);//分配len长度(2字节)的空间strncpy(buff,userdata,rawlen)//将用户提供的数据复制到buff缓冲区中去//长度为rawlen,这时由于用户数据长度为
//0x8001,而内存只分配了0x0002字节//造成溢出}从上面的程序可以看出,当程序执行到len=len *2;语句时,空间大小为指定长度的2倍,假设用户指定的长度为0x8001,在实际申请长度时需要申请0x8001*2=0x10002,但由于存储数据长度的变量是short类型,当把0x10002赋值给short类型变量datalenth时,最高位的1会因为溢出导致len的值实际为0x0002。也就是说,在上述程序中,如果用户提交的len>=0x8001,把>=0x10002长度的数据向实际分配的0x0002长度内存中拷贝,那么就会发生溢出。
整型溢出就是利用整数的范围、符号等问题所触发的安全漏洞,在软件测试中,必须尽量覆盖测试所有的外界输入参数,在上面的例子中,如果len这个参数从用户界面获取,那么就很容易构造出合适的测试用例来做测试可以构造输入不同长度的,特别是边界值、异常值(超大值、负值)进行测试来发现问题。但如果这个len参数是从某个私有格式的文件中获取,或者是从接收到的通信报文中某字段获取,即该参数为隐含参数时,就无法由测试人员来构造需要的测试数据了,这样就无法通过黑盒测试来发现对该参数处理异常的问题。

发明内容
本发明要解决的问题是提供一种整型溢出漏洞自动化挖掘方法,该方法能够对隐含的参数进行测试,进而能够发现对隐含参数处理的异常问题。
为解决上述技术问题,本发明的目的是通过以下技术方案实现的(1)指定被测对象的存储地址用指定字符填充数据;(2)被测对象进行数据处理;(3)捕获被测对象的处理结果,并判断数据处理结果是否有错误发生,如果是, 执行步骤(4);(4)执行错误处理。
其中,所述存储地址为物理地址和偏移地址。
其中,所述步骤(1)之前进一步包括(01)设置填充字符长度及内容;(02)设置被测对象的初始存储地址。
其中,所述步骤(01)之前进一步包括获取通信数据包,构造测试用网络协议型数据;以及所述步骤(2)包括被测对象获取构造的网络协议型数据,并对网络协议型数据进行处理。
其中,所述步骤(4)包括记录出错的位置或/和保存出错的网络协议型数据。
其中,所述步骤(2)包括被测对象执行对文件型数据的处理。
其中,所述步骤(4)包括记录出错的位置或/和保存出错的文件型数据。
其中,所述步骤(4)进一步包括41)修改被测对象的存储地址;42)判断是否到测试数据尾,如果是,结束流程,否则,执行步骤(1)。
本发明采用对任意偏移地址进行数据填充的方法来做输入参数异常测试,提供一个能够捕获异常的机制来进行错误判断,实现黑盒测试或独立的安全测试人员在不知道数据格式的情况下,通过自动对数据内容遍历的方法来尝试发现可能存储整型变量的位置,从而有效地进行整型溢出漏洞挖掘工作,提高软件开发的质量及稳定性。


图1为本发明的流程图;
图2为本发明实施例一流程图;图3为本发明实施例二的流程图;图4为本发明实施例三的流程图;图5为本发明实施例四的流程图。
具体实施例方式
本发明提供了一种整型溢出漏洞自动化挖掘方法,为使本发明的目的、技术方案、及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步进行详细说明。
参见图1,实现本发明的具体流程如下步骤101设置填充字符长度及内容,即输入参数,在进行测试时将被测对象的数据修改为设置的参数;步骤102设置被测对象的初始存储地址,测试时从设置的初始存储地址开始进行测试;步骤103在指定的存储地址用预先设置的参数进行数据填充,保存为一个构造好的测试用例;步骤104被测对象即软件,开始运行程序,对构造好的测试用例数据进行处理;步骤105捕获被测对象的处理结果;步骤106根据处理结果判断是否有错误发生,如果是,执行步骤107,否则,执行步骤108;步骤107记录出错的位置或/和保存出错的数据,得到含有隐含参数的整型溢出漏洞;步骤108修改被测对象的存储地址,作为下一次测试的初始地址;步骤109判断是否到被测对象的数据尾,若是,结束流程,否则,返回步骤103。
其中,所述存储地址为物理地址和偏移地址,对于16位的寄存器,物理地址和偏移地址之间的关系为物理地址=段地址*16+偏移地址。
对于文件型整型溢出漏洞自动化挖掘方法,下面结合附图并举例进行详细说明参见图2,为本发明实施例一的流程图,是通过以下步骤实现的步骤201设置填充字符长度及内容,即输入参数,进行测试时将被测对象的数据修改为设置的参数;步骤202设置被测对象的初始偏移地址,测试时从设置的初始偏移地址开始进行测试;步骤203在指定的偏移地址用预先设置的参数进行数据填充,保存为一个构造好的测试用例;步骤204被测对象即软件,开始运行程序,对构造好的测试用例数据进行处理;步骤205捕获被测对象的处理结果;步骤206根据处理结果判断是否有错误发生,如果是,执行步骤207,否则,执行步骤208;步骤207记录被测对象处理数据时出错的位置,得到含有隐含参数的文件型整型溢出漏洞;步骤208修改被测对象的偏移地址,作为下一次测试的初始地址;步骤209判断是否到被测对象的数据尾,若是,结束流程,否则,返回步骤203。
参见图3,为本发明实施例二的流程图,使通过以下步骤实现的步骤301设置填充字符长度及内容,即输入参数,当测试时将被测对象的数据修改为设置的参数;
步骤302设置被测对象的初始偏移地址,测试时从设置的初始偏移地址开始进行测试;步骤303在指定的偏移地址用预先设置的参数进行数据填充,保存为一个构造好的测试用例;步骤304被测对象即软件,开始运行程序,对构造好的测试用例数据进行处理;步骤305捕获被测对象的处理结果;步骤306根据处理结果判断是否有错误发生,如果是,执行步骤307,否则,执行步骤308;步骤307保存被测对象处理数据时出错的文件型数据,得到含有隐含参数的文件型整型溢出漏洞;步骤308修改被测对象的偏移地址,作为下一次测试的初始地址;步骤309判断是否到被测对象的数据尾,若是,结束流程,否则,返回步骤303。
以上为实现文件型整型溢出漏洞自动化挖掘流程,下面举例来进一步进行说明例如,测试Excel软件对Excel文件的处理过程步骤1设置填充字符长度为4字节,填充内容为0xFFFFFFFF。
步骤2从指定量0开始测试;步骤3对一个正常的Excel文件,把偏移地址0至3字节的数据更改为0xFFFFFFFF,保存为一个构造好的测试用数据文件;步骤4调用Excel软件打开构造的测试用数据文件;步骤5观察Excel软件运行情况,或者通过自动异常捕获机制来捕获错误,例如产生了异常过程,或者正常进程退出等;步骤6如果出错,记录偏移位置或保存出错的测试文件;
步骤7如果没有出错,则修改偏移地址,如把偏移量增加一个填充长度,如把0更改为4,下次更改为8等;步骤8判断是否到被测对象的数据尾,若是,结束流程,否则,返回步骤3。
其中,上述文件型整型溢出漏洞的挖掘方法中,当被测试对象运行程序,对构造的测试用例数据进行处理发现错误时,还包括记录被测对象处理数据时出错的位置并且保存出错的数据。
对于网络协议型整型溢出漏洞的自动化挖掘方法,下面参照附图并举实施例进行详细说明参见图4,为本发明实施例三的流程图,是通过以下方法来实现的步骤401获取通信数据包,得到测试用网络协议型数据;步骤402设置填充字符长度及内容,即输入参数,进行测试时将被测对象的数据修改为设置的参数;步骤403设置被测对象的初始偏移地址,测试时从设置的初始偏移地址开始进行测试;步骤404在指定的存储地址用预先设置的参数进行数据填充,保存为一个构造好的测试用例;步骤405向被测对象发送网络协议型数据;步骤406被测对象即软件运行程序,对网络协议型数据进行处理;步骤407捕获被测对象运行结果;步骤408根据处理结果判断是否有错误发生,如果是,执行步骤409,否则,执行步骤410;步骤409记录被测对象处理数据时的出错的位置;步骤410修改偏移地址,作为下次网络协议型数据测试的初始地址;步骤411判断是否到数据尾,若是,结束流程,否则,返回步骤404。
参见图5,为本发明实施例四的流程图,是通过以下步骤来实现的步骤501获取通信数据包,得到测试用网络协议型数据;步骤502设置填充字符长度及内容,即输入参数,进行测试时将被测对象的数据修改为设置的参数;步骤503设置被测对象的初始偏移地址,测试时从设置的初始偏移地址开始进行测试;步骤504在指定的存储地址用预先设置的参数进行数据填充,保存为一个构造好的测试用例;步骤505向被测对象发送网络协议型数据;步骤506被测对象即软件运行程序,对网络协议型数据进行处理;步骤507捕获被测对象运行结果;步骤508根据处理结果判断是否有错误发生,如果是,执行步骤509,否则,执行步骤510;步骤509保存被测对象处理数据时出错的网络协议型数据;步骤510修改偏移地址,作为下次网络协议型数据测试的初始地址;步骤511判断是否到数据尾,若是,结束流程,否则,返回步骤504。
例如,MSSQL客户端连接服务器的测试过程步骤1)从MSSQL数据库获取通信数据包,得到测试用数据;步骤2)设置填充字符长度及内容,即输入参数,进行测试时将被测对象的数据修改为设置的参数;步骤3)设置被测对象的初始偏移地址,测试时从设置的初始偏移地址开始进行测试;步骤4)在指定的偏移地址用预先设置的参数进行数据填充,保存为一个构造好的测试用例;步骤5)向被测对象发送构造的测试用数据;
步骤6)被测对象即软件运行程序,对数据进行处理;步骤7)捕获被测对象运行结果;步骤8)根据处理结果判断是否有错误发生,如果是,执行步骤9),否则,执行步骤10);步骤9)记录被测对象处理数据时出错的偏移地址或保存出错的数据;步骤10)修改偏移地址,作为下次网络协议型数据测试的初始地址;步骤11)判断是否到数据尾,若是,结束流程,否则,返回步骤504。
其中,上述网络协议型整型溢出漏洞挖掘方法中,当被测试对象运行程序,对构造的测试用例数据进行处理发现错误时,还包括记录被测对象处理数据时出错的位置并且保存出错的数据。
其中,所述的偏移地址也可以用物理地址来替换,对于16位的寄存器,物理地址和偏移地址之间的关系为物理地址=段地址*16+偏移地址。
其中,填充长度、填充内容、偏移地址都可根据测试人员的测试目的自行指定,如在64位的操作系统中可设定填充长度为8字节,其它也可以设置为1字节的byte型,2字节的short型,填充内容也可以添全0或其它值。
以上对本发明所提供的一种整型溢出漏洞自动化挖掘方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种整型溢出漏洞自动化挖掘方法,其特征在于,该方法包括(1)指定被测对象的存储地址用指定字符填充数据;(2)被测对象进行数据处理;(3)捕获被测对象的处理结果,并判断数据处理结果是否有错误发生,如果是,执行步骤(4);(4)执行错误处理。
2.根据权利要求1所述的整型溢出漏洞自动化挖掘方法,其特征在于,所述存储地址为物理地址和偏移地址。
3.根据权利要求1所述的整型溢出漏洞自动化挖掘方法,其特征在于,所述步骤(1)之前进一步包括(01)设置填充字符长度及内容;(02)设置被测对象的初始存储地址。
4.根据权利要求3所述的整型溢出漏洞自动化挖掘方法,其特征在于,所述步骤(01)之前进一步包括获取通信数据包,构造测试用网络协议型数据;以及所述步骤(2)包括被测对象获取构造的网络协议型数据,并对网络协议型数据进行处理。
5.根据权利要求4所述的整型溢出漏洞自动化挖掘方法,其特征在于,所述步骤(4)包括记录出错的位置或/和保存出错的网络协议型数据。
6.根据权利要求1所述的整型溢出漏洞自动化挖掘方法,其特征在于,所述步骤(2)包括被测对象执行对文件型数据的处理。
7.根据权利要求6所述的整型溢出漏洞自动化挖掘方法,其特征在于,所述步骤(4)包括记录出错的位置或/和保存出错的文件型数据。
8.根据权利要求1所述的整型溢出漏洞自动化挖掘方法,其特征在于,所述步骤(4)进一步包括41)修改被测对象的存储地址;42)判断是否到测试数据尾,如果是,结束流程,否则,执行步骤(1)。
全文摘要
本发明属于软件工程技术领域,提供了一种整型溢出漏洞自动化挖掘方法,该方法具体为设置填充字符长度、内容及存储地址,在指定的存储地址用指定的字符填充数据,被测对象执行对文件型数据或网络协议型数据的处理,捕获被测对象是否有错误发生,如果有错误发生,记录出错的位置或/和保存出错的数据,并修改存储地址,如此循环测试,直到被测对象的数据尾为止。利用该方法,能够实现黑盒测试或独立的安全测试人员在不知道数据格式的情况下,通过自动对数据内容遍历的方法来尝试发现可能存储整型变量的位置,从而有效地进行整型溢出漏洞挖掘工作,提高软件开发的质量及稳定性。
文档编号G06F11/36GK1889059SQ20061010359
公开日2007年1月3日 申请日期2006年7月25日 优先权日2006年7月25日
发明者赵武, 刘海军 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1