软件安全性能測试(转载)

近来,在我负责的公司某软件产品的最后測试工作,经常被问到这样一个问题:在做測试过程中,我们的软件产品在安全性方面考虑了多少?应该怎样測评一个软件究竟有多安全?
  这个软件因为涉及客户商业上重要的信息资料,因此用户关心的核心问题始终环绕“这个软件安全吗”。一个因为设计导致的安全漏洞和一个因为实现导致的安全漏洞,对用户的终于影响都是巨大的。我的任务就是确保这个软件在安全性方面能满足客户期望。
  一、什么是软件安全性測试

  (1)什么是软件安全
  软件安全属于软件领域里一个重要的子领域。在曾经的单机时代,安全问题主要是操作系统easy感染病毒,单机应用程序软件安全问题并不突出。可是自从互联网普及后,软件安全问题愈加显加突显,使得软件安全性測试的重要性上升到一个前所未有的高度。
 
 软件安全一般分为两个层次,即应用程序级别的安全性和操作系统级别的安全性。应用程序级别的安全性,包含对数据或业务功能的訪问,在预期的安全性情况
下,操作者仅仅能訪问应用程序的特定功能、有限的数据等。操作系统级别的安全性是确保仅仅有具备系统平台訪问权限的用户才干訪问,包含对系统的登录或远程訪
问。
  本文所讲的软件安全主要是应用程序层的安全,包含两个层面:①是应用程序本身的安全性。一般来说,应用程序的安全问题主要是由软件漏洞导
