第一,转换视角
以一个用户登录功能为例,当输入错误的用户名登陆时,提示信息为“该用户名不存在”;当用户名正确而密码错误时,提示信息变成“密码输入错误。”对于真实的用户来说非常好,能有效缩小纠错的范围。但是安全测试人员会跳出来:“这个提示信息需要改!敏感信息暴露了!”因为提示信息,恶意的系统使用者可以推测出哪些用户名已经存在于系统中,然后利用这些用户名可以再进行密码的暴力破解,缩小破解的范围。所以,这个信息虽然为合法用户提供了便利,也为不怀好意的系统使用者提供了便利。而往往这种便利为恶意的系统使用者带来的好处远大于给合法用户带来的好处。
第二、改变测试中模拟的对象
为了能以不同的视角来观察软件,我们必须改变我们所模拟的对象。这也是一个让我们刻意练习转换视角的有效方法。
我们在做非安全测试的时候通常把自己想象成一个合法用户,然后开始验证系统是否能完成预设的目标。比如对于一个网上商城,我们会验证系统是否能让用户完成商品的浏览与购买,我们也会测试一些异常的行为,比如购买的商品数量不是数字而是一串无意义的字母时,目的是看系统是否能比较优雅的做出回应。我们这么测试的目的往往是为了确保用户误操作以后还能够继续他们的购买,或者说不要给系统造成什么严重的伤害。
如果要做安全测试,我们则必须去模拟系统的另一类使用者-恶意用户。他们的目的是为了寻找系统中可钻的漏洞。比如同样是一个网上商城,恶意用户的目标之一就是要想办法以较少的钱,甚至不付钱就能拿到商品。所以,如果恶意用户进行了“误操作”,他们不会停留在“误操作”,而是通过“误操作”来看系统是否给自己提供更多的线索。
所以,我们转换我们测试时所模拟的对象,把思维从一个合法用户的视角中拉出来,转换成一个恶意用户。这需要一点时间来刻意练习。
第三、使用专用的测试工具
有了思维的转换,我们可以加入新的测试想法。但是,在具体做安全测试的时候我们会发现并不是那么容易去模拟恶意用户的行为。毕竟系统的前端会给我们很多的屏障。而且恶意用户可不总都是从系统前门进去的。这时候,使用一些工具,比如OWASP Zap(https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project)、Burp(https://portswigger.net/burp/)等是非常有帮助的。我们可以在系统界面上执行功能测试的用例,用这些工具来获取http请求,篡改后发送给后台服务器。有了这些实用又比较容易上手的工具,我们就可以执行很多恶意用户的操作场景了。
能做到这三点,起步就基本够用了。
举个例子吧
下面让我们以网上商城的买家在商品评价中上传图片这个功能来讲讲如何实践这“三板斧”。假设我们从项目初期就加入了,那么我们大致有七件事情要做:
识别系统中有价值的数据;
在需求分析阶段加入恶意用户需求;
针对恶意用户需求设计测试用例;
参与启动恶意需求的开发;
在开发环境验收恶意需求的实现;
在测试环境中进行安全测试;
向团队反馈所发现的安全漏洞。
不要担心,这不是7个全新的事情。这只是在每个需要测试人员出现的地方增加了安全的工作而已。
1. 识别系统中有价值的数据
很多人认为执行测试才是测试,而我们的安全测试从这里就开始了。
了解了业务以后,我们需要考虑系统中会有什么有价值的数据。这是为下一步加入恶意用户需求做准备。对于一个网上商城,有价值的数据可以包括产品信息、订单信息、用户信息、支付,等等。
这个环节对我们测试人员来说并没有太多额外的工作,毕竟我们做非安全测试的时候也是需要了解业务。不过要注意了,我们要测试的“图片上传功能”是一个涉及有价值数据的功能。我们需要提高警惕了。
2. 在需求阶段加入恶意用户需求
恶意用户需求是用来记录恶意用户想要在系统中达到的目的。与普通用户需求的区别是,我们不是要去实现它,而是使用它帮来助我们远离对系统使用者“不恰当的信任”。通常我们需要针对每一个合法用户需求来增加一个或多个相对应的恶意用户需求。
举个例子,如果我们这个“图片上传功能”的合法用户需求为:
作为一个买家,我想在对商品进行评价的时候上传图片作为买家秀,以便于参加返现营销活动。
那么对应的恶意用户需求可以是:
作为一个恶意用户,我想破坏买家秀返现活动,以便破坏商城的营销活动。
“破坏买家秀返现活动”是一个大的目标。为了设计用例方便,它可以被细分为一系列小目标。比如:
-让用户无法上传图片
-让页面无法正确显示图片等等
有了恶意用户需求的主干信息,我们就可以开始下一步设计安全测试用例了。
3. 针对“恶意用户需求”设计测试用例
现在我们需要做的是努力把自己限制在“恶意用户”的角度做头脑风暴:“到底有什么方法可以使买家无法上传图片信息呢?”, “让页面无法正确显示买家秀图片又怎么做到?”嗯,也许最直接的办法就是让服务器所在的机房断电、断网之类的。这是些不错的想法,虽然执行难度有点大。没关系,记录下来。除此之外,我们还可以有其他测试用例,比如:
-使存储图片的磁盘空间被占满而无法接受新的图片;
-使处理上传图片的进程繁忙而无法接受新的上传任务;
-上传特别大的图片使用户的客户端需要很长时间才能下载完
-上传伪装成图片的恶意代码,进一步获取服务器权限,删除所有的买家秀图片等等
如果这个时候想到新的测试用例也同样记录下来,比如“我想不购买也上传买家秀图片以获得返现”之类的。
不用太担心这个阶段的测试用例过于“疯狂”或者不够完整,毕竟我们对于系统的实现还不是很了解。我们会在接下来的环节中完善具体的步骤。
4. 参与启动恶意需求的开发(evil story kickoff)
在开发人员开始开发合法用户需求之前,我们需要跟业务分析人员、开发人员一起沟通需求的内容。在敏捷软件开发项目中我们叫它story kickoff,即用户故事启动。当有了对应的恶意用户需求时,我们必然也要把它也加到启动的范围里。目的是把我们头脑风暴出来的测试用例跟所有的角色来沟通。预防胜于检测。
5. 在开发环境验收恶意需求的实现
100%预防软件的缺陷与漏洞是不太可能的,所以这个环节的存在是为了提早反馈。
我曾经经历过一个项目,都快上线了才决定做安全测试,结果测出来的问题之一是用户会话(user session)不能正确过期的问题,经过一番研究,发现需要对系统设计的架构进行比较大的修改,只能做个临时的修复让系统先上线,然后再把系统的架构给改了,重写这部分功能,重新测试。代价非常高。所以不管是安全测试还是非安全测试,”在开发环境验收恶意需求的实现“这个步骤都不能缺少。
而这个环节存在的第二个目的是让我们可以从开发人员那里得到支持-具体实施的细节,帮助我们完善具体的测试用例。比如在这个时间点我们若从开发人员那里得知系统的后台没有对图片上传者做身份验证,我们就可以至少增加一个测试的用例:“恶意用户以其他用户的身份上传一个风马牛不相及的图片”。有时候错误的图片比没有图片更具有杀伤力。
6. 在测试环境中进行安全测试
终于到了运行测试的阶段。可能这个时候我们之前想到的测试用例已经被开发人员给解决。如果是这样那就太好了。但是,事实并非有这么美好。第一,可能这些用例只是在开发环境上成功通过了,但是在理想的测试环境里,也就是类产品环境里,这些用例可能并不能完全通过;第二,肯定还有其他需要探索的地方。这时我们就可以用OWASP Zap、Burp这样的工具来辅助我们把之前的安全测试用例执行一次,同时还可以对系统的安全性做一下探索测试。
7. 向团队反馈所发现的安全漏洞
都测得差不多的时候,我们就可以向团队以及相关干系人汇报安全测试的结果了。跟非安全测试不同的地方是,当我们反馈安全漏洞的时候,要考虑是否不同漏洞结合起来会增加系统的安全风险。举个例子:如果有两个安全漏洞,一个是系统没有很强的用户账户密码规则,另一个是系统没有对上传图片的大小做限制,那么恶意用户把这两个漏洞一结合起来,事情就比原来风险大很多。那么我们就必须建议提高这两个漏洞中任意一个的优先级。
原文地址:
http://www.infoq.com/cn/articles/to-test-colleagues-let-us-do-a-safety-test?utm_source=articles_about_Security&utm_medium=link&utm_campaign=Security
相关推荐
【可靠性系统工程三部曲】是指在新能源检测技术、材料化学、元器件和汽车电子等领域中,通过系统性地管理产品的可靠性、维修性、测试性、保障性、环境适应性和安全性来提升产品质量的过程。这一理念源于航空工业,...
本教程“C#入门经典教程三部曲”旨在为初学者提供一个全面且深入的学习路径,从基础到高级,帮助你掌握C#的核心概念和技术。 第一部曲:“C#完全手册”作为入门经典,主要涵盖了以下几个关键知识点: 1. **C#语法...
综上所述,漏洞攻防的三个阶段——机器辅助、自动化和智能化,不仅仅是技术上的演进,更是安全攻防理念和策略的根本变革。随着机器学习和人工智能技术的加入,未来的漏洞攻防将更加智能化、自动化,同时也为安全研究...
电子政务在不断发展,为了保障设备的安全性和可靠性,各种硬件设施的测试标准日益严格。"电源线与插头连接部弯曲强度检测装置"是确保电子政务系统中电气设备安全运行的关键工具之一。这篇文档主要涵盖了这一检测装置...
检查安全漏洞 在Rinkby测试网络上部署智能合约 项目状况 第一阶段(完成) 当前,智能合约的第1版是在Javascript VM中的remix IDE上以及与Ganache一起编写和测试的。 还基本完成了带有web3.js注入的基本html前端。...
"trilogy-meter:log三部曲仪"是一个基于JavaScript的小型项目,它的主要目标是反驳某种误解或挑战一个特定的形象。在IT行业中,"三部曲"通常指的是一个概念、技术或过程的三个关键组成部分。在这个项目中,"log"可能...
这份文档是针对三年级学生的道德与法治课程的期末测试卷,主要涵盖了个人自我认知、家庭关系、学校生活、安全知识、中国传统节日以及基本社会常识等多个方面。以下是对这些内容的详细解读: 1. 填空题: - 这部分...
在实际应用中,开发者应首先在本地环境搭建相应的开发环境,然后解压源码,进行安装和配置,包括数据库连接、设置管理员账号(如果默认ID和密码不安全)、调整配置文件以适应实际服务器环境,最后测试所有功能确保...
朱兰提出质量三部曲,包括质量计划、质量控制和质量改进;休哈特的统计质量控制引入了统计方法;田口玄一主张预防为主的质量哲学;石川馨是QCC(质量管理小组)之父;费根堡姆创立了全面质量管理(TQC);克劳士比...
7. **保持良好的通风环境**:确保测试仪前后部或底部的通风散热槽畅通无阻,以维持设备正常运作。 8. **防潮措施**:避免测试仪暴露于雨水中,以防电气短路。 9. **妥善保管与维护**:不使用时应及时放入专用包装箱...
测试管理与QualityCenter培训手册 1、测试流程管理、测试度量方法 按照尽早进行测试的原则,测试人员应该在需求阶段就介入,并贯穿软件开发的全过程。就测试过程本身而言,应该包含以s下几个阶段。 -测试需求的...
最后,当您完成所有配置并开始测试连接时,务必注意测试数据库的连接字符串、用户权限等信息是否正确,以保证应用能够正常运行。在过程中,如果遇到问题,可以查阅相关文档或社区,比如Stack Overflow、官方PHP论坛...
4. 文学常识:如作者、作品等,比如《白鹭》的作者和茅盾的“农村三部曲”。 5. 阅读理解:包含对文本内容的理解和分析,如《见字如面》节目的受众情况、书信的文化价值和阅读的力量。 从这部分内容可以看出,八...
《钢筋工 三部》是一部深入探讨钢筋工专业知识和技术实践的文档合集,它涵盖了钢筋工程的各个环节,包括设计、施工、质量控制等关键内容。本文将基于这个压缩包中的核心文档《钢筋工 三部.doc》进行详细的解读,旨在...
这篇内容是针对四年级语文上册第三单元的字词专项测试卷,主要涉及汉字的读音、词语书写、错别字纠正、查字典、近反义词、成语运用、组词填空、词语搭配等多个方面的语文基础知识。测试旨在帮助学生巩固和提升对汉字...
4. 文学常识:第5题涉及到对文学作品和作者的了解,如巴金的作品《激流三部曲》、《爱情三部曲》和《抗战三部曲》,以及对纪传体和“三曹”、“三苏”的认识,这些都是文学历史的基本知识。 试卷还包含了现代文阅读...
3. 文学作品知识:提到高尔基的自传体三部曲,即《童年》、《在人间》和《我的大学》,这是对世界文学名著的了解。 4. 字词读音与释义:考察汉字的拼音和词义,如“燕赵之士”的“燕”读作“yān”,“恶”在此处读...
4. 《童年》是苏联作家高尔基的自传体小说,三部曲包括《童年》、《在人间》、《我的大学》。阿廖沙能够在艰苦环境中成长,是因为他有外祖母的关爱和引导,以及对生活的积极态度和对知识的渴望,这些都帮助他保持了...