安全测试-优秀测试工程师必备的4项安全测试方法!

用您5分钟时间阅读完,希望能对您有帮助!

一.安全性测试

1、安全性测试方法
测试手段可以进行安全性测试,目前主要安全测试方法有:
  
1)静态的代码安全测试

主要通过对源代码进行安全扫描,根据程序中数据流、控制流、语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安全漏洞。

静态的源代码安全测试是非常有用的方法,它可以在编码阶段找出所有可能存在安全风险的代码,这样开发人员可以在早期解决潜在的安全问题。而正因为如此,静态代码测试比较适用于早期的代码开发阶段,而不是测试阶段。
  
2)动态的***测试

***测试也是常用的安全测试方法。是使用自动化工具或者人工的方法模拟***的输入,对应用系统进行***性测试,从中找出运行时刻所存在的安全漏洞。

这种测试的特点就是真实有效,一般找出来的问题都是正确的,也是较为严重的。但***测试一个致命的缺点是模拟的测试数据只能到达有限的测试点,覆盖率很低。
  
3)程序数据扫描

一个有高安全性需求的软件,在运行过程中数据是不能遭到破坏的,否则就会导致缓冲区溢出类型的***。数据扫描的手段通常是进行内存测试,内存测试可以发现许多诸如缓冲区溢出之类的漏洞,而这类漏洞使用除此之外的测试手段都难以发现。

例如,对软件运行时的内存信息进行扫描,看是否存在一些导致隐患的信息,当然这需要专门的工具来进行验证,手工做是比较困难的。
  
2、反向安全性测试过程
  
大部分软件的安全测试都是依据缺陷空间反向设计原则来进行的,即事先检查哪些地方可能存在安全隐患,然后针对这些可能的隐患进行测试。

因此,反向测试过程是从缺陷空间出发,建立缺陷威胁模型,通过威胁模型来寻找***点,对***点进行已知漏洞的扫描测试。好处是可以对已知的缺陷进行分析,避免软件里存在已知类型的缺陷,但是对未知的***手段和方法通常会无能为力。
  
1)建立缺陷威胁模型

建立缺陷威胁模型主要是从已知的安全漏洞入手,检查软件中是否存在已知的漏洞。建立威胁模型时,需要先确定软件牵涉到哪些专业领域,再根据各个专业领域所遇到的***手段来进行建模。
  
2)寻找和扫描***点

检查威胁模型里的哪些缺陷可能在本软件中发生,再将可能发生的威胁纳入***点矩阵进行管理。如果有成熟的漏洞扫描工具,那么直接使用漏洞扫描工具进行扫描,然后将发现的可疑问题纳入***点矩阵进行管理。
 
3)***矩阵的验证测试

创建好***矩阵后,就可以针对***矩阵的具体条目设计对应的测试用例,然后进行测试验证。
  
3、正向安全性测试过程
  
为了规避反向设计原则所带来的测试不完备性,需要一种正向的测试方法来对软件进行比较完备的测试,使测试过的软件能够预防未知的***手段和方法。
  
1)先标识测试空间

对测试空间的所有的可变数据进行标识,由于进行安全性测试的代价高昂,其中要重点对外部输入层进行标识。

例如,需求分析、概要设计、详细设计、编码这几个阶段都要对测试空间进行标识,并建立测试空间跟踪矩阵。
  

2)精确定义设计空间

重点审查需求中对设计空间是否有明确定义,和需求牵涉到的数据是否都标识出了它的合法取值范围。

在这个步骤中,最需要注意的是精确二字,要严格按照安全性原则来对设计空间做精确的定义。
  
3)标识安全隐患
根据找出的测试空间和设计空间以及它们之间的转换规则,标识出哪些测试空间和哪些转换规则可能存在安全隐患。
例如,测试空间愈复杂,即测试空间划分越复杂或可变数据组合关系越多也越不安全。还有转换规则愈复杂,则出问题的可能性也愈大,这些都属于安全隐患。
  
4)建立和验证***矩阵

