关于安全性测试,我们需要知道的一些事
1、安全性测试的最佳时机:
很多企业只有在产品成型或者即将部署上线后才开始做安全性测试,这是一种成本高且低效的做法,最佳实践应该是在整个产品安全开发生命周期(SDLC)的不同阶段实施相应的安全措施。企业应当在SDLC中让安全成为产品设计和开发的一部分。
2、越早越频繁就越好:
安全性缺陷和普通的bug并没有区别,越早发现修复成本就越低。要做到这一步,最关键的就是对开发以及QA人员进行安全培训,告诉他们安全缺陷能够造成什么样的影响,以及如何检测和修复这些缺陷。虽然新兴的第三方库、工具以及编程语言能够帮助开发人员写出更加安全的程序,但是他们最好能够意识到新产生的安全漏洞是否对正在开发的产品有影响。另外,安全培训也能够让开发人员站在攻击者的角度去对产品进行内部测试。
3、明确产品的安全需求:
了解产品的安全需求是非常重要的,对需要保护的信息或资产需要进行密级分类(比如:保密、机密和高度机密等),避免在不重要的业务上花费过多时间。此外,在不同的国家的对安全的要求和标准是不一样的,最好和法律顾问专家一起讨论明确这方面的安全需求。
4、跳出常规思维定势:
只有跳出常规的思维定势才能执行一次成功的安全性测试。常规的测试用例只能够覆盖目标程序的正常行为,而一次好的渗透测试要求人员站在攻击者的角度去思考各种无法预期的情况去攻破程序。创造性的思维可以帮助我们分析使用什么样的数据,在哪种不安全的方式下可以导致程序失效,同时也能帮助我们猜测开发人员的是如何开发的,以及如何绕过程序的防护逻辑,这也是为什么说使用安全自动化测试工具不是一种有效的安全测试方式,因为创造性思维必须是case by case的,不同的开发人员开发同一个程序都会有不同的结果。
5、深入了解目标:
进行安全性测试前,最重要的事情是拿到被测试目标的相关文档,比如:架构设计、数据流图、用例等等,这些技术规格和应用程序文档不仅需要记录正常的用例,也要记录不允许发生的用例。
6、千万别忽略细节:
一次好的安全性测试绝对不是一次简单的程序review,我们必须尽量确保程序的每一处逻辑和用例都被覆盖到,对于认为是误报的点也不能放过,必须反复确认。
7、使用源代码:
由于黑盒测试并不能覆盖程序内部的所有逻辑,所以它不是最有效的做安全性测试的手段,如果手头上有目标程序的源代码,就一定要进行源码级别的审计,有时候能够发现一些黑盒测试无法发现的问题。