从攻击角度测试软件系统,攻击测试工具

作者:hacker 分类:网站入侵 时间:2022-07-13 23:55:20 浏览:160

内容导读:导航目录:1、什么是软件测试啊,知道的帮帮小弟!2、软件的安全性应从哪几个方面去测试?3、何为软件测试?4、软件渗透测试,有了解软件渗透测试的吗(安全测试方面)?可以介绍一些测试***和测试流程吗?什么是软件测试...……

导航目录:

什么是软件测试啊,知道的帮帮小弟!

在G.J.Myers的经典著作《软件测试之艺术》(The Art of Software Testing)中,给出了测试的定义:“程序测试是为了发现错误而执行程序的过程”。这个定义,被业界所认可,经常被引用。除此之外,G.J.Myers还给出了与测试相关的三个重要观点,那就是:

测试是为了证明程序有错,而不是证明程序无错误;

一个好的测试用例是在于它能发现至今未发现的错误;

一个成功的测试是发现了至今未发现的错误的测试。

实际上,这里暗示了“软件测试”在不同侧面上的含义,也就决定了对软件测试不同的定义和不同的理解。根据作者多年的经验和理解,软件测试的不同视野,概括为如下5类:

软件测试的狭义论和广义论——静态和动态的测试

软件测试的辨证论——正向思维和反向思维

软件测试的风险论——测试是评估

软件测试的经济学观点——为盈利而测试

软件测试的标准论——验证和确认

1. 软件测试的狭义论和广义论

G.J.Myers所给出了测试定义——“程序测试是为了发现错误而执行程序的过程”,实际是一个狭义的概念,因为他认为测试是执行程序的过程,也就是传统意义上的测试——在代码完成后,通过运行程序来发现程序代码或软件系统中错误。但是,这种意义上的测试是不能在代码完成之前发现软件系统需求、发现设计上的问题,把需求、发现设计上的问题遗留到后期,这样就会可能造成设计、编程的部分返工。增加软件开发的成本、延长开发的周期等。需求阶段和设计阶段的缺陷产生的放大效应会加大。这非常不利于保证软件质量。这种狭义论是受软件开发瀑布模型影响。

正是为了更早地发现问题,所以将测试延伸到需求评审、设计审查活动中去,也就是将“软件质量保证”的部分活动归为测试活动。实际上,在软件开发实际操作中,常常将软件测试和质量保证——这两种努力(efforts)合并起来。

延伸后的软件测试,被认为是一种软件测试的广义概念。这就引出软件测试的两个概念“静态测试”和“动态测试”,如 测试 *** 的辩证统一 (1)所述,这样就由静态测试和动态测试构成一个全过程的、完整的软件测试,而且静态测试显得更为重要。

2.软件测试的辨证论

G.J.Myers的第2个观点“测试是为了证明程序有错,而不是证明程序无错误”,引出了软件测试的另外一个争论,软件测试究竟是证明所有软件的功能特性是正确的呢?还是其反向思维——对软件系统进行各种试探和攻击,找出软件系统中不正常或不工作的地方呢?从我个人理解,这两个方面都有一定道理,前者(证明所有软件的功能特性是正确的)是从质量保证的角度来思考软件测试,后者(证明程序有错)从软件测试的直接目标和测试效率来思考,两者应该相辅相成。在后者的思想背景下,我们认为,测试不是为了证明所有的功能可以正常工作,恰恰相反,测试就是为了找出那些不能正常工作、不一致性的地方。也就是说,测试的一般工作就是发现缺陷 (detect bug),即在软件开发过程中,分析、设计与编码等工作都是建设性的,而测试是带有“破坏性”的工作。

对于不同的应用领域,两者的比重是不一样的,如国防、航天、银行等软件系统,承受不了任何系统失效,因为一次系统的失效完全有可能导致灾难性的损失,所以强调前者以保证非常高的软件质量。而一般的软件服务应用则不同,强调后者,质量目标设置在“用户可接受水平”,不要国度追求质量,从而可以降低软件开发成本。作者建议,在我们实际操作中,可以分阶段实施不同的测试思想,在早期阶段集中在“证明程序有错”—— 发现Bug,后期集中在验证所有特性是否正常工作——降低风险,见作者的另外一篇讨论:测试执行中非常有效的策略

下面就是这两种观点的基本描述:

验证软件是验证软件是“工作的”,以正向思维,针对软件系统的所有功能点,逐个验证其正确性。其代表人物是软件测试领域的先驱Dr. Bill Hetzel (代表论著《The Complete Guide to Software Testing》)。

