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

缓冲区溢出漏洞自动修复方法技术

技术编号:13423011 阅读:41 留言:0更新日期:2016-07-28 18:11
本发明专利技术是一种缓冲区溢出漏洞自动修复方法,基于缓冲区溢出模型,自动修复程序中已知的缓冲区溢出漏洞。首先读取并解析已经通过确认过的缓冲区溢出信息文件,该文件包含缓冲区溢出漏洞的源文件名、溢出漏洞代码所在的行号、溢出漏洞代码所使用的API,根据缓冲区溢出漏洞的位置信息得到缓冲区溢出漏洞修复的位置,根据缓冲区溢出漏洞代码所使用的API,以及缓冲区溢出模型得到相应的缓冲区溢出漏洞修复策略;定位到缓冲区溢出漏洞代码的位置,提取函数调用的参数信息;根据提取出的函数调用的参数信息和使用的API,构造出修复代码插桩到源代码中完成修复。

【技术实现步骤摘要】

本专利技术属于软件工程领域,尤其涉及一种缓冲区溢出漏洞自动修复方法
技术介绍
缓冲区是指一个程序在运行期间在内存中分配的一个连续的存储空间,该存储空间用于存放各种类型的数据。缓冲区溢出是指如果用户输入的数据长度超出了程序为其分配的内存空间,这些数据就会覆盖程序为其它数据分配的内存空间,造成缓冲区溢出。缓冲区溢出漏洞是最常见的软件安全漏洞之一,对软件中存在的缓冲区溢出漏洞进行修复是保证软件安全的重要手段。软件漏洞自动修复属于软件维护的范畴。目前缓冲区溢出漏洞的修复在很大程度上需要人工的参与,会耗费较多人力,延长软件维护耗费的时间,增加软件维护成本。
技术实现思路
针对现有技术中存在的问题,本专利技术提出一种缓冲区溢出漏洞自动修复方法,通过建立缓冲区溢出模型并具此提出相应的修复方法,来自动修复程序中已知的缓冲区溢出漏洞。为了实现上述专利技术目的,其采用的技术方案为:首先读取并解析已经通过人工确认或者通过缓冲区溢出检测工具确认过的缓冲区溢出漏洞报告文件,该文件包含缓冲区溢出漏洞的源文件名、溢出漏洞代码所在的行号、溢出漏洞代码所使用的API,根据缓冲区溢出漏洞的位置信息可以得到缓冲区溢出漏洞修复的位置,根据缓冲区溢出漏洞代码所使用的API,以及缓冲区溢出模型可以得到相应的缓冲区溢出漏洞修复的策略;定位到缓冲区溢出漏洞代码的位置,提取出函数调用的参数信息;根据提取出的函数调用的参数信息和使用的API,构造出修复代码插桩到源代码中完成修复。本专利技术提出的缓冲区溢出自动修复方法所包含的步骤为:步骤1,读取缓冲区溢出漏洞报告文件;步骤2,从缓冲区溢出漏洞报告文件中解析出包含缓冲区溢出漏洞的源文件名、溢出漏洞代码所在行号、溢出漏洞代码所使用的API;步骤3,对同一待修复源文件的漏洞行号进行由大到小排序:在修复溢出漏洞时是通过在漏洞代码行前插入越界检查代码(简称插桩),首先对于每一个源文件按缓冲区溢出漏洞代码所在的行号由大到小整理同一个源文件的缓冲区溢出漏洞位置,对于每个待修复源文件,每次都从该文件中缓冲区溢出漏洞代码所在的行号最大的位置开始,由后向前倒序插桩,用以防止插桩后溢出位置的行号改变而影响插桩;并且对同一个源文件执行一次读写操作就可以完成插桩,效率相对较高;步骤4,读取待修复源代码文件;步骤5,获取最后一个溢出漏洞代码,由函数名确定使用的修复方法,然后实行缓冲区溢出漏洞自动修复:步骤5-1,分割字符串,提取函数名和函数调用的参数信息,并判断提取到的函数名是否与报告的函数名相同,不相同则退出并报错;步骤5-2,如果修复方法为添加越界检查:在该行前面根据函数名和函数调用的参数信息以及该API溢出条件插入越界检查代码。步骤5-3,如果修复方法为替换API:替换该行为更安全的函数调用。步骤5-4,如果修复方法为扩大缓冲区大小:从静态分析结果文件中获取到变量定义点,修改变量定义,为变量分配更大的内存空间步骤5-5,按上述步骤处理该文件所有包含溢出漏洞的代码。步骤6,跳转至步骤4,直到所有待修复源代码文件都被修复。本专利技术所述的方法具有如下的有益效果:(1)本专利技术所述的缓冲区溢出漏洞自动修复方法,提出了一个缓冲区溢出模型,通过分析C/C++语言中的API和数组引用,得到每个API和数组引用发生缓冲区溢出的条件,构成了一个缓冲区溢出模型,提供了精确的缓冲区溢出条件。(2)本专利技术所述的缓冲区溢出漏洞自动修复方法,对同一待修复源文件的漏洞行号进行排序时由大到小排序,使用倒序插桩,用以防止插桩后溢出位置的行号改变而影响插桩;并且对同一个源文件执行一次读写操作就可以完成插桩,效率相对较高。(3)本专利技术所述的缓冲区溢出漏洞自动修复方法,提供了可选的缓冲区溢出漏洞自动修复方法,可以根据需求选择所需的缓冲区溢出漏洞自动修复方法,比如在缓冲区溢出代码位置前一行添加越界检查代码、替换缓冲区溢出漏洞代码位置使用的API为更安全的API、修改变量定义来扩大缓冲区大小,提高了缓冲区溢出漏洞自动修复的灵活性。(4)本专利技术所述的缓冲区溢出漏洞自动修复方法,通过自动解析已确认的缓冲区溢出漏洞信息,自动生成缓冲区溢出漏洞修复代码,自动完成缓冲区溢出漏洞修复代码插桩,完成缓冲区溢出漏洞自动修复。在已知软件中已经确认过的漏洞,通过一条或若干条指令,就能一次性地自动修复这些已知的漏洞,代替了人工修复的工作,提高了缓冲区溢出漏洞修复效率,降低了缓冲区溢出漏洞修复成本。附图说明图1是本专利技术实施例的缓冲区溢出漏洞自动修复方法流程图。具体实施方式以下结合图1和具体实施例对本专利技术作进一步详细说明。根据图1所示的修复方法流程图:一.建立缓冲区溢出模型本实施例参照C99C语言标准规范,对于容易出现缓冲区溢出漏洞的API,根据其功能特点,确定这些API发生缓冲区溢出的条件,形成表1所示的缓冲区溢出模型。表1二.提出缓冲区溢出漏洞修复方法通过参考缓冲区溢出模型,提出下表2的缓冲区溢出漏洞的修复方法。表2三.读取与解析命令行参数,确定修复方法通过命令行参数来决定具体的修复方法,-m/--mode的值可为default、API-REP、extend。default(或者不写-mdefault)为添加越界检查,API-REP为API替换,extend为扩大数组。四.读取与解析缓冲区溢出漏洞报告文件读取包含项目中已知的缓冲区溢出漏洞的详细信息的报告文件,报告文件可以是通过人工确认的缓冲区溢出漏洞,也可以是某个检测工具检测出的缓冲区溢出漏洞。报告文件中包含以下内容:1.缓冲区溢出漏洞代码所在的文件名。2.缓冲区溢出漏洞代码所在的行号(文件的第几行)。3.缓冲区溢出漏洞代码所包含的函数名。从缓冲区溢出漏洞报告文件中解析出包含缓冲区溢出漏洞的源文件名、溢出漏洞代码所在行号、溢出漏洞代码所使用的API。对同一待修复源文件的漏洞行号进行由大到小排序:在修复溢出漏洞时在漏洞代码行前面插入几行越界检查的代码(简称插桩),首先对于每一个源文件按缓冲区溢出漏洞代码所在的行号由大到小整理同一个源文件的缓冲区溢出漏洞位置,对于每个待修复源文件,每次都从该文件中缓冲区溢出漏洞代码所在的行号最大的位置开始,由后向前倒序插桩,以防止插桩后因溢出漏洞位置行号的改变而影响插桩;并且对同一个源文件执行一次读写操作就可以完成插桩,效率相对较高。五.缓冲区溢出漏洞自动修复过程修复输入:待修复源码、缓冲区溢出漏本文档来自技高网...

