当前位置:首页 > 教育

软件安全 如何做好软件安全测试

在测试过程中,对我们软件产品的安全性考虑了多少?我们应该如何评估一个软件的安全性?

因为这个软件涉及到客户的重要商业信息,所以用户关心的核心问题总是围绕着“这个软件安全吗?”。设计导致的安全漏洞和实现导致的安全漏洞都会对用户产生巨大的影响。任务是确保软件能够满足客户在安全性方面的期望。

什么是软件安全测试

(1)什么是软件安全

软件安全属于软件领域的一个重要子领域。在以前的单机时代,安全问题是操作系统容易感染病毒,单机应用软件的安全问题并不突出。然而,自互联网普及以来,软件安全问题日益突出,使得软件安全测试的重要性上升到前所未有的高度。

软件安全一般分为两个层次,即应用级安全和操作系统级安全。应用级安全,包括对数据或业务功能的访问,在预期的安全情况下,运营商只能访问应用的特定功能和有限数据。操作系统级别的安全性是为了确保只有对系统平台具有访问权限的用户才能访问它,包括登录或远程访问系统。

本文讨论的软件安全主要是应用层的安全,包括两个层次:①应用程序本身的安全。一般来说,应用程序的安全问题主要是由软件漏洞引起的,可能是设计缺陷或编程问题,甚至是开发者预留的后门。(2)应用的数据安全,包括数据存储安全和数据传输安全。

(2)软件安全性测试

一般来说,对于安全性要求较低的软件,其安全性测试可以和单元测试、集成测试、系统测试混合进行。但是,对安全性要求较高的软件,在被销毁之前,必须进行测试,以防止和识别软件的安全问题。

安全测试是指验证应用程序的安全级别和识别潜在安全缺陷的过程。应用级安全测试的主要目的是找出软件程序设计中的隐患,检查应用程序防止非法入侵的能力。根据不同的安全指标,测试策略也不同。注意:安全测试并不证明应用程序最终是安全的,而是用于验证已建立策略的有效性,这些策略是基于威胁分析阶段所做的假设而选择的。例如,在防止未经授权的内部或外部用户访问或破坏时,测试应用软件的操作。

软件安全测试过程

(1)安全测试方法

安全测试有很多测试方法。目前,主要的安全检测方法有:

①静态代码安全测试:主要通过扫描源代码,根据程序中的数据流、控制流、语义等信息,与其特有的软件安全规则库进行匹配,找出代码中潜在的安全漏洞。静态源代码安全测试是一种非常有用的方法,可以在编码阶段找出所有存在潜在安全风险的代码,让开发人员可以在早期解决潜在的安全问题。正因为如此,静态代码测试比测试更适合早期的代码开发。

②动态贯入试验:贯入试验也是一种常见的安全试验方法。就是利用自动化工具或人工方法模拟黑客的输入,测试应用系统的攻击性,找出运行时存在的安全漏洞。这个测试的特点是真实有效。一般发现的问题都是正确的,严重的。但是渗透测试的一个致命缺点是模拟测试数据只能到达有限的测试点,覆盖率很低。

③程序数据扫描。在一个安全性要求高的软件中,数据在运行过程中不能被破坏,否则会导致缓冲区溢出攻击。数据扫描的手段通常是内存测试,可以发现缓冲区溢出等很多其他测试方法很难发现的漏洞。比如在软件运行时扫描内存信息,看有没有导致隐患的信息,当然这需要专门的工具进行验证,很难手动完成。

(2)逆向安全测试过程

大多数软件安全测试都是按照缺陷空之间的逆向设计原则进行的,即提前检查可能存在安全隐患的地方,然后针对这些隐患进行测试。因此,逆向测试过程从缺陷空开始,建立缺陷威胁模型,通过威胁模型找到入侵点,扫描入侵点寻找已知漏洞。好处是我们可以分析软件中已知的缺陷,避免已知的缺陷,但是对于未知的攻击手段和方法却无能为力。

①建立缺陷威胁模型。缺陷威胁模型的建立主要从已知的安全漏洞入手,检查软件中是否存在已知的漏洞。构建威胁模型时,需要确定软件涉及哪些专业领域,然后根据每个专业领域遇到的攻击手段来构建模型。

②搜索扫描入侵点。检查威胁模型中的哪些缺陷可能出现在该软件中,然后将可能的威胁纳入入侵点矩阵进行管理。如果有成熟的漏洞扫描工具,直接使用漏洞扫描工具进行扫描,然后将发现的可疑问题带入入侵点矩阵进行管理。

③入侵矩阵验证测试。入侵矩阵创建后,可以针对入侵矩阵的具体项目设计相应的测试用例,然后进行测试和验证。

(3)前瞻性安全测试流程

为了避免逆向设计原理带来的测试不彻底性,需要一种正向测试方法对软件进行完全测试,使被测软件能够防范未知的攻击手段和方法。

