软件安全性检测技术综述

摘 要:该文阐述了网络软件安全检测的重要性,介绍了现有的主要检测方法,包括形式化安全测试、基于模型的安全功能测试、语法测试、基于故障注入的安全测试、基于属性的测试、模糊测试、基于风险的安全性测试、基于故障树的安全性测试以及基于渗透的安全性测试.

关 键 词:安全性检测;功能测试;漏洞测试;安全测试方法

中图分类号:TP393文献标识码:A文章编号:1009-3044(2014)25-5847-05

SurveyofSoftwareSecurityTestTechnology

HOUHai-yan,FUZhi-peng

(CollegeofMedicalTechnologyandEngineering,HenanUniversityofScienceandTechnology,Luoyang471000,China)

Abstract:Theimportanceofsoftwaresecuritytestisdescribedinthispaperandthemainsoftwaresecuritytestmethodisintroducedsuchaodelbasedmethod,Grammar-basedmethod,Syntax-basedmethod,defectsthreattreemodelingmethodandsoon.

Keywords:securitytest;functionaltest;vulnerabilitytest;securitytestmethod

在互联网普及之前,单机应用程序软件安全问题并不突出.但是自从互联网普及后,软件安全问题愈加显加突显,使得软件安全性测试的重要性上升到一个前所未有的高度.同时,随着软件的广泛应用和其规模、复杂度的不断提高,软件安全性问题日益突出.软件安全性测试是保证软件安全和质量、降低软件安全风险的重要手段.

软件安全性测试分为安全功能测试(SecurityFunctionalTesting)和安全漏洞测试(SecurityVulnerabilityTesting)两个方面,如表1所示.

表1安全功能测试和安全漏洞测试

1软件安全测试的主要方法

1.1形式化安全测试

建立软件的数学模型,利用形式化规格说明语言对其进行说明[1],形式规格说明语言主要包括以下几类[2]:

基于模型的Z、VDM和B语言;

基于有限状态语言,如有限状态自动机、SDI;

代数语言,如OBJ;

基于行为的CSP、CCS、PetriNets等语言;

混合语言,如离散和连续数学的规格说明语言;

状态图

形式化安全测试方法分为定理证明和模型检测两类,如表2所示.

表2形式化安全测试方法分类

[定理证明\&模型检测\&将程序转换为逻辑公式,然后使用公理和规则证明程序是否是一个合法的定理\&运用状态迁移系统描述软件行为,运用时序逻辑、计算树逻辑等表示软件执行所必须满足的性质,通过自动搜索迁移系统中不满足公式或逻辑的状态来发现软件漏洞\&]

形式化安全测试的特点是数学基础完备,对系统理解深入.但,开发成本高,维护困难.

1.2基于模型的安全功能测试

基于模型的安全性测试是通过对软件的行为和结构进行建模,生成测试模型,继而由测试模型生成测试用例,当前主要的软件测试模型有马尔科夫模型、有限状态自动机模型、UML模型[3,4]等.

NahidShahmehri等[5]提出一种基于模型的方法,用以检测和跟踪运行中的软件所存在的漏洞,这是一种被动测试技术.开发者可以很容易的确切的知道工具所针对的漏洞类型,并且当新的漏洞被发现时可以通过添加新的方法将工具进行扩展.

检测模型是基于安全目标模型SGMs的,它可以显示产生漏洞的潜在原因,以及各种原因之间的相互关系.SGMs和威胁树模型非常类似,后者是将引发某种威胁的所有因素用树状结构描述,前者则是将引起漏洞的所有可能原因用树状结构描述.

MarkBlackburn等[6]提出一种基于模型的软件安全自动检测方法,该方法提供了一种端对端的模型构造、分析、自动测试用例生成、自动执行测试以及结果分析的综合技术手段,该方法适用于各种环境.该检测方法的基础是对安全函数说明进行建模,利用Oracle和Interbase数据库引擎自动生成模型并进行测试.

1.3语法测试

所谓语法就是定义了软件接受的输入的数据类型和格式.语法测试是根据被测软件的功能接口的语法生成测试输入,检测被测软件对各类输入的响应,通过观察被测软件输入与相应之间的关系做出安全性分析[7].其流程如下:

语法测试适合对组件进行黑盒测试[8],根据组件接口的语法特征,正则表达可以产生正常和非正常输入,进而触发各种安全问题.但是其缺点是测试样例的数量巨大,很难保证测试覆盖全面性.