证明软件是“不工作的”,以反向思维方式,不断思考开发人员理解的误区、不良的习惯、程序代码的边界、无效数据的输入以及系统的弱点,试图破坏系统、摧毁系统,目标就是发现系统中各种各样的问题。其代表人物就是上面多次提到的G.J.Myers。他强调,一个成功的测试必须是发现Bug Bug的测试,不然就没有价值。

文章来源于Ltesting软件测试时代

软件的安全性应从哪几个方面去测试?

一、用户认证安全的测试:

1、明确区分系统中不同用户权限

2、系统中会不会出现用户冲突

3、系统会不会因用户的权限的改变造成混乱

4、用户登陆密码是否是可见、可复制

5、是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统)

6、用户退出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入系统

二、系统 *** 安全的测试

1、测试采取的防护措施是否正确装配好,有关系统的补丁是否打上

2、模拟非授权攻击,看防护系统是否坚固

3、采用成熟的 *** 漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI 系列和 IPhacker IP )

4、采用各种木马检查工具检查系统木马情况

5、采用各种防外挂工具检查系统各组程序的客外挂漏洞

三、 数据库安全测试:

1、系统数据是否机密(比如对银行系统,这一点就特别重要,一般的网站就没有太高要求)

2、系统数据的完整性(我刚刚结束的企业实名核查服务系统中就曾存在数据的不完整,对于这个系统的功能实现有了障碍)

3、系统数据可管理性

4、系统数据的独立性

5、系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)

何为软件测试?

作者: *** 转载 来源:Ltesting中国软件测试网采编

在G.J.Myers的经典著作《软件测试之艺术》(The Art of Software Testing)中,给出了测试的定义:“程序测试是为了发现错误而执行程序的过程”。这个定义,被业界所认可,经常被引用。除此之外,G.J.Myers还给出了与测试相关的三个重要观点,那就是:

测试是为了证明程序有错,而不是证明程序无错误;

一个好的测试用例是在于它能发现至今未发现的错误;

一个成功的测试是发现了至今未发现的错误的测试。

实际上,这里暗示了“软件测试”在不同侧面上的含义,也就决定了对软件测试不同的定义和不同的理解。根据作者多年的经验和理解,软件测试的不同视野,概括为如下5类:

软件测试的狭义论和广义论——静态和动态的测试

软件测试的辨证论——正向思维和反向思维

软件测试的风险论——测试是评估

软件测试的经济学观点——为盈利而测试

软件测试的标准论——验证和确认

1. 软件测试的狭义论和广义论

G.J.Myers所给出了测试定义——“程序测试是为了发现错误而执行程序的过程”,实际是一个狭义的概念,因为他认为测试是执行程序的过程,也就是传统意义上的测试——在代码完成后,通过运行程序来发现程序代码或软件系统中错误。但是,这种意义上的测试是不能在代码完成之前发现软件系统需求、发现设计上的问题,把需求、发现设计上的问题遗留到后期,这样就会可能造成设计、编程的部分返工。增加软件开发的成本、延长开发的周期等。需求阶段和设计阶段的缺陷产生的放大效应会加大。这非常不利于保证软件质量。这种狭义论是受软件开发瀑布模型影响。

正是为了更早地发现问题,所以将测试延伸到需求评审、设计审查活动中去,也就是将“软件质量保证”的部分活动归为测试活动。实际上,在软件开发实际操作中,常常将软件测试和质量保证——这两种努力(efforts)合并起来。

延伸后的软件测试,被认为是一种软件测试的广义概念。这就引出软件测试的两个概念“静态测试”和“动态测试”,如 测试 *** 的辩证统一 (1)所述,这样就由静态测试和动态测试构成一个全过程的、完整的软件测试,而且静态测试显得更为重要。

2.软件测试的辨证论

G.J.Myers的第2个观点“测试是为了证明程序有错,而不是证明程序无错误”,引出了软件测试的另外一个争论,软件测试究竟是证明所有软件的功能特性是正确的呢?还是其反向思维——对软件系统进行各种试探和攻击,找出软件系统中不正常或不工作的地方呢?从我个人理解,这两个方面都有一定道理,前者(证明所有软件的功能特性是正确的)是从质量保证的角度来思考软件测试,后者(证明程序有错)从软件测试的直接目标和测试效率来思考,两者应该相辅相成。在后者的思想背景下,我们认为,测试不是为了证明所有的功能可以正常工作,恰恰相反,测试就是为了找出那些不能正常工作、不一致性的地方。也就是说,测试的一般工作就是发现缺陷 (detect bug),即在软件开发过程中,分析、设计与编码等工作都是建设性的,而测试是带有“破坏性”的工作。