安全隐患标识完成后,就可以根据标识出来的安全隐患建立***矩阵。列出潜在安全隐患,标识出存在潜在安全隐患的可变数据,和标识出安全隐患的等级。其中对于那些安全隐患等级高的可变数据,必须进行详尽的测试用例设计。
  
4、正向和反向测试的区别
正向测试过程是以测试空间为依据寻找缺陷和漏洞.

反向测试过程则是以已知的缺陷空间为依据去寻找软件中是否会发生同样的缺陷和漏洞,两者各有其优缺点。

1)正向测试
过程的优点是测试比较充分,但工作量相对来说较大。因此,对安全性要求较低的软件,一般按反向测试过程来测试即可,对于安全性要求较高的软件,应以正向测试过程为主,反向测试过程为辅。

2)反向测试
过程主要的一个优点是成本较低,只要验证已知的可能发生的缺陷即可,但缺点是测试不完善,无法将测试空间覆盖完整,无法发现未知的***手段。

二.常见的软件安全性缺陷和漏洞

软件的安全有很多方面的内容,主要的安全问题是由软件本身的漏洞造成的,下面介绍常见的软件安全性缺陷和漏洞。
  
1、缓冲区溢出
  
缓冲区溢出已成为软件安全的头号公敌,许多实际中的安全问题都与它有关。造成缓冲区溢出问题通常有以下两种原因。
1)设计空间的转换规则的校验问题

即缺乏对可测数据的校验,导致非法数据没有在外部输入层被检查出来并丢弃。非法数据进入接口层和实现层后,由于它超出了接口层和实现层的对应测试空间或设计空间的范围,从而引起溢出。

2)局部测试空间和设计空间不足
当合法数据进入后,由于程序实现层内对应的测试空间或设计空间不足,导致程序处理时出现溢出。
  
2、加密弱点
  
这几种加密弱点是不安全的:

1)使用不安全的加密算法。加密算法强度不够,一些加密算法甚至可以用穷举法破解。

2)加密数据时密码是由伪随机算法产生的,而产生伪随机数的方法存在缺陷,使密码很容易被破解。

3)身份验证算法存在缺陷。

4)客户机和服务器时钟未同步,给***者足够的时间来破解密码或修改数据。

5)未对加密数据进行签名,导致***者可以篡改数据。所以,对于加密进行测试时,必须针对这些可能存在的加密弱点进行测试。
  
3、错误处理
  
一般情况下,错误处理都会返回一些信息给用户,返回的出错信息可能会被恶意用户利用来进行***,恶意用户能够通过分析返回的错误信息知道下一步要如何做才能使***成功。

如果错误处理时调用了一些不该有的功能,那么错误处理的过程将被利用。错误处理属于异常空间内的处理问题,异常空间内的处理要尽量简单,使用这条原则来设计可以避免这个问题。

但错误处理往往牵涉到易用性方面的问题,如果错误处理的提示信息过于简单,用户可能会一头雾水,不知道下一步该怎么操作。所以,在考虑错误处理的安全性的同时,需要和易用性一起进行权衡。
  
4、权限过大
  如果赋予过大的权限,就可能导致只有普通用户权限的恶意用户利用过大的权限做出危害安全的操作。

例如:没有对能操作的内容做出限制,就可能导致用户可以访问超出规定范围的其他资源。进行安全性测试时必须测试应用程序是否使用了过大的权限,重点要分析在各种情况下应该有的权限,然后检查实际中是否超出了给定的权限。权限过大问题本质上属于设计空间过大问题,所以在设计时要控制好设计空间,避免设计空间过大造成权限过大的问题。

三.做好安全性测试的建议

许多软件安全测试经验告诉我们,做好软件安全性测试的必要条件是:

  
1、充分了解软件安全漏洞
  评估一个软件系统的安全程度,需要从设计、实现和部署三个环节同时着手。我们先看一下Common Criteria是如何评估软件系统安全的。
