[发明专利]一种程序分解方法无效
申请号: | 200910076769.0 | 申请日: | 2009-01-20 |
公开(公告)号: | CN101477611A | 公开(公告)日: | 2009-07-08 |
发明(设计)人: | 王铁磊;韦韬;邹维;毛剑;李佳静;赵新建;张超;戴帅夫 | 申请(专利权)人: | 北京大学 |
主分类号: | G06F21/22 | 分类号: | G06F21/22 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙) | 代理人: | 冯艺东 |
地址: | 100871北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 程序 分解 方法 | ||
技术领域
本发明涉及程序分析和程序安全审计,尤其涉及一种程序分解方法及其在漏洞挖掘中的应用,属于软件工程、信息安全技术领域。
背景技术
由于现在软件规模越来越大,设计越来越复杂,软件中不可避免地存在大量漏洞;同时,庞大的软件规模给程序分析和代码安全审计带来巨大困难。例如,Linux 2.6.27内核源代码行数已经超过了1000万行,Windows Vista操作系统代码规模在5000万行以上。为了分析如此大规模的软件,首先需要将大的程序分解为多个较小的代码片段从而使代码安全分析变为可行,因此程序分解技术一直是业界研究的焦点。
最常见的程序分解方法是程序切片技术。程序切片技术由M.Weiser于1979年首次提出,经过几十年的发展,理论研究日益丰富,形成了多个分支。但是,应用程序切片技术分解程序时,需要构造大量数据流方程,迭代求解这些数据流方程的过程异常复杂;此外,当程序中存在大量指针别名时,切片技术的准确性受到严重制约。
另一方面,程序切片技术并没有考虑到代码安全分析领域新产生的需求。根据CERT的研究报告,绝大部分的程序安全漏洞都是因为程序没有对污染数据(如从文件、网络等读取的数据)进行严格检验而造成的,当这些污染数据应用于敏感的系统调用(如execv、strcpy)时,就会引发严重的安全问题。安全分析人员需要对这种既包含污染数据引入函数(如fread,recv,recvfrom等)也包含污染数据敏感函数(如execv,strcpy,strcat等)的程序路径格外关注,因为这些路径最容易引发安全问题。比如,函数recv会引入污染数据,而函数execv对污染数据敏感,在下面所示代码中,
int size=recv(s,buffer,sizeof(buffer),0);
if(size!=-1){
check_buf(buffer);
execv(buffer,argv);
}
存在一条程序路径,调用函数recv()读取网络数据后,又调用了函数execv()。因为网络数据被直接用于函数execv()将会导致严重的安全威胁,分析人员需要严格分析这段代码以确认是否存在安全问题。
发明内容
本发明目的在于克服现有技术中存在的问题,提供一种程序分解方法,以及该方法用于漏洞挖掘的用途。
本发明程序分解方法通过分析程序函数调用图和程序控制流图,自动识别程序中最容易引起安全问题的程序路径(在这些程序路径上,调用污染数据引入函数后,又调用了污染数据敏感函数),进而将大规模程序分解为较小的代码片段,充分降低程序分析的复杂性,大大提高代码安全分析的效率。
本发明程序分解方法包括下列步骤:
1.设定始函数和终函数;
2.以所述始函数和直接或间接调用所述始函数的函数组成的函数集作为Source;以所述终函数以及直接或间接调用所述终函数的函数组成的函数集作为Sinks;若Source∩Sinks为空,则本方法不适用;
3.对[Source-(Source∩Sinks)]中的每一个函数,以该函数的控制流图中由入口节点经调用Source中函数的节点到出口节点的控制流作为分解后的控制流图;
对[Sinks-(Source∩Sinks)]中的每一个函数,以该函数的控制流图中由入口节点经调用Sinks中函数的节点到出口节点的控制流作为分解后的控制流图;
对(Source∩Sinks)中的每一个函数,以该函数的控制流图中由入口节点经调用(Source∪Sinks)中函数的节点到出口节点的控制流作为分解后的控制流图;
4.按照所述程序的函数调用图依次连接步骤c)所述各个分解后的控制流图,并以对应的程序作为分解后的程序。
在所述分解后的程序中,既调用了始函数,也调用了终函数。
进一步,上述步骤2可通过下述方法进行:
i.在所述程序的函数调用图中,设置始函数所在的节点具有“i”属性;设置终函数所在的节点具有“u”属性;
ii.以始函数或终函数所在的节点为起点,同时向上作下述递归分析:若某节点的子节点具有“i”属性,则设置该节点具有“i”属性;若某节点的子节点具有“u”属性,则设置该节点具有“u”属性;
iii.以所有具有“i”属性的节点所对应的函数组成的函数集作为Source;以所有具有“u”属性的节点所对应的函数组成的函数集作为Sinks。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910076769.0/2.html,转载请声明来源钻瓜专利网。