PatriceGodefroid等[9]研究了输入结构复杂应用程序,利用基于语法的方法对非法输入进行描述,以提高白盒测试的效果,提出了一种新的动态测试用例生成算法.

1.4基于故障注入的安全测试

用户输入、文件系统、环境变量、网络接口等应用程序与环境之间的交互引起的故障均可作为注入的故障.人为主动的将故障引入系统,可以加速系统失效,同时也加速了对安全问题进行排查.具体的方法包括仿真注入、硬件注入、软件注入等.BinbinQu等[10]提出了一种基于客户机-服务器模式的错误注入测试方法,用于软件组件的安全性测试.作者设计了了一种基于APIHooking的错误注入工具,该工具GCDEFI是基于客户机-服务器模式的,由一个服务端和多个客户组成.服务器控制客户机,收集反馈信息并与客户机交互;客户机管理API拦截、错误信息和目标组件信息.客户机注入到测试驱动,处于驱动的地址范围.GCDEFI运行后,控制器从用户得到错误类型信息,该信息被保存在客户机的错误管理模块.控制器触发Activator,将目标组件信息送入目标组件信息管理器.每当API被拦截,调用者的信息将被获取,我们查找堆栈和目标组件列表,看是否有匹配的组件,如果没有就返回,如果有就进入替代代码,进而执行注入的错误.客户机中的替代函数可以与服务器通信.该工具通用性不好,只在特定的环境对特定的组件具有较好的检测效果.

JinfuChen[11]设计了一种典型的COM组件安全性测试工具――CSTS,该工具具有获取并分析COM组件、静态分析组件漏洞、自动生成测试脚本、生成测试驱动、注入环境错误、引导组建运行,记录安全隐患并写入日志、安全评级等功能.测试流程如下:

A.创建测试工程

B.选择测试组件

C.分析接口信息

D.生成测试文件

E.编译测试装置

F.运行测试驱动

G.引导运行过程

H.注入环境错误

I.开始错误注入测试

J.结束并保存

但是该方法的风险评级标准并不明确,有待于进一步细化和明确.

1.5基于属性的测试

基于属性的安全测试方法[12]是将确定的程序编写规则进行编码,将其作为安全属性,以此为依据验证程序代码是否符合规则.

1.6模糊测试

模糊测试是一种基于黑盒的随机性测试,通过随机地变异正常的程序输入进而检测程序响应,以发现软件中存在的漏洞,可用语法规则生成正常输入,也可用试探法指导输入变量的产生.模糊测试的最大问题在于代码覆盖率很低.

PatriceGodefroid等[13]提出了一种白盒模糊测试方法,这种方法受动态测试用例生成方法和象征性执行方法的启发:

A.记录程序在正常状态下的运行情况;

B.标记程序运行轨迹、收集输入的限制条件;

C.将限制条件逐一取消产生新输入,执行不同控制路径;

D.在启发式高代码覆盖率方法 340;辅助下重复上述过程,完成测试过程.

该方法的不足之处在于有限的样本尺寸限制了代码覆盖率.

1.7基于风险的安全性测试

风险即错误发生的可能性以及造成的危害程度.基于风险的安全测试的出发点和依据是软件安全风险,把风险分析与管理、安全测试以及软件开发过程系统化.该方法具有在软件开发的各个阶段可以把有风险的安全漏洞考虑在内,将安全测试与软件开发同步进行的优点[14].

BradArkin、GaryMcGraw等人[15]研究了基于风险的安全测试方法,在软件开发的各个阶段进行异常场景、误用模式、风险分析以及渗透测试等,其实质是将安全测试相关过程集成到软件开发的整个生命周期中.

1.8基于故障树的安全性测试

基于故障树的安全测试技术[16-20]是利用故障分析树和故障树来生成安全性测试用例的方法,故障树(威胁树)[21]实际上是一种将系统故障(威胁)形成原因由上到下柱层细化的过程.

HuangSong[22,23]等选择了CERT/CC的TOP10瑕疵用来建立威胁树以生成测试序列.

1.8.1威胁树

威胁树由威胁节点构成,根节点为待检测瑕疵,将其向下分解,生成子节点(即须要实现父节点的必要步骤),子节点继续向下分解直到无可分解).节点分与节点和或节点两种,如图2所示.