【技术保护点】
缓冲区溢出漏洞自动修复方法,其特征在于,包括以下步骤:步骤1,读取缓冲区溢出漏洞报告文件;步骤2,从缓冲区溢出漏洞报告文件中解析出缓冲区溢出漏洞的源文件名、溢出漏洞代码所在行号、溢出漏洞代码所使用的API;步骤3,对同一待修复源文件的漏洞行号进行排序;步骤4,读取待修复源代码文件;步骤5,获取最后一个溢出漏洞代码,根据函数名,在缓冲区溢出模型中确定使用的修复方法,实行缓冲区溢出漏洞修复,输出修复后的源码;步骤6,跳转至步骤4,直到所有待修复源代码文件都被修复。

【技术特征摘要】
1.缓冲区溢出漏洞自动修复方法,其特征在于,包括以下步骤:
步骤1,读取缓冲区溢出漏洞报告文件;
步骤2,从缓冲区溢出漏洞报告文件中解析出缓冲区溢出漏洞的源文件名、溢出漏洞代码
所在行号、溢出漏洞代码所使用的API;
步骤3,对同一待修复源文件的漏洞行号进行排序;
步骤4,读取待修复源代码文件;
步骤5,获取最后一个溢出漏洞代码,根据函数名,在缓冲区溢出模型中确定使用的修复
方法,实行缓冲区溢出漏洞修复,输出修复后的源码;
步骤6,跳转至步骤4,直到所有待修复源代码文件都被修复。
2.根据权利要求1所述的自动修复方法,其特征在于:缓冲区溢出漏洞报告文件是通过
人工确认的缓冲区溢出漏洞,或检测工具检测出的缓冲区溢出漏洞;报告文件中包含以下内容:
(1)缓冲区溢出漏洞代码所在的文件名;
(2)缓冲区溢出漏洞代码所在的行号;
(3)缓冲区溢出漏洞代码所包含的函数名。
3.根据权利要求1所述的自动修复方法,其特征在于,步骤3中排序方法为:按缓冲区
溢出漏洞代码所在的行号由大到小整理同一个源文件的缓冲区溢...

【专利技术属性】
技术研发人员:王林章高凤娟李宣东
申请(专利权)人:南京大学
类型:发明
国别省市:江苏;32

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

1