首先要确定软件产品对应的Protection Profile(PP)。一个PP定义了一类软件产品的安全特性模板。
例如:数据库的PP、防火墙的PP等。然后,根据PP再提出具体的安全功能需求,如用户的身份认证实现。最后,确定安全对象以及是如何满足对应的安全功能需求的。因此,一个安全软件的三个环节,哪个出问题都不行。
  
2、安全性测试的评估
  当做完安全性测试后,软件是否能够达到预期的安全程度呢?这是安全性测试人员最关心的问题,因此需要建立对测试后的安全性评估机制。一般从以下两个方面进行评估。

1)安全性缺陷数据评估
  如果发现软件的安全性缺陷和漏洞越多,可能遗留的缺陷也越多。进行这类评估时,必须建立基线数据作为参照,否则评估起来没有依据就无法得到正确的结论。

2)采用漏洞植入法来进行评估
漏洞植入法和可靠性测试里的故障插入测试是同一道理,只不过这里是在软件里插入一些有安全隐患的问题。采用漏洞植入法时,先让不参加安全测试的特定人员在软件中预先植入一定数量的漏洞,最后测试完后看有多少植入的漏洞被发现,以此来评估软件的安全性测试做得是否充分。
  
3)采用安全测试技术和工具
  
可使用专业的具有特定功能的安全扫描软件来寻找潜在的漏洞,将已经发生的缺陷纳入缺陷库,然后通过自动化测试方法来使用自动化缺陷库进行轰炸测试。
例如,使用一些能够模拟各种***的软件来进行测试。
  
安全测试是用来验证集成在软件内的保护机制是否能够在实际中保护系统免受非法的侵入。一句通俗的话说:软件系统的安全当然必须能够经受住正面的***——但是它也必须能够经受住侧面的和背后的***。
以上建议仅供参考!【乐搏软件测试】【乐搏学院
如有侵权请联系,立即删除

原文地址:https://blog.51cto.com/13559040/2387512

时间: 2024-12-12 01:30:07

安全测试-优秀测试工程师必备的4项安全测试方法!的相关文章

优秀软件测试工程师必备的8个能力!-(附思维导图)

结合自己以往的工作经验,自己梳理出来一些材料,绝对原创,绝对干货. 优秀的软件测试工程师必备的"8个能力" 作为一名软件工程师,需要的能力并不多,但是要成为一名优秀的软件测试工程师,需要的能力就比较多了,自己整理出来8个方面,每个方面都会分成很多细小的方便并进行举例说明.同样的,文章的思维导图放在文末,需要原图直接找我. 文章一共4500字左右,预计阅读时间9分钟 不废话,上干货! 一.业务分析能力 1.分析整体业务流程 不了解整个公司的业务,根本就没办法进行测试2.分析被测业务数据

优秀软件测试工程师必备的“8个能力”——附思维导图

结合自己以往的工作经验,自己梳理出来一些材料,绝对原创,绝对干货. 优秀的软件测试工程师必备的"8个能力" 作为一名软件工程师,需要的能力并不多,但是要成为一名优秀的软件测试工程师,需要的能力就比较多了,自己整理出来8个方面,每个方面都会分成很多细小的方便并进行举例说明.同样的,文章的思维导图放在文末,需要原图直接找我. 文章一共4500字左右,预计阅读时间9分钟 不废话,上干货! 一.业务分析能力 1.分析整体业务流程 不了解整个公司的业务,根本就没办法进行测试 2.分析被测业务数据

2016年大数据工程师必备的9项技能