图2节点类型

以SQL注入为例,其威胁树和测试序列生成方法如下:

1.8.2威胁树生成方法

A.选择一种典型瑕疵(待测瑕疵)作为根节点;

B.分析该节点,并将其作为父节点,将其所对应的所有情况作为子节点;标记父节点位与节点或者或节点;

C.分解子节点;

D.重复A-C,直到无可分解.

1.8.3生成测试序列

图3为SQL的注入威胁树,其中SQLinjection为与节点,其五个子节点为与关系,其中第四个节点为或节点,则其子节点为或关系.其测试序列为:a-b-c-e-d和a-b-c-f-d.


目前该方法还是手动进行的,工作量较大,需要设计自动化的方法才有更大的应用价值.

1.9基于渗透的安全性测试

这是一种评估网络安全性和主机系统的模拟攻击过程,安全工程师可以通过这种方式深入探测目标的安全性.渗透测试分两类:被动攻击和主动攻击,被动攻击不直接进入目标系统,而主动攻击则要直接侵入目标系统.渗透测试步骤[24]如下所示:

ShuXiao[25]等设计了一种用于网络协议安全测试的解决方案,建立了一套完整的协议代码健壮性评估环境.该环境的核心测试系统包括多功能测试引擎和PDU(协议数据单元)生成工具两部分.

其中测试引擎工作流程为,首先由预定义资源或者命令行参数来决定内部功能模块的属性,这些内部功能模块包括发送接收模块、反馈模块、测试样本库模块;然后,发送模块从测试样本库获取一个测试样本,发送给指定的后处理单元(TCP/UDP或IP套接字),数据被封装;之后封装的数据传递给虚拟网络接口,由它发送给特定的目的单元.与此同时,发送模块还会通知接收单元接收同步响应消息,并将其放入响应池,然后接收模块调用反馈模块分析返回包,根据其做出相应的修正,来决定下一个测试样本.如此循环,如图3所示.PDU(协议数据单元)生成工具由Perl编写,可以由PDU模版获取规则,由此而生成所有的测试样本.该系统在发现一般软件漏洞以及对于网络协议漏洞引起的问题的异常处理是十分有效的.适用于现代网络产业环境中的自动检测.该系统也支持同步接口错误注入.作为一种非传统测试方法,有助于生产更安全的软件产品.

该方法具有较大的局限性,仅对TCP/IP协议漏洞检测有效,对于其他的协议和网络通讯软件的测试还无能为力.

CsabaNagy[26]等提出的基于输入相关错误的静态安全性分析方法是基于这样一个思想:输入数据是沿着一定的路径传递的,而错误可以出现在任何地方,但是当错误出现在该路径上,它就会成为一个安全漏洞.该方法的步骤如下:

A.找到数据输入点

B.得到程序中的输入点集

C.列出危险(输入相关函数)函数列表

D.自动检测

该方法技术上采用了程序依存图和系统依存图来进行分析,通过输入覆盖指标和输入距离指标来衡量数据距离原始输入的距离以及输入相关函数得到输入的位置,这两个指标可以告诉我们哪些函数是和用户输入相关的.得到这些函数后就可以进行自动错误检测了.

1.10其他分类方法

此外,根据测试对象的不同,软件安全测试还可分为应用程序安全测试、操作系统安全测试、数据库安全测试、IIS服务器安全测试、网络环境安全测试.具体如表3所示:

2总结

软件安全测试的实现有诸多的困难,需要测试工程师拥有高效的工具,丰富的经验、全面的技能,这是一个相互联系的整体.丰富的经验包括对软件安全漏洞,以及各种攻击手段的充分了解;全面的技能包括掌握编程、网络、数据库等知识;在此基础上方能开发出高效的软件安全测试工具.

1;C]//SecureSoftwareIntegrationandReliabilityImprovement,2009.SSIRI2009.ThirdIEEEInternationalConferenceon.IEEE,2009:417-422.[11]ChenJ,LuY,XieX.CSTS:APrototypeToolforTestingCOMComponentSecurity[C]//HybridIntelligentSystems,2009.HIS'09.NinthInternationalConferenceon.IEEE,2009,3:83-88.

[12]FinkG,BishopM.Property-basedtesting:anewapproachtotestingforassurance[J].ACMSIGSOFTSoftwareEngineeringNotes,1997,22(4):74-80.

