[发明专利]一种基于中间语言分析的软件脆弱性测试方法无效
申请号: | 201110380232.0 | 申请日: | 2011-11-25 |
公开(公告)号: | CN102495795A | 公开(公告)日: | 2012-06-13 |
发明(设计)人: | 郭世泽;赵静;吴志勇;牛伟;陈哲;陈渝;肖奇学;曹鼎;杨威;王啸天;赵建芝;房珊瑶;施凡 | 申请(专利权)人: | 中国人民解放军总参谋部第五十四研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/45 |
代理公司: | 北京理工大学专利中心 11120 | 代理人: | 张利萍;高燕燕 |
地址: | 100083 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 中间 语言 分析 软件 脆弱 测试 方法 | ||
技术领域
本发明涉及软件测试技术领域,具体涉及到虚拟化技术、动态二进制插桩技术、中间语言分析技术、符号执行技术。
背景技术
在软件生命周期中,软件测试是非常重要的一个环节,高效完备的测试是保证软件质量的重要手段。基于测试的粒度,软件测试可以分为系统测试、模块测试、策略级测试。基于测试收集数据的类型,软件测试可以分为性能测试、功能测试、稳定性测试等。此外,根据测试过程是否依赖于程序内部结构,软件测试可以分为白盒测试、黑盒测试、灰盒测试。
基于分层和抽象的原则,计算机系统在不同层面上实现虚拟化技术,以提供多个同构或异构的平台。在硬件、系统以及应用程序各个层次上,虚拟化提供很好的物理隔离和逻辑隔离,并提供细粒度的运行时信息,在程序分析领域有广泛的应用。
动态二进制插桩是指在程序运行时,除了正常执行原始程序外,在相关位置插入执行其他代码,用于完成程序运行时信息收集、分析、优化等工作。根据是否对原始程序执行逻辑产生影响,插桩可以分为有损插桩和无损插桩。
中间语言分析和优化在编译技术领域有着广泛的应用。通过对程序源代码或机器指令进行翻译,转换为中间语言形式,导出某些隐含信息,从而方便程序的分析和优化。
与实际执行不同,在符号执行中,程序的输入数据是一个符号,这个符号代表任何可能的输入,而不是局限某个特定的输入。程序在执行计算、拷贝、比较、分支跳转等语句时,都可以表达为对应的符号操作。符号执行在软件测试和程序证明中有着广泛的应用。
发明内容
在传统测试方法中,普遍存在着代码覆盖率较低、测试效率低下的缺陷,无法根据实际需求,对特定的代码路径进行高效测试。有鉴于此,本发明提供了一种基于中间语言分析的软件脆弱性测试方法,用于发现程序潜在的设计缺陷。
该基于中间语言分析的软件脆弱性测试方法是这样实现的:
第一步:运行目标测试程序,采用基于动态二进制插桩方法将程序执行中的上下文信息记录到trace文件中;
其中上下文信息包括指令机器码、寄存器、访存数据。
第二步:对程序trace进行离线分析,顺次读取每一条指令,并将上下文信息保存到对应数据结构中,将指令机器码转换为中间语言表示;
其中中间语言包括7种基本操作,分别如下:
IRStmt_Mark:标记原始指令信息;
IRStmt_Put:临时变量向寄存器写数据
IRStmt_WrTmp:寄存器向临时变量写数据
IRStmt_Store:临时变量向内存写数据
IRStmt_Exit:退出中间语言某个代码块
IRStmt_PutE:临时变量向寄存器写浮点数据
IRStmt_Nop:空操作,无实际意义
将中间语言分成3个层次,即超级块、语句、表达式;一个Trace映射多个超级块,每个超级块包括多条语句,每条语句由多个表达式构成。
第三步:针对中间语言进行污点分析,包括污点标记和污点传播两个方面;污点标记通过分析Trace中的系统调用,将从外部设备读进内存的数据标记为污染源;污点传播通过分析中间语句,通过判断语句和源操作数类型,判定操作是否会引起污点传播;
第四步:约束条件收集:程序发生分支跳转时,污点对分支条件的影响即为约束条件;在中间语言中,如果分支跳转语句的条件被污染,那么收集对应的约束条件;
第五步:基于上述中间语言分析,某一条路径对应多个约束条件PC,对各个约束条件进行逻辑合取,生成布尔方程F=PC1∩PC2∩…∩PCn;
第六步:依据路径搜索策略对布尔方程进行变换,不同的方程对应程序所走的不同路径,如果方程有解,则存在输入使程序走对应路径,否则该路径不可达;
第七步:通过约束求解,得到各个路径对应输入值,基于输入模板,通过在相关位置上修改数据,生成新的测试用例,驱动程序继续执行。
本发明的有益效果为:
基于中间语言进行测试用例的自动化生成,使得在测试过程中,污点分析和符号执行的对象不再局限于某一个固定指令集,而是支持包括x86、arm等多种体系架构。因此,基于中间语言进行自动化测试,测试对象的运行平台即可以为PC或服务器,也可以为嵌入式系统。
附图说明
图1为基于中间语言进行自动化测试的系统框架;
图2为中间语言的翻译机制;
图3为中间语言的内部操作机制。
具体实施方式
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军总参谋部第五十四研究所,未经中国人民解放军总参谋部第五十四研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110380232.0/2.html,转载请声明来源钻瓜专利网。