Apache Hadoop Hadoop现在已经进入第二个10年发展期了, 但不可否认的是, Hadoop在2014年出现了井喷式发展, 由于Hadoop从测试集群向生产和软件供应商方向不断转移, 其越来越接近于分布式存储和处理机架构, 因此, 这一势头在2015年会更加猛烈.由于大数据平台的强大, Hadoop可能是一个挑剔的怪兽, 它需要熟悉的技术人员细心的照顾和喂养.掌握Hadoop最核心技术 (例如, HDFS, MapReduce, Flume, Oozie, Hive, Pig, H

出色的硬件工程师必备的几项“硬”实力

对于很多硬件工程师而言,每天都在忙活着手头上的工作,但是有时候并不知道自己的水平去到哪里,也不知道怎样提高,这在这个瞬息万变的社会里面,其实有点危险!毕竟我们这些凭手艺吃饭的人不像某些尸位素餐的某猿,是跟不上潮流就会被淘汰的.所以就算我们不能成为最TOP的那个,也力争成为排在前面的那一批人. 但我们工程师怎样成为最TOP呢?该怎么学习呢? 根据我们从小受到的教育中我们知道,这首先要求我们对于知识要理解透彻,越深入越好,对于任何一个知识点,通过基本公式,用数学工具推导到最后来验证高级定律和公式.我

优秀程序员必备的四项能力

前言 一个优秀的程序员需要具备挺多特质的,比如好奇心,学习能力等,但在我看来一个优秀的程序员必须具备四项核心能力,哪四 项,先卖个关子,程序员最喜欢说的话是「Talk is Cheap, show me your code」,那我们先来看一道很常见的面试题 如何快速定位IP对应的省份地址? 我们知道,每个省市都分配了一个 ip 段,如下 [202.102.133.0, 202.102.133.255] 山东东营市 [202.102.135.0, 202.102.136.255] 山东烟台 [20

干货-测试工程师必备武器

如何进行用例设计,如何让设计好的用例覆盖全面,将代码存在的问题在上线前更早发现是每一个测试工程师必备的技能.那么如何达到这些指标呢?如何将用例设计既快又全面呢?今天小编就告诉大家常用设计用例的方法,以及每个方法的适用范围,便于大家更快的选择出最优的方法. 从需求到用例设计 在项目中我们从拿到产品需求到最后的用例设计完成,都要经历哪些事情,包括今天要讲的用例设计方法是在哪个阶段使用,下面的图会告诉你答案. 设计用例方法 1.等价类 定义:把所有可能的输入数据,即程序的输入域划分成若干部分(子集),

【转】测试开发工程师必备软硬能力&高级测试开发工程师需要具备什么能力?

对于测试的基本知识,可以查看软件测试相关书籍 对于在公司成为一位优秀的测试开发工程师,我觉得下面这篇文章涉及到的是我们需要的,稍微进行改动https://blog.csdn.net/sinat_21026543/article/details/79909062 测试流程方面:从最开始的分析需求开始,逐步地跟着项目走完整个测试流程,包括纯手工测试,包含了自动化的测试流程,包含了性能测试的测试流程,直至每一个测试报告的最终形成,理解一个科学,正确,严谨,正规化的测试流程. 测试方法方面:注重理论知识

优秀测试管理工具必备九大功能分析

随着时代的发展,软件规模越来越大,复杂程度越来越高,对测试工作也提出了更高的要求,测试领域也随之涌现出了各种各种的理论.方法和工具.这其中很重要的一个分支便是测试管理工具,它主要解决的是测试过程中团队协作的问题,比如缺陷管理.用例管理.测试任务管理等. 目前市面上比较流行的测试管理工具有QC.Mantis.BugZilla.TestLink.Trac.Redmine. BugFree等.有开源软件,也有商业软件.这些软件的各自侧重点不同:比如Mantis, BugZilla偏重缺陷管理,Test

优秀工程师必备的十大能力!

平庸的人总是相似,优秀的人却各不相同.在这各不相同的特性里,掩藏着怎样的共性?据说这十大能力,是通往优秀工程师之路的必备资质. 大家好!我是黄勇,目前在特赞(Tezign.com)担任 CTO.特赞有一支强悍的技术团队,以及浓厚的工程师文化,同时也培养了一批优秀工程师. 几天前,我在自己的微信朋友圈中连载了十篇关于优秀工程师的文章,得到了很多朋友们的认同,非常感谢各位的关注和支持!今天我把这个系列整理成一篇文章,分享给一路努力拼搏的工程师们,希望对大家有所帮助. 1 预备工作的能力 常言道"一日