用您5分钟时间阅读完,但愿能对您有帮助!算法
一.安全性测试数据库
一、安全性测试方法
测试手段能够进行安全性测试,目前主要安全测试方法有:
1)静态的代码安全测试segmentfault
主要经过对源代码进行安全扫描,根据程序中数据流、控制流、语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安全漏洞。安全
静态的源代码安全测试是很是有用的方法,它能够在编码阶段找出全部可能存在安全风险的代码,这样开发人员能够在早期解决潜在的安全问题。而正由于如此,静态代码测试比较适用于早期的代码开发阶段,而不是测试阶段。
2)动态的渗透测试服务器
渗透测试也是经常使用的安全测试方法。是使用自动化工具或者人工的方法模拟黑客的输入,对应用系统进行攻击性测试,从中找出运行时刻所存在的安全漏洞。工具
这种测试的特色就是真实有效,通常找出来的问题都是正确的,也是较为严重的。但渗透测试一个致命的缺点是模拟的测试数据只能到达有限的测试点,覆盖率很低。
3)程序数据扫描测试
一个有高安全性需求的软件,在运行过程当中数据是不能遭到破坏的,不然就会致使缓冲区溢出类型的攻击。数据扫描的手段一般是进行内存测试,内存测试能够发现许多诸如缓冲区溢出之类的漏洞,而这类漏洞使用除此以外的测试手段都难以发现。编码
例如,对软件运行时的内存信息进行扫描,看是否存在一些致使隐患的信息,固然这须要专门的工具来进行验证,手工作是比较困难的。
二、反向安全性测试过程
大部分软件的安全测试都是依据缺陷空间反向设计原则来进行的,即事先检查哪些地方可能存在安全隐患,而后针对这些可能的隐患进行测试。加密
所以,反向测试过程是从缺陷空间出发,创建缺陷威胁模型,经过威胁模型来寻找入侵点,对入侵点进行已知漏洞的扫描测试。好处是能够对已知的缺陷进行分析,避免软件里存在已知类型的缺陷,可是对未知的攻击手段和方法一般会无能为力。
1)创建缺陷威胁模型spa
创建缺陷威胁模型主要是从已知的安全漏洞入手,检查软件中是否存在已知的漏洞。创建威胁模型时,须要先肯定软件牵涉到哪些专业领域,再根据各个专业领域所遇到的攻击手段来进行建模。
2)寻找和扫描入侵点
检查威胁模型里的哪些缺陷可能在本软件中发生,再将可能发生的威胁归入入侵点矩阵进行管理。若是有成熟的漏洞扫描工具,那么直接使用漏洞扫描工具进行扫描,而后将发现的可疑问题归入入侵点矩阵进行管理。
3)入侵矩阵的验证测试
建立好入侵矩阵后,就能够针对入侵矩阵的具体条目设计对应的测试用例,而后进行测试验证。
三、正向安全性测试过程
为了规避反向设计原则所带来的测试不完备性,须要一种正向的测试方法来对软件进行比较完备的测试,使测试过的软件可以预防未知的攻击手段和方法。
1)先标识测试空间
对测试空间的全部的可变数据进行标识,因为进行安全性测试的代价高昂,其中要重点对外部输入层进行标识。
例如,需求分析、概要设计、详细设计、编码这几个阶段都要对测试空间进行标识,并创建测试空间跟踪矩阵。
2)精肯定义设计空间
重点审查需求中对设计空间是否有明肯定义,和需求牵涉到的数据是否都标识出了它的合法取值范围。
在这个步骤中,最须要注意的是精确二字,要严格按照安全性原则来对设计空间作精确的定义。
3)标识安全隐患
根据找出的测试空间和设计空间以及它们之间的转换规则,标识出哪些测试空间和哪些转换规则可能存在安全隐患。
例如,测试空间愈复杂,即测试空间划分越复杂或可变数据组合关系越多也越不安全。还有转换规则愈复杂,则出问题的可能性也愈大,这些都属于安全隐患。
4)创建和验证入侵矩阵
安全隐患标识完成后,就能够根据标识出来的安全隐患创建入侵矩阵。列出潜在安全隐患,标识出存在潜在安全隐患的可变数据,和标识出安全隐患的等级。其中对于那些安全隐患等级高的可变数据,必须进行详尽的测试用例设计。
四、正向和反向测试的区别
正向测试过程是以测试空间为依据寻找缺陷和漏洞.
反向测试过程则是以已知的缺陷空间为依据去寻找软件中是否会发生一样的缺陷和漏洞,二者各有其优缺点。
1)正向测试
过程的优势是测试比较充分,但工做量相对来讲较大。所以,对安全性要求较低的软件,通常按反向测试过程来测试便可,对于安全性要求较高的软件,应以正向测试过程为主,反向测试过程为辅。
2)反向测试
过程主要的一个优势是成本较低,只要验证已知的可能发生的缺陷便可,但缺点是测试不完善,没法将测试空间覆盖完整,没法发现未知的攻击手段。
二.常见的软件安全性缺陷和漏洞
软件的安全有不少方面的内容,主要的安全问题是由软件自己的漏洞形成的,下面介绍常见的软件安全性缺陷和漏洞。
一、缓冲区溢出
缓冲区溢出已成为软件安全的头号公敌,许多实际中的安全问题都与它有关。形成缓冲区溢出问题一般有如下两种缘由。
1)设计空间的转换规则的校验问题
即缺少对可测数据的校验,致使非法数据没有在外部输入层被检查出来并丢弃。非法数据进入接口层和实现层后,因为它超出了接口层和实现层的对应测试空间或设计空间的范围,从而引发溢出。
2)局部测试空间和设计空间不足
当合法数据进入后,因为程序实现层内对应的测试空间或设计空间不足,致使程序处理时出现溢出。
二、加密弱点
这几种加密弱点是不安全的:
1)使用不安全的加密算法。加密算法强度不够,一些加密算法甚至能够用穷举法破解。
2)加密数据时密码是由伪随机算法产生的,而产生伪随机数的方法存在缺陷,使密码很容易被破解。
3)身份验证算法存在缺陷。
4)客户机和服务器时钟未同步,给攻击者足够的时间来破解密码或修改数据。
5)未对加密数据进行签名,致使攻击者能够篡改数据。因此,对于加密进行测试时,必须针对这些可能存在的加密弱点进行测试。
三、错误处理
通常状况下,错误处理都会返回一些信息给用户,返回的出错信息可能会被恶意用户利用来进行攻击,恶意用户可以经过分析返回的错误信息知道下一步要如何作才能使攻击成功。
若是错误处理时调用了一些不应有的功能,那么错误处理的过程将被利用。错误处理属于异常空间内的处理问题,异常空间内的处理要尽可能简单,使用这条原则来设计能够避免这个问题。
但错误处理每每牵涉到易用性方面的问题,若是错误处理的提示信息过于简单,用户可能会一头雾水,不知道下一步该怎么操做。因此,在考虑错误处理的安全性的同时,须要和易用性一块儿进行权衡。
四、权限过大
若是赋予过大的权限,就可能致使只有普通用户权限的恶意用户利用过大的权限作出危害安全的操做。
例如:没有对能操做的内容作出限制,就可能致使用户能够访问超出规定范围的其余资源。进行安全性测试时必须测试应用程序是否使用了过大的权限,重点要分析在各类状况下应该有的权限,而后检查实际中是否超出了给定的权限。权限过大问题本质上属于设计空间过大问题,因此在设计时要控制好设计空间,避免设计空间过大形成权限过大的问题。
获取最新测试相关资料,视频,工具等你来领
百度云获取资料点他👉连接:
提取码: esyd
三.作好安全性测试的建议
许多软件安全测试经验告诉咱们,作好软件安全性测试的必要条件是:
一、充分了解软件安全漏洞
评估一个软件系统的安全程度,须要从设计、实现和部署三个环节同时着手。咱们先看一下Common Criteria是如何评估软件系统安全的。
首先要肯定软件产品对应的Protection Profile(PP)。一个PP定义了一类软件产品的安全特性模板。
例如:数据库的PP、防火墙的PP等。而后,根据PP再提出具体的安全功能需求,如用户的身份认证明现。最后,肯定安全对象以及是如何知足对应的安全功能需求的。所以,一个安全软件的三个环节,哪一个出问题都不行。
二、安全性测试的评估
当作完安全性测试后,软件是否可以达到预期的安全程度呢?这是安全性测试人员最关心的问题,所以须要创建对测试后的安全性评估机制。通常从如下两个方面进行评估。
1)安全性缺陷数据评估
若是发现软件的安全性缺陷和漏洞越多,可能遗留的缺陷也越多。进行这类评估时,必须创建基线数据做为参照,不然评估起来没有依据就没法获得正确的结论。
2)采用漏洞植入法来进行评估
漏洞植入法和可靠性测试里的故障插入测试是同一道理,只不过这里是在软件里插入一些有安全隐患的问题。采用漏洞植入法时,先让不参加安全测试的特定人员在软件中预先植入必定数量的漏洞,最后测试完后看有多少植入的漏洞被发现,以此来评估软件的安全性测试作得是否充分。
3)采用安全测试技术和工具
可以使用专业的具备特定功能的安全扫描软件来寻找潜在的漏洞,将已经发生的缺陷归入缺陷库,而后经过自动化测试方法来使用自动化缺陷库进行轰炸测试。
例如,使用一些可以模拟各类攻击的软件来进行测试。
安全测试是用来验证集成在软件内的保护机制是否可以在实际中保护系统免受非法的侵入。一句通俗的话说:软件系统的安全固然必须可以经受住正面的攻击——可是它也必须可以经受住侧面的和背后的攻击。