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

技术编号:11365178 阅读:121 留言:0更新日期:2015-04-29 15:32
本发明专利技术给出了一种基于程序切片的软件安全测试方法,该方法对程序切片技术进行了探讨,并提出了一种基于程序切片的不可达路径检测方案。本方法以网页中提取的JavaScript脚本语言代码为输入,将其转换成为LLVM中间表示,然后分别对其进行静态程序切片和动态程序切片。由于静态程序切片对程序的输入不做任何假设,所做的分析完全以程序的静态信息为依据,所以会把不可达路径包含到切片结果中。然而对于动态程序切片,它关注的是在某个特定输入下执行的路径行为,而不会关注变量所有可能的输入导致的路径行为,因此动态切片的结果往往不会含有不可达路径。通过将静态程序切片与动态程序切片相结合,可以检测程序中的不可达路径,从而提高软件的测试效率。

【技术实现步骤摘要】
一种基于程序切片的不可达路径检测方法
本专利技术给出了一种基于程序切片的不可达路径检测方法的设计方案,主要用于解决对于网页中的JavaScript脚本语言代码中可能存在的不可达路径检测的问题,属于软件安全测试领域。
技术介绍
随着互联网技术的迅速发展,产生了许多web应用服务,桌面应用程序也更多地变得web化,浏览器的功能也变得越来越多。浏览器除了浏览网页之外,逐渐发挥着原本桌面程序的功能,成为人们日常办公、娱乐、交易、沟通的多功能服务平台。web应用的普及使得web技术的安全性必将成为一大课题。首当其冲的就是web应用软件的安全性。软件是一系列按照特定顺序组织的计算机数据和指令的集合,开发人员编码的安全意识和能力以及新的web技术的发展必然会导致开发出来的web应用或多或少存在一定的故障。软件测试的根本目的就是要尽可能地消除软件中的故障,使得软件在投入使用前,其故障密度尽可能低或者达到可以接受的程度。随着web应用复杂性的提高,采用传统的软件测试技术发现和定位软件中的错误越来越难。M.Weiser博士1981年在国际软件工程会议上报告了有关程序切片技术的研究成果。在程序设计和分析过程中会遇到这样的问题:一个大的程序如果被分解成为一系列小模块之后将会变得更加容易构建、理解和维护;在实际程序分析和调试过程中,分析人员有时只会对程序的一部分行为感兴趣,程序切片就是从观察这些行为开始的;如果这个感兴趣的行为可以表示为“在某些程序语句集中定义或使用某些变量的值”,那么这种规格说明就称之为一个切片准则;利用数据流分析技术可以找到所有可能对此特定行为产生影响的程序代码,这些代码称之为该程序的一个程序切片;根据M.Weiser的定义,程序切片本身也是一个可执行程序,它的行为应该与源程序的那个特定子集是等价的。程序切片是一种重要的程序分析和理解技术,对程序进行切片的过程就是去掉与兴趣点无关的代码,只保留特定计算相关的语句来分析程序。程序切片关注程序点之间的数据依赖和控制依赖等影响关系,通过对一个程序实行切片获得一个程序切片,该切片包含了可能对位于一个特定程序点的变量的值有影响的全部语句。程序切片技术在程序调试、回归测试、软件维护、程序理解以及逆向工程等方面有着广泛的应用。基于程序切片的软件测试是按照一定的切片准则对软件进行分解和剪裁,从而在简化程序的同时,使得程序切片代码仍然反映源程序的部分特征。JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言,同时也是一种广泛用于客户端Web开发的直译式脚本语言,通常包含在网页的HTML语句中,由网页浏览器执行。常用于给HTML网页添加动态功能,比如响应用户的各种操作。目前针对传统C++、Java等静态语言的切片技术已趋向成熟,然而对于JavaScript等动态语言进行程序切片的研究较少。这有两个主要原因,一是在web1.0时代,JavaScript只被用在对简单客户端的校验上,代码相对简单而且量少,而到了web2.0时代,JavaScript才被用于完成复杂的操作来实现多种功能。二是JavaScript与HTML交互频繁,本身又具有灵活性和动态性,分析起来较为困难。因此,针对JavaScript进行程序切片的研究就显得十分重要。针对web安全的问题,国内外学者做出了大量的研究工作,提出了不少的有效的解决方案,取得了卓越的成果。然而由于各种原因,例如开发人员考虑不周等,在代码中会存在着一些路径是不可达的,即这些路径无论程序进行任何输入都无法被执行。因此,不可达路径的存在会给基于路径的测试带来困难,影响测试的充分性。JavaScript脚本语言的代码中可能会含有一些包含不可达路径的语句,对其进行检测有利于提高安全测试的效率。目前,对于程序不可达路径的研究大多采用静态分析方法。静态分析方法是指在不执行程序的情况下对程序进行分析,即通过分析源码的词法语法、数据流、控制流等来挖掘程序的潜在问题。主要使用符号评估、线性求解以及基于规则的校验等一些手段。这些技术尽管为测试研究奠定了一定的基础,但是由于没有考虑复杂性和可处理的程序类型等因素而有很大的限制。由于静态分析是在程序运行前进行的,它会假定程序的所有路径都是可达的。然而程序中有一些路径是不可达的,即无论采用何种输入都不可能通过该路径。那么静态分析产生的结果可能会包含一些在实际执行过程中并不会真正运行的语句,即不可达路径。而数据流测试中,假如选定的测试数据是针对那些位于不可达路径上的语句,那么在测试过程中将并不会真正被测试到,这将对测试数据的生成阶段造成大量的浪费。换言之,不可达路径的信息可以改善静态分析的准确性。可以通过探测静态分支的相关性来确定一部分不可达路径。对于某一条路径上的一个条件分支,如果它的结果可以由此之前的语句或分支确定,则它有静态相关性。实验证明,对于大型程序来说,在编译阶段可以探测到约有9%到40%的条件语句有相关性。因此,有一定数量的不可达路径在程序运行前可以探测到。尽管静态方法可以排除一部分不可达路径,但仍有大量的不可达路径进入了动态测试阶段。早期的动态测试不能主动地直接针对不可达路径采取有效措施,通常在测试后采取限制的方法。较常见的方法是限定搜索次数和深度等,探视性执行失败即认为路径不可达,该方法的局限性很大,很容易造成路径的丢失,通过结合其他一些较好的搜索性算法可以改进该方法,但效果有限。参考文献:[1]M.Weiser.ProgramSlicing.InproceedingofICSE`81ofthe5thinternationalconferenceonSoftwareengineering,439-4491981.[2]HongchangZhang,ShujuanJiang,RongJin.AnImprovedStaticProgramSlicingAlgorithmUsingStackTrace[A].Proceedingsof2011IEEE2ndInternationalConferenceonSoftwareEngineeringandServiceScience(ICSESS2011)[C].2011.
技术实现思路
:技术问题:本专利技术的目的是提出一种基于程序切片的不可达路径检测方法的设计方案,该方法将程序切片的思想应用到对程序中不可达路径的检测中,提出了一种基于程序切片的不可达路径检测方案。该方法从网页中提取的JavaScript脚本语言代码出发,通过将其转换成为LLVM中间表示,然后分别对其进行静态程序切片和动态程序切片,并对切片结果进行综合分析,构建一个程序不可达路径的检测方案,从而提高软件的测试效率。最终目的是开发一种基于程序切片的不可达路径检测方法。技术方案:本专利技术提出了一种基于程序切片的不可达路径检测方法的设计方案,将程序切片的思想应用到对程序中不可达路径的检测中,提出了一种基于程序切片的不可达路径检测方案。该方法从网页中提取的JavaScript脚本语言代码出发,通过将其转换成为LLVM中间表示,然后分别对其进行静态程序切片和动态程序切片,并对切片结果进行综合分析,构建一个程序不可达路径的检测方案。由于静态程序切片对程序的输入不做任何假设,所做的分析本文档来自技高网
...
一种<a href="http://www.xjishu.com/zhuanli/55/CN104572476.html" title="一种基于程序切片的软件安全测试方法原文来自X技术">基于程序切片的软件安全测试方法</a>

【技术保护点】
一种基于程序切片的软件安全测试方法,其特征在于,将程序切片的思想应用到对程序中不可达路径的检测中,提出了一种基于程序切片的不可达路径检测方法,该方法从网页中提取的一种直译式脚本语言JavaScript代码出发,通过将其转换成为底层虚拟机LLVM中间表示,然后分别对其进行静态程序切片和动态程序切片,并对切片结果进行综合分析,构建一个程序不可达路径的检测方法,将静态程序切片与动态程序切片相结合,应用在JavaScript脚本语言代码的安全测试中,以检测程序中的不可达路径,提高软件的测试效率,该测试方法,其包含的步骤为:步骤1)提取网页中的JavaScript脚本语言的代码段,网页的脚本语言主要由两部分组成,只有标签和文本内容的超文本标记语言HTML和嵌套在HTML中为其添加动态功能的JavaScript语句块,本方法只关心其中实现动态功能的JavaScript语句块的部分;步骤2)对JavaScript脚本语言的代码段进行预处理,为了能够方便地对JavaScript脚本语言进行切片,首先需要对JavaScript的源程序代码做一些预处理,包括标记语句,分析程序数据流信息,记录变量的定义和引用属性,确定语句间的支配关系,并对程序进行词法语法分析,从而获知源程序中的相关数据流信息;步骤3)将JavaScript脚本语言代码转换成LLVM中间表示,由于JavaScript脚本语言的动态性,直接对JavaScript进行切片并不方便,在上述预处理过程之后,本方法采用将JavaScript脚本语言的代码转换成等价的LLVM中间表示的方法来对其进行程序切片,并将JavaScript源码与LLVM中间表示的对应关系存入转换库中,然后对转换后的LLVM中间表示分别进行静态程序切片和动态程序切片;步骤4)对LLVM中间表示进行静态程序切片,采用M.Weiser博士的数据流切片算法,即在计算程序切片时使用的静态的数据流和控制流的分析方法,对程序的输入不做任何假设,分析程序所有可能的执行路径,先计算出直接相关变量语句,然后根据控制依赖计算出间接相关变量和间接相关语句,将得到的静态程序切片结果记为S;步骤5)利用符号执行获取程序不同的动态执行路径,程序的动态执行路径由于输入的不同往往是不唯一的,需要获取程序的所有不同的动态执行路径,即各种输入情况下代码段动态程序切片的并集,以便与代码段的静态程序切片做对比分析,从而检测程序中的不可达路径,故采用符号执行的方法来探索出程序的不同执行路径,将针对程序不同执行路径的输入分别记为I1,I2,…,IN,为确定程序的动态程序切片做准备;步骤6)根据步骤5)获得的不同的输入情况I1,I2,…,IN对LLVM中间表示分别进行动态程序切片,首先要根据直接数据依赖计算出所有影响当前动态输入值的语句,然后通过静态控制依赖分析来确定哪些语句会导致动态输入值所在基本块的执行,接着根据执行历史找到当前受动态输入值影响执行的语句,直到工作列表中的动态输入值都执行过后切片计算才结束,将得到的动态程序切片结果分别记为D1,D2,…,DN;步骤7)将步骤6)获取的不同的动态程序切片结果D1,D2,…,DN合并起来,得到整个程序的动态程序切片结果集DU,与步骤5)中获取的程序的静态切片结果S做对比分析,如果一个程序不含有不可达路径,那么当动态程序切片的输入值包含了该程序的全部可能的情况时,其切片结果应该与静态程序切片的结果相吻合,即DU=S,如果动态程序切片的结果集比静态程序切片的结果要少,那么这少出来的部分就是程序的不可达路径,将得到的程序不可达路径结果记为L,即L=S‑DU;步骤8)根据转换库中存放的JavaScript源码与LLVM中间表示的对应关系,将步骤7)中的不可达路径结果L转换回JavaScript源码的形式。...

【技术特征摘要】
1.一种基于程序切片的不可达路径检测方法,其特征在于,将程序切片的思想应用到对程序中不可达路径的检测中,提出了一种基于程序切片的不可达路径检测方法,该方法从网页中提取的一种直译式脚本语言JavaScript代码出发,通过将其转换成为底层虚拟机LLVM中间表示,然后分别对其进行静态程序切片和动态程序切片,并对切片结果进行综合分析,构建一个程序不可达路径的检测方法,将静态程序切片与动态程序切片相结合,应用在JavaScript脚本语言代码的安全测试中,以检测程序中的不可达路径,提高软件的测试效率,该测试方法,其包含的步骤为:步骤1)提取网页中的JavaScript脚本语言的代码段,网页的脚本语言主要由两部分组成,只有标签和文本内容的超文本标记语言HTML和嵌套在HTML中为其添加动态功能的JavaScript语句块,本方法只关心其中实现动态功能的JavaScript语句块的部分;步骤2)对JavaScript脚本语言的代码段进行预处理,为了能够方便地对JavaScript脚本语言进行切片,首先需要对JavaScript的源程序代码做一些预处理,包括标记语句,分析程序数据流信息,记录变量的定义和引用属性,确定语句间的支配关系,并对程序进行词法语法分析,从而获知源程序中的相关数据流信息;步骤3)将JavaScript脚本语言代码转换成LLVM中间表示,由于JavaScript脚本语言的动态性,直接对JavaScript进行切片并不方便,在上述预处理过程之后,本方法采用将JavaScript脚本语言的代码转换成等价的LLVM中间表示的方法来对其进行程序切片,并将JavaScript源码与LLVM中间表示的对应关系存入转换库中,然后对转换后的LLVM中间表示分别进行静态程序切片和动态程序切片;步骤4)对LLVM中间表示进行静态程序切片,采用M.Weiser博士的静态前向数据流切片算...

【专利技术属性】
技术研发人员:张迎周徐曼青马凤娇居友道滕庆亚张卫丰周国强王子元
申请(专利权)人:南京邮电大学
类型:发明
国别省市:江苏;32

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

1