致的,这些漏洞能够是设计上的缺陷或是编程上的问题,甚至是开发者预留的后门。②是应用程序的数据安全,包含数据存储安全和传输数据安全两个方面。
  (2)软件安全性測试
  一般来说,对安全性要求不高的软件,其安全性測试能够混在单元測试、集成測试、系统測试里一起做。但对安全性有较高需求的软件,则必须做专门的安全性測试,以便在破坏之前预防并识别软件的安全问题。
 
 安全性測试(Security
Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程。应用程序级安全測试的主要目的是查找软件自身程序设计中存在的安全隐患,并
检查应用程序对非法侵入的防范能力,依据安全指标不同測试策略也不同。注意:安全性測试并不终于证明应用程序是安全的,而是用于验证所设立策略的有效性,
这些对策是基于威胁分析阶段所做的如果而选择的。比如,測试应用软件在防止非授权的内部或外部用户的訪问或有益破坏等情况时的运作。
  二、软件安全性測试过程

  (1)安全性測试方法
  有很多的測试手段能够进行安全性測试,眼下主要安全測试方法有:
 
 ①静态的代码安全測试:主要通过对源码进行安全扫描,依据程序中数据流、控制流、语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安
全漏洞。静态的源码安全測试是很实用的方法,它能够在编码阶段找出全部可能存在安全风险的代码,这样开发者能够在早期解决潜在的安全问题。而正由于
如此,静态代码測试比較适用于早期的代码开发阶段,而不是測试阶段。
  ②动态的渗透測试:渗透測试也是经常使用的安全測试方法。是使用自己主动化工具或
者人工的方法模拟黑客的输入,相应用系统进行攻击性測试,从中找出执行时刻所存在的安全漏洞。这样的測试的特点就是真实有效,一般找出来的问题都是正确的,
也是较为严重的。但渗透測试一个致命的缺点是模拟的測试数据仅仅能到达有限的測试点,覆盖率非常低。
  ③程序数据扫描。一个有高安全性需求的软件,
在执行过程中数据是不能遭到破坏的,否则就会导致缓冲区溢出类型的攻击。数据扫描的手段一般是进行内存測试,内存測试能够发现很多诸如缓冲区溢出之类的漏
洞,而这类漏洞使用除此之外的測试手段都难以发现。比如,对软件执行时的内存信息进行扫描,看是否存在一些导致隐患的信息,当然这须要专门的工具来进行验
证,手工做是比較困难的。
  (2)反向安全性測试过程
  大部分软件的安全測试都是根据缺陷空间反向设计原则来进行的,即事先检查哪些
地方可能存在安全隐患,然后针对这些可能的隐患进行測试。因此,反向測试过程是从缺陷空间出发,建立缺陷威胁模型,通过威胁模型来寻找入侵点,对入侵点进
行已知漏洞的扫描測试。优点是能够对已知的缺陷进行分析,避免软件里存在已知类型的缺陷,可是对未知的攻击手段和方法一般会无能为力。
  ①建立缺陷威胁模型。建立缺陷威胁模型主要是从已知的安全漏洞入手,检查软件中是否存在已知的漏洞。建立威胁模型时,须要先确定软件牵涉到哪些专业领域,再依据各个专业领域所遇到的攻击手段来进行建模。
  ②寻找和扫描入侵点。检查威胁模型里的哪些缺陷可能在本软件中发生,再将可能发生的威胁纳入入侵点矩阵进行管理。假设有成熟的漏洞扫描工具,那么直接使用漏洞扫描工具进行扫描,然后将发现的可疑问题纳入入侵点矩阵进行管理。
  ③入侵矩阵的验证測试。创建好入侵矩阵后,就能够针对入侵矩阵的详细条目设计相应的測试用例,然后进行測试验证。
  (3)正向安全性測试过程
  为了规避反向设计原则所带来的測试不完备性,须要一种正向的測试方法来对软件进行比較完备的測试,使測试过的软件可以预防未知的攻击手段和方法。
  ①先标识測试空间。对測试空间的全部的可变数据进行标识,因为进行安全性測试的代价高昂,当中要重点对外部输入层进行标识。比如,需求分析、概要设计、具体设计、编码这几个阶段都要对測试空间进行标识,并建立測试空间跟踪矩阵。
  ②精确定义设计空间。重点审查需求中对设计空间是否有明白定义,和需求牵涉到的数据是否都标识出了它的合法取值范围。在这个步骤中,最须要注意的是精确二字,要严格依照安全性原则来对设计空间做精确的定义。
 
 ③标识安全隐患。依据找出的測试空间和设计空间以及它们之间的转换规则,标识出哪些測试空间和哪些转换规则可能存在安全隐患。比如,測试空间愈复杂,即
測试空间划分越复杂或可变数据组合关系越多也越不安全。还有转换规则愈复杂,则出问题的可能性也愈大,这些都属于安全隐患。
  ④建立和验证入侵矩阵。安全隐患标识完毕后,就能够依据标识出来的安全隐患建立入侵矩阵。列出潜在安全隐患,标识出存在潜在安全隐患的可变数据,和标识出安全隐患的等级。当中对于那些安全隐患等级高的可变数据,必须进行详尽的測试用例设计。
  (4)正向和反向測试的差别
 
 正向測试过程是以測试空间为根据寻找缺陷和漏洞,反向測试过程则是以已知的缺陷空间为根据去寻找软件中是否会发生相同的缺陷和漏洞,两者各有其优缺点。
反向測试过程基本的一个长处是成本较低,仅仅要验证已知的可能发生的缺陷就可以,但缺点是測试不完好,无法将測试空间覆盖完整,无法发现未知的攻击手段。正向
測试过程的长处是測试比較充分,但工作量相对来说较大。因此,对安全性要求较低的软件,一般按反向測试过程来測试就可以,对于安全性要求较高的软件,应以正
向測试过程为主,反向測试过程为辅。
  三、常见的软件安全性缺陷和漏洞

  软件的安全有非常多方面的内容,基本的安全问题是由软件本身的漏洞造成的,以下介绍常见的软件安全性缺陷和漏洞。
  (1)缓冲区溢出
 
 缓冲区溢出已成为软件安全的头号公敌,很多实际中的安全问题都与它有关。造成缓冲区溢出问题通常有下面两种原因。①设计空间的转换规则的校验问题。即缺
乏对可測数据的校验,导致非法数据没有在外部输入层被检查出来并丢弃。非法数据进入接口层和实现层后,因为它超出了接口层和实现层的相应測试空间或设计空
间的范围,从而引起溢出。②局部測试空间和设计空间不足。当合法数据进入后,因为程序实现层内相应的測试空间或设计空间不足,导致程序处理时出现溢出。
  (2)加密弱点
 
 这几种加密弱点是不安全的:①使用不安全的加密算法。加密算法强度不够,一些加密算法甚至能够用穷举法破解。②加密数据时password是由伪随机算法产生的,而
产生伪随机数的方法存在缺陷,使password非常easy被破解。③身份验证算法存在缺陷。④客户机和server时钟未同步,给攻击者足够的时间来破解password或改动数据。⑤未
对加密数据进行签名,导致攻击者能够篡改数据。所以,对于加密进行測试时,必须针对这些可能存在的加密弱点进行測试。
  (3)错误处理
 
 普通情况下,错误处理都会返回一些信息给用户,返回的出错信息可能会被恶意用户利用来进行攻击,恶意用户可以通过分析返回的错误信息知道下一步要怎样做
才干使攻击成功。假设错误处理时调用了一些不该有的功能,那么错误处理的过程将被利用。错误处理属于异常空间内的处理问题,异常空间内的处理要尽量简单,
使用这条原则来设计能够避免这个问题。但错误处理往往牵涉到易用性方面的问题,假设错误处理的提示信息过于简单,用户可能会一头雾水,不知道下一步该怎么
操作。所以,在考虑错误处理的安全性的同一时候,须要和易用性一起进行权衡。
  (4)权限过大
  假设赋予过大的权限,就可能导致仅仅有普通
用户权限的恶意用户利用过大的权限做出危害安全的操作。比如没有对能操作的内容做出限制,就可能导致用户能够訪问超出规定范围的其它资源。进行安全性測试
时必须測试应用程序是否使用了过大的权限,重点要分析在各种情况下应该有的权限,然后检查实际中是否超出了给定的权限。权限过大问题本质上属于设计空间过
大问题,所以在设计时要控制好设计空间,避免设计空间过大造成权限过大的问题。
  四、做好安全性測试的建议

  很多软件安全測试经验告诉我们,做好软件安全性測试的必要条件是:一是充分了解软件安全漏洞,二是评估安全风险,三是拥有高效的软件安全測试技术和工具。
  (1)充分了解软件安全漏洞
 
 评估一个软件系统的安全程度,须要从设计、实现和部署三个环节同一时候着手。我们先看一下Common
Criteria是怎样评估软件系统安全的。首先要确定软件产品相应的Protection
Profile(PP)。一个PP定义了一类软件产品的安全特性模板。比如数据库的PP、防火墙的PP等。然后,依据PP再提出详细的安全功能需求,如用
户的身份认证实现。最后,确定安全对象以及是怎样满足相应的安全功能需求的。因此,一个安全软件的三个环节,哪个出问题都不行。
  (2)安全性測试的评估
  当做完安全性測试后,软件是否可以达到预期的安全程度呢?这是安全性測试人员最关心的问题,因此须要建立对測试后的安全性评估机制。一般从下面两个方面进行评估。①安全性缺陷数据评估。
 
 假设发现软件的安全性缺陷和漏洞越多,可能遗留的缺陷也越多。进行这类评估时,必须建立基线数据作为參照,否则评估起来没有根据就无法得到正确的结论。
②採用漏洞植入法来进行评估。漏洞植入法和可靠性測试里的故障插入測试是同一道理,仅仅只是这里是在软件里插入一些有安全隐患的问题。採用漏洞植入法时,先
让不參加安全測试的特定人员在软件中预先植入一定数量的漏洞,最后測试完后看有多少植入的漏洞被发现,以此来评估软件的安全性測试做得是否充分。
  (3)採用安全測试技术和工具
  可使用专业的具有特定功能的安全扫描软件来寻找潜在的漏洞,将已经发生的缺陷纳入缺陷库,然后通过自己主动化測试方法来使用自己主动化缺陷库进行轰炸測试。比如,使用一些可以模拟各种攻击的软件来进行測试。
  安全測试是用来验证集成在软件内的保护机制是否可以在实际中保护系统免受非法的侵入。一句通俗的话说:软件系统的安全当然必须可以经受住正面的攻击——可是它也必须可以经受住側面的和背后的攻击

时间: 2024-10-12 03:56:14

软件安全性能測试(转载)的相关文章

JNI/NDK开发指南(九)——JNI调用性能測试及优化

转载请注明出处:http://blog.csdn.net/xyang81/article/details/44279725 在前面几章我们学习到了.在Java中声明一个native方法,然后生成本地接口的函数原型声明.再用C/C++实现这些函数,并生成相应平台的动态共享库放到Java程序的类路径下.最后在Java程序中调用声明的native方法就间接的调用到了C/C++编写的函数了.在C/C++中写的程序能够避开JVM的内存开销过大的限制.处理高性能的计算.调用系统服务等功能. 同一时候也学习到

性能測试JMeter趟的坑之JMeter的bug:TPS周期性波动问题

先说下问题: 我在做性能測试时,使用JMeter搞了100个并发,以100TPS的压力压測十分钟,但压力一直出现波动.并且出现波动时JMeter十分卡,例如以下图: 周期性TPS波动 各种猜測: 所以開始找环境的各种原因,起初以为是JMeter的连接被"劫持"了,不然JMeter也不会卡的.所以,花了整整一下午时间.去排除压測机环境.被压測环境(TCP连接数.程序上的问题等等),但一直没找到原因. 后来.换成LR后,压測正常.所以開始怀疑是JMeter自身的问题. 原因找到: 后来想起

PAAS平台的web应用性能測试与分析

引言 为什么我会写这一篇博客,由于近期非常多京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用訪问非常慢,有极少数应用甚至常常出现504超时现象.当然大家首先想到的是jae性能太差,这也是人之常情,往往出现什么错误的时候首先想到是别人的不好.工作中非常多同事也是这样,假设软件系统出现一个bug首先怀疑的肯定不是自己写的代码.今天花时间写这一篇博客主要就是告诉大家如何确定我们部署在PAAS平台(不不过JAE哦)web应用为什么慢?慢在哪儿了?有什么方法能够解决? 原因分析 出现訪问自己

3种浏览器性能測试

1.Javascript性能測试(Google的V8 Javascript引擎) 測试地址:http://v8.googlecode.com/svn/data/benchmarks/v6/run.html 谷歌浏览器版本号32 IE浏览器版本号11 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamt4cWo=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthE

让你提前认识软件开发(42):性能測试

第3部分 软件研发工作总结 性能測试 [文章摘要] 对于通信领域的某些中间模块,其主要功能是对收到的消息进行处理然后发送,在两个模块之间充当了一个"桥梁"的作用.因为消息的条数有多有少,这就对其性能提出了要求. 本文结合作者的实际项目经验,描写叙述了性能測试的整个过程,并对性能測试过程中的一些常见问题进行了简单的介绍. 1. 前言 在完毕项目新需求的编码之后,对代码进行自測以验证功能的正确性是在所难免的.一般说来,花在測试上面的时间要很多其他一些.通过对自己所编敲代码的具体測试,开发者

系统吞吐量、TPS(QPS)、用户并发量、性能測试概念和公式

PS:以下是性能測试的主要概念和计算公式,记录下: 一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联.单个reqeust 对CPU消耗越高,外部系统接口.IO影响速度越慢.系统吞吐能力越低,反之越高. 系统吞吐量几个重要參数:QPS(TPS).并发数.响应时间 QPS(TPS):每秒钟request/事务 数量 并发数: 系统同一时候处理的request/事务数 响应时间:  一般取平均响应时间 (非常多人常常会把并发数和TPS理解混淆

mongodb3.0 性能測试报告 二

mongodb3.0 性能測试报告 一 mongodb3.0 性能測试报告 二 mongodb3.0 性能測试报告 三 測试环境: 服务器:X86 pcserver   共6台 cpu:  单颗8核 内存:64G 磁盘: raid 10 操作系统 :centos 6.5 mongodb:3.0 java驱动:2.13.0 jdk:1.6 网络:千兆以太网 測试场景 : 单台monodb服务,一台同配置server作为压力server,数据量不超过内存大小. 库里背景为1亿条大小为10K的数据.

Android性能測试 一些适用于Android Studio的代码审查和性能測试工具

导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进行软件选用的决策. 眼下,已经有非常多能够监控android app 性能的工具能够供开发者使用.如:基于Eclipse插件体系的MAT,其通过生成.hprof文件对内存泄露情况进行排查:内存检測工具APT:提供CPU利用率实时曲线图,方便对照測试内存泄露问题[图0-1] 图 0-1  通过APT实

微博达人硅谷之歌:Testin云測移动搜索性能測试非常是让人信服

微博达人硅谷之歌:Testin云測移动搜索性能測试非常是让人信服 2014/10/08 · Testin · 开发人员訪谈 2013年11月1日,谷歌运行董事长施密特(Eric Emerson Schmidt) 踏进北京中关村电子卖场,但为何Testin云測CEO王军会全程陪伴并介绍中国安卓市场的状况?难道仅仅是王军的英文流利?那为何Testin云測又要先后拒绝腾讯.百度.阿里的投资? 这是新浪微博用户@硅谷之歌 的疑问,其认证资料为长春某公司的"外贸B2B事业部project师".