一种基于程序切片的软件安全测试方法

文档序号:8258356阅读:515来源:国知局
一种基于程序切片的软件安全测试方法
【技术领域】
[0001]本发明给出了一种基于程序切片的软件安全测试方法的设计方案,主要用于解决对于网页中的JavaScript脚本语言代码中可能存在的不可达路径检测的问题,属于软件安全测试领域。
【背景技术】
[0002]随着互联网技术的迅速发展,产生了许多web应用服务,桌面应用程序也更多地变得web化,浏览器的功能也变得越来越多。浏览器除了浏览网页之外,逐渐发挥着原本桌面程序的功能,成为人们日常办公、娱乐、交易、沟通的多功能服务平台。web应用的普及使得web技术的安全性必将成为一大课题。首当其冲的就是web应用软件的安全性。
[0003]软件是一系列按照特定顺序组织的计算机数据和指令的集合,开发人员编码的安全意识和能力以及新的web技术的发展必然会导致开发出来的web应用或多或少存在一定的故障。软件测试的根本目的就是要尽可能地消除软件中的故障,使得软件在投入使用前,其故障密度尽可能低或者达到可以接受的程度。随着web应用复杂性的提高,采用传统的软件测试技术发现和定位软件中的错误越来越难。
[0004]M.Weiser博士 1981年在国际软件工程会议上报告了有关程序切片技术的研宄成果。在程序设计和分析过程中会遇到这样的问题:一个大的程序如果被分解成为一系列小模块之后将会变得更加容易构建、理解和维护;在实际程序分析和调试过程中,分析人员有时只会对程序的一部分行为感兴趣,程序切片就是从观察这些行为开始的;如果这个感兴趣的行为可以表示为“在某些程序语句集中定义或使用某些变量的值”,那么这种规格说明就称之为一个切片准则;利用数据流分析技术可以找到所有可能对此特定行为产生影响的程序代码,这些代码称之为该程序的一个程序切片;根据EWeiser的定义,程序切片本身也是一个可执行程序,它的行为应该与源程序的那个特定子集是等价的。
[0005]程序切片是一种重要的程序分析和理解技术,对程序进行切片的过程就是去掉与兴趣点无关的代码,只保留特定计算相关的语句来分析程序。程序切片关注程序点之间的数据依赖和控制依赖等影响关系,通过对一个程序实行切片获得一个程序切片,该切片包含了可能对位于一个特定程序点的变量的值有影响的全部语句。程序切片技术在程序调试、回归测试、软件维护、程序理解以及逆向工程等方面有着广泛的应用。基于程序切片的软件测试是按照一定的切片准则对软件进行分解和剪裁,从而在简化程序的同时,使得程序切片代码仍然反映源程序的部分特征。
[0006]JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言,同时也是一种广泛用于客户端Web开发的直译式脚本语言,通常包含在网页的HTML语句中,由网页浏览器执行。常用于给HTML网页添加动态功能,比如响应用户的各种操作。目前针对传统C++、Java等静态语言的切片技术已趋向成熟,然而对于JavaScript等动态语言进行程序切片的研宄较少。这有两个主要原因,一是在webl.0时代,JavaScript只被用在对简单客户端的校验上,代码相对简单而且量少,而到了 web2.0时代,JavaScript才被用于完成复杂的操作来实现多种功能。二是JavaScript与HTML交互频繁,本身又具有灵活性和动态性,分析起来较为困难。因此,针对JavaScript进行程序切片的研宄就显得十分重要。
[0007]针对web安全的问题,国内外学者做出了大量的研宄工作,提出了不少的有效的解决方案,取得了卓越的成果。然而由于各种原因,例如开发人员考虑不周等,在代码中会存在着一些路径是不可达的,即这些路径无论程序进行任何输入都无法被执行。因此,不可达路径的存在会给基于路径的测试带来困难,影响测试的充分性。JavaScript脚本语言的代码中可能会含有一些包含不可达路径的语句,对其进行检测有利于提高安全测试的效率。
[0008]目前,对于程序不可达路径的研宄大多采用静态分析方法。静态分析方法是指在不执行程序的情况下对程序进行分析,即通过分析源码的词法语法、数据流、控制流等来挖掘程序的潜在问题。主要使用符号评估、线性求解以及基于规则的校验等一些手段。这些技术尽管为测试研宄奠定了一定的基础,但是由于没有考虑复杂性和可处理的程序类型等因素而有很大的限制。
[0009]由于静态分析是在程序运行前进行的,它会假定程序的所有路径都是可达的。然而程序中有一些路径是不可达的,即无论采用何种输入都不可能通过该路径。那么静态分析产生的结果可能会包含一些在实际执行过程中并不会真正运行的语句,即不可达路径。而数据流测试中,假如选定的测试数据是针对那些位于不可达路径上的语句,那么在测试过程中将并不会真正被测试到,这将对测试数据的生成阶段造成大量的浪费。换言之,不可达路径的信息可以改善静态分析的准确性。
[0010]可以通过探测静态分支的相关性来确定一部分不可达路径。对于某一条路径上的一个条件分支,如果它的结果可以由此之前的语句或分支确定,则它有静态相关性。实验证明,对于大型程序来说,在编译阶段可以探测到约有9%到40%的条件语句有相关性。因此,有一定数量的不可达路径在程序运行前可以探测到。
[0011]尽管静态方法可以排除一部分不可达路径,但仍有大量的不可达路径进入了动态测试阶段。早期的动态测试不能主动地直接针对不可达路径采取有效措施,通常在测试后采取限制的方法。较常见的方法是限定搜索次数和深度等,探视性执行失败即认为路径不可达,该方法的局限性很大,很容易造成路径的丢失,通过结合其他一些较好的搜索性算法可以改进该方法,但效果有限。
[0012]参考文献:
[0013][1]M.ffeiser.Program Slicing.1n proceeding of ICSE' 81f the 5thinternat1nal conference on Software engineering, 439-4491981.
[0014][2] Hongchang Zhang,Shujuan Jiang, Rong Jin.An Improved StaticProgram Slicing Algorithm Using Stack Trace[A].Proceedings of 2011IEEE 2ndInternat1nal Conference on Software Engineering and Service Science (ICSESS2011) [C].2011.
【发明内容】
:
[0015]技术问题:本发明的目的是提出一种基于程序切片的软件安全测试方法的设计方案,该方法将程序切片的思想应用到对程序中不可达路径的检测中,提出了一种基于程序切片的不可达路径检测方案。该方法从网页中提取的JavaScript脚本语言代码出发,通过将其转换成为LLVM中间表示,然后分别对其进行静态程序切片和动态程序切片,并对切片结果进行综合分析,构建一个程序不可达路径的检测方案,从而提高软件的测试效率。最终目的是开发一种基于程序切片的软件安全测试方法。
[0016]技术方案:本发明提出了一种基于程序切片的软件安全测试方法的设计方案,将程序切片的思想应用到对程序中不可达路径的检测中,提出了一种基于程序切片的不可达路径检测方案。该方法从网页中提取的JavaScript脚本语言代码出发,通过将其转换成为LLVM中间表示,然后分别对其进行静态程序切片和动态程序切片,并对切片结果进行综合分析,构建一个程序不可达路径的检测方案。由于静态程序切片对程序的输入不做任何假设,所做的分析完全以程序的静态信息为依据,所以会把不可达路径包含到切片结果中。然而对于动态程序切片,它关注的是在某个特定输入下执行的路径行为,而不会关注变量所有可能的输入导致的路径行为,因此动态切片的结果往往不会含有不可达路径。本文将静态程序切片与动态程序切片相结合,应用在JavaScript脚本语言代码的安全测试中,以检测程序中的不可达路径,从而提高软件的测试效率。
[0017]LLVM是构架编译器的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间、链接时间、运行时间以及空闲时间,对开发者保持开放,并兼容已有脚本。对关注编译技术的开发人员,LLVM的主要优点之一是提供与语言无关的中间代码。这
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1