当前位置: 首页 > 编程日记 > 正文

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

近来,在我负责的公司某软件产品的最后測试工作,经常被问到这样一个问题:在做測试过程中,我们的软件产品在安全性方面考虑了多少?应该怎样測评一个软件究竟有多安全?
  这个软件因为涉及客户商业上重要的信息资料,因此用户关心的核心问题始终环绕“这个软件安全吗”。一个因为设计导致的安全漏洞和一个因为实现导致的安全漏洞,对用户的终于影响都是巨大的。我的任务就是确保这个软件在安全性方面能满足客户期望。
  一、什么是软件安全性測试
  (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)採用安全測试技术和工具
  可使用专业的具有特定功能的安全扫描软件来寻找潜在的漏洞,将已经发生的缺陷纳入缺陷库,然后通过自己主动化測试方法来使用自己主动化缺陷库进行轰炸測试。比如,使用一些可以模拟各种攻击的软件来进行測试。
  安全測试是用来验证集成在软件内的保护机制是否可以在实际中保护系统免受非法的侵入。一句通俗的话说:软件系统的安全当然必须可以经受住正面的攻击——可是它也必须可以经受住側面的和背后的攻击

转载于:https://www.cnblogs.com/zfyouxi/p/4057006.html

相关文章:

org.springframework.data.redis 一次连接获取特定key所有k-v(pipeline)

2019独角兽企业重金招聘Python工程师标准>>> 当我们需要一次性获取在redis中以hash方式存储的所有key-value时&#xff0c;我们可以使用下面的方式来获取。 public void testGetMore() throws IOException {RedisCallback<List<Object>> pipelineCallba…

[网络应用]Flash中鼠标手势及Ctrl+T问题{Firefox}

想说这个问题很久了&#xff0c;也是对Flash的一点点小小的不满。 当你在浏览youku&#xff0c;56&#xff0c;Youtube&#xff0c;土豆&#xff0c;Kou6上的视频时&#xff0c;是不是会发现你的CtrlT命令不凑效了。 当你在打开一个Flash全站时&#xff0c;或者鼠标焦点在一个令…

(C++)一行代码递归实现辗转相除法

定理&#xff1a;两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。 int gcd(int a,int b){return !b?a:gcd(b,a%b); } 这里递归边界是 gcd(a,0)a; 递归式是 gcd(a,b)gcd(b,a%b);

【C#】Web页面传值小结-

1. 使用QueryString变量 QueryString是一种非常简单的传值方式&#xff0c;他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时&#xff0c;可以使用这个方法。但是对于传递数组或对象的话&#xff0c;就不能用这个方法了…

分享:用promise封装ajax