①先在试验箱空上做标记。识别测试空之间的所有变量数据。由于安全测试的高成本,识别外部输入层很重要。例如,在需求分析、概要设计、详细设计和编码阶段,应识别测试空,并建立测试空之间的跟踪矩阵。

②准确定义设计空。重点考察需求中的设计空之间是否有明确的定义,以及需求中涉及的数据是否都标识了其合法的价值范围。这一步最需要注意的是精度这个词,设计空要根据安全原则精确定义。

③识别安全隐患。根据试验空和设计空之间以及它们之间的转换规则,识别出哪些试验空和哪些转换规则可能存在安全隐患。例如,测试空越复杂,即测试之间的划分空越复杂,或者数据组合越多变,就越不安全。还有,转换规则越复杂,出现问题的可能性越大,是安全隐患。

④建立并验证入侵矩阵。安全风险识别后,可以根据识别出的安全风险建立入侵矩阵。列出安全隐患,识别具有安全隐患的可变数据,识别安全隐患的等级。对于那些具有高安全风险的可变数据,必须进行详细的测试用例设计。

(4)正向测试和反向测试的区别

正向测试过程是基于测试空来发现缺陷和漏洞,而反向测试过程是基于已知缺陷空来发现软件中是否会出现相同的缺陷和漏洞,两者各有利弊。反向测试流程的一个主要优点是成本低,只要验证已知可能存在的缺陷即可,缺点是测试不完善,测试空无法完全覆盖,无法发现未知的攻击手段。正向测试流程的优点是测试充分,但是工作量比较大。因此,安全性要求低的软件可以按照逆向测试流程进行测试,安全性要求高的软件应以正向测试流程为主,逆向测试流程为辅。

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

软件安全有很多方面,主要的安全问题是由软件本身的漏洞造成的。以下是一些常见的软件安全缺陷和漏洞。

(1)缓冲区溢出

缓冲区溢出已经成为软件安全的头号公敌,许多实际的安全问题都与它有关。缓冲区溢出通常有两个原因。

①检查设计空之间的转换规则。也就是说,由于缺乏可测量数据的验证,非法数据不会在外部输入层检出并被丢弃。非法数据进入接口层和实现层后,超出了接口层和实现层对应的test 空或design 空之间的范围,造成溢出。

②局部试验空与设计空之间存在不足。合法数据进入时,由于程序实现层对应的test 空或design 空之间的不足,导致程序在处理过程中溢出。

(2)加密弱点

这些加密弱点是不安全的:

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

②加密数据时,密码是用伪随机算法生成的,但生成伪随机数的方法存在缺陷,使得密码容易被破解。

③认证算法存在缺陷。

④客户端和服务器的时钟不同步,给攻击者足够的时间破解密码或修改数据。

⑤加密数据没有签名,攻击者可以篡改数据。因此,在测试加密时,我们必须测试这些可能的加密弱点。

(3)错误处理

通常,错误处理会向用户返回一些信息,返回的错误信息可能被恶意用户用来攻击。通过分析返回的错误信息,恶意用户可以知道下一步该做什么来使攻击成功。如果在错误处理中使用了一些不正确的函数,将会使用错误处理过程。错误处理属于异常空之间的处理问题,异常空之间的处理要尽量简单。这个问题可以用这个原理来设计避免。然而,错误处理经常涉及可用性问题。如果错误处理的提示信息太简单,用户可能会很困惑,不知道下一步该怎么做。因此,在考虑错误处理的安全性时,需要权衡其易用性。

(4)权力过大

如果授予过多的权限,可能会导致只有普通用户权限的恶意用户利用过多的权限进行危害安全的操作。例如,如果对可操作的内容没有限制,用户可以访问规定范围之外的其他资源。在进行安全测试时,需要测试应用程序是否使用了过多的权限,重点分析各种情况下应该有的权限,然后检查实际中是否超出了给定的权限。从本质上来说,权限过大的问题属于设计空之间权限过大的问题,需要在设计过程中对设计空进行控制,避免设计空之间权限过大而导致权限过大的问题。

关于安全检测的建议

很多软件安全测试的经验告诉我们,做好软件安全测试的必要条件是:第一,充分了解软件安全漏洞;第二,评估安全风险;第三,拥有高效的软件安全测试技术和工具。

(1)充分了解软件安全漏洞

评价一个软件系统的安全程度,需要从设计、实现和部署三个环节入手。让我们首先看看通用标准是如何评估软件系统安全性的。第一步是确定软件产品对应的保护配置文件(PP)。工艺程序为一类软件产品定义了一个安全特征模板。比如数据库的PP,防火墙的PP等。然后根据PP提出了具体的安全功能要求,如实现用户身份认证。最后,确定安全对象以及如何满足相应的安全功能要求。因此,一个安全软件的三个环节都不会出错。

(2)安全性试验的评价