[13]GodefroidP,LevinMY,MolnarDA.AutomatedWhiteboxFuzzTesting[C]//NDSS.2008,8:151-166.

[14]张泽华,饶若楠,凌君逸.基于风险测试揭错能力分析[J].计算机工程,2004,30(B12):72-73.

[15]BradArkin,ScottStender,GaryMcGraw:SoftwarePerationTesting.IEEESecurity&Privacy,2005,3(1):84-87.

[16]MyersGJ,SandlerC,BadgettT.Theartofsoftwaretesting[M].JohnWiley&Sons,2011.

[17]TsipenyukK,ChessB,McGrawG.Sevenperniciouskingdoms:Ataxonomyofsoftwaresecurityerrors[J].Security&Privacy,IEEE,2005,3(6):81-84.

[18]FireithD.Specifyingreusablesecurityrequirements[J].JournalofObjectTechnology,2004,3(1):61-75.

[19]NancyR,MeadGMG.Aportalforsoftwaresecurity[J].IEEEComputersocietyIEEESecurity&Privacy,2005.

[20]MobergF.Securityanalysisofaninformationsystemusinganattacktree-basedmethodology[J].Master's

[21]C.A.EricsonII,Faulttreeanalysis―ahistory,in:Proceedingsofthe17thInternationalSystemSafetyConference,1999.

[22]SongH,LiangW,ChangyouZ,etal.Asoftwaresecuritytestingmethodbasedontypicaldefects[C]//ComputerApplicationandSystemModeling(ICCA),2010InternationalConferenceon.IEEE,2010,5:V5-150-V5-153.

[23]HuangS,HuiZW,WangL,etal.ACaseStudyofSoftwareSecurityTestBasedOnDefectsThreatTreeModeling[C]//MultimediaInformationNetworkingandSecurity(MINES),2010InternationalConferenceon.IEEE,2010:362-365.

[24]唐秀存,杜德慧.渗透测试技术与模型研究[J].计算机与信息技术,2007(5):33-35.

[25]XiaoS,DengL,LiS,etal.Integratedtcp/ipprotocolsoftwaretestingforvulnerabilitydetection[C]//ComputerNetworksandMobileComputing,2003.ICCNMC2003.2003InternationalConferenceon.IEEE,2003:311-319.

[26]NagyC,MancoridisS.Staticsecurityanalysisbasedoninput-relatedsoftwarefaults[C]//SoftwareMaintenanceandReengineering,2009.CR'09.13thEuropeanConferenceon.IEEE,2009:37-46.

类似论文

食品安全检测技术综述

摘 要目前,我国食品安全存在着巨大的隐患,情况不容乐观,三氯氰胺等恶性食品安全问题时常发生,冲击着消费者。
更新日期:2024-2-27 浏览量:32742 点赞量:7972

文本复制检测技术综述

摘 要:针对文本复制抄袭现象,分析了文本复制检测技术的发展进展,研究了文本复制检测技术的分类,并对各种复制检测技术。
更新日期:2024-7-11 浏览量:92113 点赞量:19995

关于计算机软件安全检测技术的

摘 要:本文从计算机软件安全检测技术的基本内容出发,论述计算机软件安全检测技术应该注意的问题和计算机。
更新日期:2024-10-6 浏览量:19417 点赞量:5725

计算机软件安全检测技术应用

摘 要:现代科技的飞速发展使互联网技术得到更好的运用,各种计算机软件几乎作为人们日常所需&。
更新日期:2024-10-26 浏览量:132130 点赞量:28503

计算机软件安全检测技术

【摘 要】随着计算机软件行业的发展,人们越来越重视计算机软件的安全检测技术的发展,这不仅能够保障软件技术的进。
更新日期:2024-11-9 浏览量:19675 点赞量:5384

刍议计算机软件安全检测技术的应用

摘 要:随着计算机技术和网络技术的快速发展,计算机软件也日趋复杂,软件是计算机重要的核心内容,是保证计算机安全和通。
更新日期:2024-6-25 浏览量:83803 点赞量:18979

软件防篡改技术综述

摘 要:本文对动态以及静态的防篡改进行进行了重点介绍,并对现有防篡改技术予以分类,同时对各种方式的局限性和优劣进行。
更新日期:2024-9-27 浏览量:118510 点赞量:25305