SDL可视作为软件安全方面的纵深防御,到了测试阶段也就代表着软件架构与设计已经定型、第三方开源组件的引用已基本不太可能改变、前面各环节的漏网安全bug已迎来最后一次发布前的检测。
在我的最初实践中,SDL的发展和很多公司一样:由最开始的安全测试发展而来,一步步将安全前置,并保留系统发布上线前设置的卡点。不过已经将安全检查内容丰富化,把安全设计checklist、静态代码扫描、web漏洞扫描与人工安全测试的结果纳入检查,原则上各项均合格达标才能发布上线。
在测试阶段,安全活动主要围绕安全报告验收、人工安全测试、漏洞验证开展。
1)报告验收
要求业务方将安全设计checklist自检报告、静态代码扫描报告、web漏洞扫描报告纳入安全提测工单中,待安全测试人员进行检查并通过后进行人工安全测试,各项的安全标准可参照:
开发阶段 | 安全活动 | 输出物 | 安全标准 |
---|---|---|---|
设计阶段 | 安全设计自检 | 安全设计checklist自检报告 | 无不符合项 |
编码阶段 | 静态代码扫描 | 静态代码扫描报告 | 无设定的高危漏洞 |
测试阶段 | Web漏洞扫描 | Web漏洞扫描报告 | 无高中危漏洞 |
人工安全测试 | TODO | 无高中危漏洞 |
值得注意的是需要设置抽查和复测机制,防止业务方有意或无意的提供不符合实际的报告,包括安全活动实施范围、安全活动结果。
2)人工测试
待各项安全报告均验收通过后,进行人工安全测试。在自动化验收和自动化安全测试之前,该活动往往会成为整个流程中压力最大和最易造成阻塞的点。据了解,部分公司会选择性进行人工安全测试;有的会针对特有的常见问题进行专项安全测试,比如仅测试越权漏洞…;有的会通过堆人进行较为全面的人工安全测试,比如内部没有hc就让很多外包驻场。
3)漏洞验证
人工安全测试往往是进一步提高软件的安全质量,发现之前各环节遗留的安全漏洞,包括但不限于:越权类漏洞、安全配置错误类漏洞、API返回过多敏感信息类漏洞、重要场景重放攻击以及常见的较为隐蔽web漏洞。然而同样重要的,还有推动安全漏洞修复,再次验证直至修复闭环。
1)安全提测信息
解决安全提测信息中可能遇到的各类问题,可以通过规范提测信息填写要求、提测信息核对处理流程、设置专人校对(刚入门不久的外包、实习生等)来解决。
2)安全测试思路
3)安全漏洞管理
漏洞的产生到修复离不开安全人员和业务方,然而串联起他们之间的便是漏洞的管理流程和扭转状态。前者需要流程管理系统来支持,比如jira;后者需要自定义漏洞状态以及状态改变的触发动作,整个环节最终目标就是让漏洞被及时修复。
(节选)
安全测试,最容易上手的我想应该是测试人员,基础技能知识相似,只需要改变一下思路,便可实现转型。以下是给测试团队培训过的几页培训材料,以及简短的课程大纲:
无论是什么技术,安全测试自动化是行业一致追求的目标,有效检出漏洞的同时较少人力投入。但在实现自动化前,还有半自动化、标准化可以选择,借助一些开源或现成的工具快速进行安全测试工作,往往也会有不错的效果。