安全测试后,软件能否达到预期的安全级别?这是安全测试人员最关心的问题,因此有必要在测试后建立一个安全评估机制。一般从以下两个方面来评价。①安全缺陷数据评估。如果你在软件中发现更多的安全缺陷和漏洞,你可能会留下更多的缺陷。在进行这种评估时,需要建立基线数据作为参考,否则,如果没有评估的基础,就无法得出正确的结论。②脆弱性植入评价。漏洞植入法与可靠性测试中的故障插入测试相同,只是在软件中插入了一些具有安全隐患的问题。采用漏洞植入方法时,首先由不参与安全测试的特定人员在软件中植入一定数量的漏洞,最后在测试后,发现有多少植入的漏洞,从而评估软件的安全测试是否充分。

(3)采用安全检测技术和工具

可以使用具有特定功能的专业安全扫描软件来发现潜在的漏洞,已经发生的缺陷可以包含在缺陷库中,然后通过自动化测试方法使用自动化缺陷库进行轰炸测试。比如用一些可以模拟各种攻击的软件进行测试。

安全测试用于验证软件中集成的保护机制在实践中是否能够保护系统免受非法入侵。正如一句流行的谚语所说,软件系统的安全性当然必须能够抵御正面攻击,但也必须能够抵御侧面和背面攻击。

Testin Cloud送你一波超级福利!

Testin价值5000元的专属测试包(含自动测试120分钟,远程实机调试120分钟,每天免费1次标准兼容性测试,每天免费1次安全性测试);

前51测试产品总监陈济总结了16年测试工作的精髓——“软件测试入门必读”课程。

如何获得利益?

登录或注册您的Testin账户进行企业认证,认证后自动获得福利套餐。请在证明上盖章->:http://www.testin.cn

1.《软件安全 如何做好软件安全测试》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《软件安全 如何做好软件安全测试》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1210528.html

上一篇

微型无油真空泵 无油真空泵如何选型?

下一篇

高以翔女友更新签名说了什么高以翔女朋友bella资料

测试手机性能的软件 这几个软件可以轻松检测你的电脑性能!

  • 测试手机性能的软件 这几个软件可以轻松检测你的电脑性能!
  • 测试手机性能的软件 这几个软件可以轻松检测你的电脑性能!
  • 测试手机性能的软件 这几个软件可以轻松检测你的电脑性能!

http压力测试 Jmeter压力测试(简单的http请求)-实例

  • http压力测试 Jmeter压力测试(简单的http请求)-实例
  • http压力测试 Jmeter压力测试(简单的http请求)-实例
  • http压力测试 Jmeter压力测试(简单的http请求)-实例
App研发经验 app软件开发从一个想法到问世要经历怎样的过程?

App研发经验 app软件开发从一个想法到问世要经历怎样的过程?

在我们很多人眼里,开发app软件是一件很简单的事情,很多企业甚至客户会认为这不仅仅是开发一个app。什么这么难,不就是两串代码吗?或者有外行人总是说,“来吧,让我开发一个类似于XXXX的应用程序,只是跟着开发,不需要你来创建它。”。很多app软...

便签小工具 电脑里没有便签小工具怎么办?办公电脑上怎么添加一款方便记事的桌面便签软件

便签小工具 电脑里没有便签小工具怎么办?办公电脑上怎么添加一款方便记事的桌面便签软件

随着时代的发展,微软操作系统也在不断的改进和发展。事实并非如此。笔记小工具已添加到Win7及更高版本的计算机中。点按电脑左下角的“开始”,然后在弹出的列表中找到“笔记”并点按,即可添加到电脑桌面使用。很方便!但是有些电脑版本比较低,有些电脑因为...

医院安全管理制度 医院安全管理:医院安全隐患报告制度

医院安全管理制度 医院安全管理:医院安全隐患报告制度

为了加强医院安全管理,防止重大事故对医院和患者造成的伤害,不断提高医院的医疗质量和管理水平,增强医务人员的风险防范意识,鼓励全体医院人员参与患者安全管理,不断提高医院管理质量,特制定本制度。 一、目的 1.增强风险防范意识,提高风险防范能力,最...

英雄联盟体验服 英雄联盟测试服更新:新英雄——影流之镰凯隐

  • 英雄联盟体验服 英雄联盟测试服更新:新英雄——影流之镰凯隐
  • 英雄联盟体验服 英雄联盟测试服更新:新英雄——影流之镰凯隐
  • 英雄联盟体验服 英雄联盟测试服更新:新英雄——影流之镰凯隐

中国移动5G测试套餐 具体是什么情况

今天中国移动5G测试统一包曝光,200GB流量/月,1000分钟语音通话/月,100条短信/月,价格好像还没曝光。网友说:白日梦小猪555:语音和短信的意义是什么?华东Zhd:不限流量不慢的话300块一个月就可以了。一辆装备齐全的M416: 1...

央务鹊桥 央务集团发挥品牌优势 打造安全食品放心平台

  • 央务鹊桥 央务集团发挥品牌优势 打造安全食品放心平台
  • 央务鹊桥 央务集团发挥品牌优势 打造安全食品放心平台
  • 央务鹊桥 央务集团发挥品牌优势 打造安全食品放心平台