您好, 访客   登录/注册

基于模糊测试的软件安全漏洞发掘技术研究

来源:用户上传      作者: 孙翰韬

  摘 要 随着全球信息化的发展,计算机技术已被应用到我国的各个领域。网络软件的应用提高了我国经济的发展,方便了人们的生活和工作。但是软件安全漏洞问题也广泛的受到了人们的关注。软件安全漏洞的发掘对用户的数据安全起到非常重要的作用。本文笔者通过分析模糊测试和软件安全漏洞来研究基于模糊测试的软件安全漏洞发掘技术。
  【关键词】模糊测试 软件安全漏洞 发掘技术 研究
  随着二十一世纪的到来,互联网得到人们的广泛应用。网络技术改变了人们的生活和工作,提高了人们的生活质量和工作水平。但是,大量的网络病毒和恶意程序严重威胁着计算机用户的数据安全,使程序出现了安全漏洞。因此,软件安全漏洞的发掘具有非常重要的意义。目前,软件安全漏洞发掘主要应用的是模糊测试技术。模糊测试的应用提高了软件安全漏洞的发掘效率,维护了网络软件的安全。
  1 模糊测试的概述
  1.1 模糊器的类型
  模糊器根据被测的目标程序可以分为本地模糊器、远程模糊器、模糊器框架三种类型。
  1.1.1 在setuid应用程序中,普通用户可以临时查看文件
  因此,当有安全漏洞存在于setuid应用程序中时,用户会永久的拥有权限。针对被测的setuid应用程序,模糊器能够进行畸形参数和变量的传递。
  1.1.2 远程模糊器主要被用来测试基于网络的应用程序,可以分为网络协议模糊器和Web应用程序模糊器
  由于各种服务器软件属于基于网络的应用程序,因此,基于网络的应用程序已经成为了测试对象的最主要的部分。如果基于网络的应用程序出现了安全漏洞,那么攻击者就可以拥有得进入服务器的权限,获得服务器中的重要信息。
  1.1.3 模糊测试框架主要被用于不同类型的应用程序
  模糊测试框架由库、例程、开发脚步语言组成,具有可重用性和分工协作的优点。但是,模糊测试框架也具有一定的局限性和复杂性,并且需要大量的时间来进行开发。
  1.2 模糊测试的方法
  模糊测试方法主要包括预生产测试用例、随机方法、人工协议变异测试、自动化变异、自动协议生产测试五种方法。预生产测试用例主要被应用于检测系统的规范性。虽然相同的协议可以使用同一测试用例,但是测试用例具有一定的有限性。随机方法虽然能够很快的发现软件存在着安全漏洞,但是这种方法不能够追踪到测试数据的源头。因此,随机方法并不能高效的进行工作。人工协议变异测试法比较的简便。测试者本身可以通过不合法的数据使服务器出现异常现象,提高了人工协议变异测试法的效率。自动化变异法是通过自动化来生产和发送测试数据。这需要大量的样本来覆盖数据包。自动协议生产测试是自动化变异法的升级版。这种方法需要通过语法模板来识别数据包中的静态和动态部分,提高了效率。但是这种方法中的语法模板会浪费大量的时间。
  1.3 模糊测试的流程
  1.3.1 模糊测试需要确定测试对象和输入向量
  模糊测试只有选择了测试对象,才能选择模糊测试的方法和类型。应用程序在接受用户的输入数据时并没有进行及时的处理,这使得软件出现了安全漏洞。因此,模糊测试必选确认输入向量,而任何应用程序接受的数据都可以被称作是输入向量。
  1.3.2 通过测试对象的数据的格式
  模糊测试通过自动化的方式或者变异数据样本来生产数据。
  1.3.3 执行模糊测试数据是和生产模糊测试数据同时进行的
  执行模糊测试数据是通过自动化的方式来实现对于测试对象的启动以及将生产的模糊测试数据发送到测试对象。第四,监测异常能够追踪到引发安全漏洞的测试数据的源头。另外,监测异常的过程是可以单独进行。第五,专业人员通过手工来确定bug的可利用性。因此,专业人员必须具有一定的专业知识和相关经验。
  1.4 模糊测试的基本要求
  模糊测试必须具有一定的可重现性。模糊测试的可重现性能够发现测试数据的源头。这样能够尽快的找到测试对象出现异常的原因。在实际的操作中,测试文档记录能够实现模糊测试的可重现性。
  模糊测试通过模块化的方式使其能够被重复应用到相同的模块。这样可以为模块测试节省大量的时间,提高了模糊测试的效率
  模糊测试通过代码覆盖能够使测试对象达到所以代码的数量。目前,由于代码覆盖具有一定的难度,因此模糊测试工具并不具备代码覆盖的要求。
  模糊测试不仅要对测试对象进行生产和发送数据,还要对测试对象出现的异常情况进行监测。模糊测试通过通信的方式可以判定目标程序的工作状态。另外,模糊测试可以通过分析系统的文件等方法来进行目标程序的工作状态的判定。
  2 软件安全漏洞发掘技术的概述
  2.1 软件安全漏洞的内涵
  软件安全漏洞主要指自动化系统的安全和管理中存在着一定的缺陷。这些缺陷能够直接或间接的影响到系统中的硬件、软件、组织等的正常活动。由于软件开发的复杂性,因此软件开发的各个阶段都会存在一定的缺陷,这些缺陷直接导致了软件安全漏洞的产生。攻击者通过这些缺陷能够得到系统的权限,从而直接破坏系统的数据。
  2.2 产生软件安全漏洞的原因
  由于受到设计人员的专业技能和经验的限制,应用程序在设计的过程中可能会出现一些错误。另外,设计人员无法排除程序在运行过程中所出现的任何情况。因此,这些问题直接导致了软件安全漏洞的产生。
  设计人员在设计的过程中只考虑到程序正常运行的情况,而忽视了程序可能出现的运行失误的问题。因此,当问题出现在设计人员假设的正常运行中时,应用程序就会出现安全漏洞。
  目前,各种软件都在不断的更新,同种软件出现了大量不同的版本。而在同种软件的不同版本中也可能会出现安全漏洞的问题。另外,如果配置环境不同,那么同一个软件也会出现不同的安全漏洞。   软件在被使用之后,设计人员会从系统中会发现安全的漏洞的存在。这时设计人员就会通过更新软件来进行修补,但是软件在更新的同时也会引入新的漏洞。因此,安全漏洞会通过新的形式来代替旧的形式,并且一直存在于软件当中。
  2.3 软件安全漏洞的分类
  软件安全漏洞主要分为缓冲区溢出、格式化字符串、整数溢出漏洞、逻辑漏洞四种。软件安全漏洞中的绝大部分都是由缓冲区溢出引起的。程序在读入数据时没有对空间进行检查,导致缓冲区的空间无法满足输入数据的长度。因此软件就会出现缓冲区溢出的现象。格式化字符串主要是由于软件不能够对输入数据进行有效的验证,使得软件出现了安全漏洞。整数溢出漏洞主要分为存储溢出、计算溢出和符号问题三种情况。整数溢出主要是由于系统的运算结果超出了整数的范围造成的。逻辑漏洞主要是由于设计人员在设计的过程中出现了失误导致程序出现了漏洞。逻辑漏洞只能通过检测相关的函数来发现。
  2.4 软件安全漏洞发掘的方法
  2.4.1 静态分析法
  静态分析法通过静态分析程序来实现对于应用程序的信息和特性的获取。静态分析法主要包含有数据流分析法、补丁比较分析法、模式匹配分析法等。静态分析法的效率比较高,只需要通过很短的时间就可以完成对于软件的分析。这也成为了开发和测试人员分析软件的常用的方法。静态分析法可以使测试人员通过自动化来实现对于程序的代码的检查,并且可以同时对程序的多个数据包进行分析检查,提高了测试者的效率。因此大型项目的检查适合用静态分析法。
  2.4.2 动态分析法
  动态分析法是指通过观察测试对象的运行过程来找出程序所存在的安全漏洞。动态分析法一方面通过设置断点来跟踪测试对象中的代码流,另一方面通过数据流来分析程序中的错误数据。首先,动态分析具有一定的准确性。在程序运行的过程中,动态分析法来实现对于程序的分析。这种分析法能够检测出程序的真实存在的安全漏洞。其次,动态分析法具有较强的针对性。动态分析法通过模拟的输入数据来对程序的运行状态进行有效的分析,这样能够更加的准确的检测到程序的异常情况。
  3 基于模糊测试的软件安全漏洞发掘技术的研究
  3.1 不安全函数定位技术
  3.1.1 不安全函数的含义
  不安全函数是指开发人员在不当调用函数时缺乏对于函数的参数的检查,出现了具有缓冲区溢出漏洞的现象的函数。另外,开发人员会在设计的过程中大量的使用这些函数,因此,不安全函数造成了缓冲区溢出现象的出现。不安全函数的形式主要包含了两种。一种是采用普通函数调用的形式。另一种是采用函数固有形式。
  3.1.2 不安全函数的识别
  不安全函数的识别主要是通过反汇编测试对象的代码来进行的。反汇编是将测试对象的代码转换成汇编代码,能够直接了解到测试对象的代码。反汇编可以独立的完成对于测试对象的代码的转换,因此,反汇编不具有一定的依赖性。
  3.2 动态追踪技术
  安全漏洞的原因主要包含了程序外部和内部两个方面。一方面程序通过接收用户输入的数据而使程序出现了安全漏洞。另一方面开发人员对于软件内部的不安全函数的调用使程序出现了安全漏洞。因而,基于输入和函数调用的动态追踪技术提高了软件安全漏洞发掘技术的效率和针对性。
  3.2.1 输入数据截获
  动态追踪技术的首要任务是对输入数据的截获。测试人员首先应找到程序存储输入数据的位置。其次,测试人员应当对输入数据的输入点进行实时的监控,这样能够对于输入数据的使用情况进行有效的跟踪。最后,测试人员可以通过动态调式工具来监控程序中接受输入数据的函数。这样能够及时的中断输入数据的存放并且确定输入点。
  3.2.2 监控处理输入数据的函数
  动态追踪技术截获了输入数据之后,必须及时的处理输入数据。在测试对象的不安全函数调用外部输入数据时,漏洞就会在此时产生。测试对象的函数通过计算和转换外部的输入数据来检查程序的内存。如果测试人员通过测试不安全函数来进行发掘漏洞,那么则会忽视安全代码的存在。因此,测试人员将输入数据可能访问的函数作为发掘安全漏洞的测试对象。
  3.3 模糊数据生产技术
  3.3.1 基于漏洞类型的模糊数据生成
  模糊测试中最主要的部分是模糊数据的生成。模糊数据的生产决定了模糊测试的可行性和效率。在测试的过程中,测试人员必须选择可能引发漏洞的模糊数据来进行测试。这样能够有效的减少模糊测试所用的时间和空间。当模糊测试的程序比较大时,如果模糊测试的用例数量多则会消耗大量的时间,可能会使模糊测试无法再规定的时间内完成。因此,选择可能引发漏洞的模糊数据进行测试能够有效的提高模糊测试的效率。
  3.3.2 基于代码覆盖的测试数据生成
  代码覆盖主要是用来度量测试对象的测试程度。代码覆盖是将附加的代码插入到代码的源头来实现对于代码的覆盖。在模糊测试中,如果软件中的代码没有被覆盖,那么软件的代码中的安全漏洞就不能被发掘。因此,传统的黑盒测试存在着很大的漏洞,具有一定的局限性。针对这些问题,测试人员可以通过软件的代码的字符和静态整数来生成测试用例,保存测试数据,提高代码覆盖的效率,加强对于软件的代码中的漏洞的发掘。
  4 结语
  综上所述,随着网络的发展,网络程序的安全问题受到了人们的广泛关注。软件安全漏洞使得用户的数据信息的安全受到了严重的威胁。目前,基于模糊测试的软件安全漏洞发掘技术具有着非常重要的作用。笔者在本文中分析了模糊测试的类型、方法、流程和基本要求以及软件安全漏洞的内涵、原因、原理和软件安全漏洞发掘技术的方法,通过不安全函数定位技术、动态追踪技术和模糊数据生成技术来研究基于模糊测试的软件安全漏洞发掘技术,提高了软件安全漏洞发掘的效率。
  参考文献
  [1]都娟.基于模糊测试方法的Web应用安全性测试技术的研究及其工具实现[D].华东师范大学,2011.
  [2]苑立娟,张育玉.基于模糊测试的软件安全性测试框架的研究与设计[J].煤炭技术,2010(08).
  [3]刘金刚.模糊测试下软件安全漏洞发掘技术分析[J].网友世界,2013(04).
  [4]黄奕.基于模糊测试的软件安全漏洞发掘技术研究[D].中国科学技术大学,2010.
  [5]王晓飞.软件安全漏洞发掘技术研究[D].国防科学技术大学,2006.
  [6]管铭.基于程序分析的软件安全漏洞检测技术研究[D].西北工业大学,2007.
  作者单位
  天津大学软件工程 天津市 300380
转载注明来源:https://www.xzbu.com/1/view-7461293.htm