用promise封装ajaxvar ajaxOptions {url: url,method: GET,async: true,data: null,dataType: text, } function ajax(protoOptions) {var options {};for(var i in ajaxOptions){options[i] protoOptions[i] || ajaxOptions[i];}return new Promise(function(resolve, reje…

1049 Counting Ones

1. 这一题起初我用递归的方式&#xff0c;还写了一个数整数有多少个1的函数&#xff0c;OneNum[i] OneNum[i-1]countOne(i);毫不意外地出现了段错误&#xff0c;也就是递归调用的次数太多。 2. 看了参考书&#xff0c;得到了思路上的启发&#xff1a; 给定一个数12&#xff…

Oracle:递归查询(树形结构数据)

今天要做一个查询功能&#xff1a;查询某用户所属部门&#xff0c;且包含该部门的所有上级部门信息。偶然找到了一个方法&#xff0c;特意来做个笔记。分享给和我一样的菜鸟&#xff0c;哈哈 查询子节点 1 select * 2 from d_arc_dep 3 start with depid 100000 4 connect b…

FIN_WAIT_2

来自转载&#xff1a;http://blog.sina.com.cn/s/blog_8e5d24890102w9yi.html 上图对排除和定位网络或系统故障时大有帮助&#xff0c;但是怎样牢牢地将这张图刻在脑中呢&#xff1f;那么你就一定要对这张图的每一个状态&#xff0c;及转换的过程有深刻地认识&#xff0c;不能只…

网页制作知识:XHTML 和 DOCTYPE 切换

为 Web页指定 DOCTYPE 会影响浏览器呈现页的方式。Internet Explorer、Mozilla Firefox 和 Opera 全都支持一种名为“DOCTYPE 切换”&#xff08;也叫“DOCTYPE 嗅探”&#xff09;的功能。 引入 DOCTYPE 切换的目的是使浏览器能够正确地呈现符合标准的 Web 站点以及旧式 Web 站…

1003 我要通过!

1. 总体思路是自己先写写&#xff0c;看看哪些字符串符合&#xff0c;找出规律&#xff0c;然后根据测试用例来矫正。 2. 用到了递推的方法&#xff0c;我使用countA[maxn]数组存放截至当前位置一共出现的A的个数。 3. 正确的字符串满足的条件是&#xff1a;P之前A的个数P和T…

微信电视来了 微信遥控传屏弹幕统统有

据证券时报消息&#xff0c;腾讯携手康佳推微信电视&#xff0c;具有微信传屏、微信弹幕、微信遥控等基于腾讯微信平台的电视功能。想了吧&#xff1f;别急&#xff0c;11月5日&#xff0c;微信互联电视将在康佳全国终端门店全部上线。微信电视2.0版将新增语音搜索、节目单分享…

机器学习-线性回归LinearRegression

概述 今天要说一下机器学习中大多数书籍第一个讲的&#xff08;有的可能是KNN&#xff09;模型-线性回归。说起线性回归&#xff0c;首先要介绍一下机器学习中的两个常见的问题&#xff1a;回归任务和分类任务。那什么是回归任务和分类任务呢&#xff1f;简单的来说&#xff0c…

使用Windows的SHFileOperation外壳函数实现文件操作

在Windows的shellapi文件中定义了一个名为SHFileOperation&#xff08;&#xff09;的外壳函数&#xff0c;用它可以实现各种文件操作&#xff0c;如文件的拷贝、删除、移动等&#xff0c;该函数使用起来非常简单&#xff0c;它只有一个指向SHFILEOPSTRUCT结构的参数。使用SHFi…

(C++)寻找1-100以内所有素数,复杂度为O(nsqrt(n))与O(nloglogn)的两种方法

注意&#xff1a;1既不是质数也不是合数&#xff0c;2是质数。 1. 复杂度为O(nsqrt(n)) 原理&#xff1a;先写一个判断整数是否为素数的函数&#xff0c;其复杂度为sqrt(n)&#xff0c;其原理是对于一个数n&#xff0c;如果它有除了1和自身之外的因子&#xff0c;那么这个因子…

这样就算会了PHP么?-10

关于基本的文件读写内容&#xff1a; <?phpecho "readfile function:<br>";readfile("tm.txt");echo "<br>";echo "file function:<br>";$f_arr file("tm.txt");foreach ($f_arr as $cont) {echo $c…

个人项目-小学四则运算 “软件”之初版

本次作业要求来自&#xff1a;https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2166 我的github远程仓库的地址&#xff1a;https://github.com/yanyuluu/yanyuluu/tree/master/ruanjiangc 第一部分&#xff1a;要求 具体要求&#xff1a;任何编程语言都可以&#xf…

如何清晰地思考

如何清晰地思考&#xff08;近一年来业余阅读的关于思维方面的知识结构整理&#xff09; Tags: 思维改变生活save it16 saved tags: thinking mind 思考 一年前一个偶然的机会我遇到了一本书——《影响力》&#xff0c;看完这本书之后对我们如何思维产生了极大的兴趣&…

1015 Reversible Primes

1. 这道题因为一上来看到又是进制的转换又是素数的判断&#xff0c;想到自己十进制转化成Q进制的除基取余掌握得并不好&#xff0c;就很紧张&#xff0c;以为要封装一堆函数&#xff0c;然后我也确实这么做了&#xff0c;经过一堆调试(字符和数字之间转化容易忘记)&#xff0c;…

跨平台表空间传输(摘自eygle《循序渐进Oracle》)

需要注意的是&#xff0c;在Oracle 10g之前&#xff0c;数据文件是不能够跨平台传输使用的&#xff0c;从Oracle 10g开始&#xff0c;Oracle支持跨平台的表空间传输&#xff0c;这极大地增强了数据迁移的便利性。 1. 字节顺序和平台 数据文件所以不能跨平台&#xff0c;主要是…

EditPlus集成Java编译和运行命令组建轻量级Java SE开发工具

http://www.gogogogo.me/development/EditPlus-Java.html转载于:https://www.cnblogs.com/svennee/p/4071712.html

单例测试模式中【饿汉式】与【懒汉式】的区别

package day25.thread;/** /*** author Mr Chen* create 2018-10-09 18:37* 单例测试模式&#xff1a;保证类在内存中只有一个对象*/ public class Dome01 {public static void main(String[] args){Singleton s1 Singleton.s; //成员变量被私有&#xf…

1078 Hashing

关键在于这句&#xff1a;Quadratic probing (with positive increments only) is used to solve the collisions.开始不懂二次探测&#xff0c;因此做不出来。所谓二次探测就是如果num%mSize被占坑了&#xff0c;就看看(num1*1)%mSize有没有被占&#xff0c;还是被占&#xff…

C# 多线程 参数传递

class ThreadDemo { private Thread[] threads; private int thrs 10;//线程数量 private ArrayList stringList; private event EventHandler OnNumberClear;//数据删除完引发的事件 public ThreadDemo(int number) …

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

一、 在res/values 文件下定义一个attrs.xml 文件.代码如下: <?xml version"1.0" encoding"utf-8"?> <resources> <declare-styleable name"MyView"> <attr name"textColor" format"color…

排序学习之---快速排序

一、前言 快速排序是一种交换排序&#xff0c;它由C. A. R. Hoare在1962年提出。 二、算法思想 快速排序的基本思想是&#xff1a;通过一趟排序将要排序的数据分割成独立的两部分&#xff1a;分割点左边都是比它小的数&#xff0c;右边都是比它大的数。 然后再按此方法对这两部…

1059 Prime Factors

1. 第一次测试点三错误&#xff0c;由于1既不是质数也不是合数&#xff0c;因此对于1来说需要有一个特殊判断&#xff0c;输出&#xff1a;11&#xff0c;但是一开始多加了一个等号。 2. 本题需要数学基础好&#xff0c;两个重点&#xff1a; (1)会打印某个范围内的素数表 (…

适用于SQL Server生产环境DBA的七大技巧

摘自&#xff1a;http://database.ctocio.com.cn/452/8976452.shtml1、使用forfiles命令删除陈旧的数据库备份文件 从Windows Server 2003开始forfiles命令就是Windows的一个自带命令行工具&#xff0c;它主要用于对文件的批处理&#xff0c; 利用SQL Server代理作业&#xff0…

关于PCA算法的一点学习总结

本文出处&#xff1a;http://blog.csdn.net/xizhibei PCA&#xff0c;也就是PrincipalComponents Analysis&#xff0c;主成份分析&#xff0c;是个非常优秀的算法&#xff0c;依照书上的说法&#xff1a; 寻找最小均方意义下&#xff0c;最能代表原始数据的投影方法 然后自己…

1096 Consecutive Factors

1. 对于题目描述中 list the smallest sequence of the consecutive factors 正确理解是&#xff1a;如果有多组连续因子&#xff0c;输出开头因子最小的那个序列(一开始理解成输出数目最小的那个序列) 2. 想象一下这种情况&#xff0c;2*3*4*5 120&#xff0c;4*5*6 120&am…

百度DisConf分布式配置框架源码试读(一)HttpClient 长连接

Spring Cloud Config配置中心我在学习Spring Cloud Config配置中心时理解了它体系下的配置中心的强大。实现了配置的远程管理、微服务的配置更新。Spring Cloud Config配置中心体系还是有其不足的地方。虽然它实现了配置和服务的分离。但是做不到实时的更新。需要手动触发POST …