对于不同的应用领域,两者的比重是不一样的,如国防、航天、银行等软件系统,承受不了任何系统失效,因为一次系统的失效完全有可能导致灾难性的损失,所以强调前者以保证非常高的软件质量。而一般的软件服务应用则不同,强调后者,质量目标设置在“用户可接受水平”,不要国度追求质量,从而可以降低软件开发成本。作者建议,在我们实际操作中,可以分阶段实施不同的测试思想,在早期阶段集中在“证明程序有错”—— 发现Bug,后期集中在验证所有特性是否正常工作——降低风险,见作者的另外一篇讨论:测试执行中非常有效的策略

下面就是这两种观点的基本描述:

验证软件是验证软件是“工作的”,以正向思维,针对软件系统的所有功能点,逐个验证其正确性。其代表人物是软件测试领域的先驱Dr. Bill Hetzel (代表论著《The Complete Guide to Software Testing》)。

证明软件是“不工作的”,以反向思维方式,不断思考开发人员理解的误区、不良的习惯、程序代码的边界、无效数据的输入以及系统的弱点,试图破坏系统、摧毁系统,目标就是发现系统中各种各样的问题。其代表人物就是上面多次提到的G.J.Myers。他强调,一个成功的测试必须是发现Bug Bug的测试,不然就没有价值。

软件渗透测试,有了解软件渗透测试的吗(安全测试方面)?可以介绍一些测试 *** 和测试流程吗?

安全测试、渗透测试、安全渗透测试。。。乍一看到这么多相似的概念,感觉晕晕的。今天主要沉淀一下自己对渗透测试的理解,同时希望对大家也有所帮助。

首先,安全测试是侧重于应用程序所面对对安全威胁而进行的有关验证应用程序的安全服务和识别潜在安全性缺陷的过程。目的并不最终证明应用程序是安全的,而是用于验证存在哪些安全漏洞,来确保应用程序的安全。

渗透测试是以黑客的角度,由企业外部或在企业内部对目标 *** 环境作深入的安全探测,从外部或内部 *** 收集系统的相关信息,探查出逻辑性更强、更深层次的漏洞,预先找出企业脆弱的环节。渗透测试的目的不是为了确认功能,而是确认不再存在不安全的功能。渗透测试最简单直接的解释就是:完全站在攻击者角度对目标系统进行的安全性测试过程。

通过对安全测试和渗透测试概念和目的的理解,安全测试和渗透测试的关系是:安全测试包含部分渗透测试。

那如何来理解渗透呢?最开始看到这个词,我就想渗透什么呢?从哪开始渗透?渗透到哪去?我先介绍下渗透(Fuzz)是怎么来的。Fuzz这个名词来自于Professor Barton Miller。在1986年一个风雨交加的夜晚,他登陆一台自己的主机,不知道怎么回事,信号通过猫传到主机上,雷电一闪,把里面的高位变低位,低位至高 位了,结果到了主机以后改变了。Miller 由此想到了利用“crash、break、destroy”的方式来进行软件测试的技术——Fuzz。这个故事让我想到一个有点恐怖的场景,就是毒药从嘴里一直渗透到胃里、心里。。。最后中毒身亡。

接下来,解决前面的三个疑问。从哪里开始渗透呢?——软件及环境中可能发生变化的部分。从安全角度来看,环境、用户输入以及内部数据和逻辑是此类变化可能暴露出安全问题的主要位置。环境包括文件、应用程序、系统资源和应用程序使用的其他本地或 *** 资源。所有这些都可能成为渗透的入口点。渗透什么呢?——malformed数据。这个数据有可能是一个文件,有可能是一个数据包,有可能是测试表里面的一个项,有可能是临时文件里面的一个东西,总之是malformed这种非正常的数据。渗透到哪里呢?要考虑到应用程序本身执行的流程,考虑case放进去,能够放到多深,逻辑放到多深,就要非常了解应用程序内部结构。渗透测试是一个渐进并且逐步深入的过程。

渗透测试一定是黑盒的吗?很多技术人员对这个问题都存在这个错误的理解。渗透测试不只是要模拟外部黑客的入侵,同时,防止内部人员的有意识(无意识)攻击也是很有必要的。这时,安全测试人员可以被告之包括代码片段来内的有关于系统的一些信息。这时,它就满足灰盒甚至白盒测试。