安全测试的基本规则及其实施方式
安全测试不再仅仅是安全团队的职责。新的工具已经使得在DevOps模型中进行测试变得更加容易,这使得开发者在构建应用或软件的时候能够查看和测试代码。但是,开发者并不总是愿意亲自进行安全测试:根据GitLab 2019年的全球开发者报告,接近一半的安全专家(49%)表示,他们发现很难让开发者将修复安全漏洞作为优先事项。和开发及运营团队一样,有50%的受访安全团队也认为,测试是拖慢开发进度的主要因素。应用开发领导者可以通过获得团队的支持,并使用便于开发者遵循以下五个原则的工具来提高他们的团队的安全操作。
安全应该始终伴随着你
我们已经进入到一个新的时代,在这个时代,安全不再是某种事后才去考虑或是附属的行为:每个人都要确保他们的工作不会给客户或企业带来风险。安全不应该仅仅被看作是一个需要完成的任务,它应该是一种始终伴随我们的操作方法,无论在开发、部署还是更新的过程中。开发者可以通过遵循以下5个原则,将安全视为他们个人的职责:
1、宣传你的安全措施
尽管开发者正在承担更多的安全责任,但关于谁应当负责安全的总体问题仍然存在。每个人都应该对安全负责,但很多时候这种“每个人都负责”的态度往往意味着“没有人真正去负责”。开发团队的领导者应该倡导和强调安全的重要性,并分配适当的时间来解决它。如果没有这样的强烈倡导,那么可能不会分配足够的资源来确保安全,导致安全问题变成了一个高风险的技术问题。通过在软件开发过程的早期就注重安全,开发者可以早早地为其分配资源。为了让开发者更容易实施强大的安全措施,团队领导者可以创建团队指导方针,教育开发者了解最佳实践和常见的问题,并通过团队和个人的安全标准来明确你对他们的期望。
2、尽早测试,经常测试
DevSecOps是DevOps策略中的重要进一步发展。相对于其他团队,安全团队在代码正式合并之前发现漏洞的几率要高三倍。因此,你应该在编码过程中就开始测试,并且一旦发现漏洞就立即修复。通过集成可以进行依赖性扫描、动态应用安全测试(DAST)和静态应用安全测试(SAST)的工具,开发者可以在代码编写和提交时获得实时的反馈。这样的工具能在开发初期就为开发者提供其代码安全状况的信息,这种早期的修复方式相较于后期发现并修复来说,更为迅速且成本更低。在一个成熟的DevOps模式下,团队很有可能对所有的代码中的91%到100%进行测试,这与那些刚刚开始实施DevOps的组织是不同的。整个DevOps生命周期都应该持续进行测试,这样开发者可以在代码合并到整体代码库之前进行修改。经常进行测试最终会节省时间和资源,提高部署速度,并减少IT和安全团队之间的冲突。
3、每次更改都要有另一人进行复核
当编写和更新代码时,这个过程应该始终是团队的共同努力。有第二个人来进行复核可以帮助找出原始编写者可能没有注意到的问题,这可以降低部署还存在问题的代码的风险。这里可以采用一个随机的伙伴系统,确保不是每次都由同一个人进行代码审查,这样也能让团队中的不同成员审查与他们平常工作内容不同的代码。你应该利用各种工具来辅助代码审查和审批过程,并且在合并代码请求时设置必须有其他人审批的规则。团队文化在代码审查中非常重要:开发团队应该更关心整个项目或产品的质量和完整性,而不只是关注他们自己写代码的速度或质量。
4、记录每次代码部署、依赖和更新的主日志
保持透明度是确保代码高质量的核心要素。为代码制定一个完整的历史记录在代码审查和应对特定事件时是非常有用的,它可以帮助安全团队或开发者确定漏洞是何时、在哪里出现的。为了确保应用程序的整体可追溯性和日志记录,团队应该努力减少手工的构建或部署操作。鉴于大多数应用程序代码现在都是开源的,所以外部依赖已经成为了一个重要的潜在攻击点。而且,开源代码中的缺陷往往不被开发者察觉,通常是在问题变得严重后才被发现。因此,了解和及时更新这些依赖关系是很关键的,因为大规模的安全漏洞攻击(例如WannaCry)可能是由于没有及时的更新或修补导致的。团队应该定期使用最新的漏洞数据库对代码进行安全扫描,这样可以确保应用的安全性,即使该代码之前已经被扫描过了。
5、丰富你的安全策略组合
为了更全面地保障你的系统,你需要采用多种不同的测试方式。尽管像SAST、DAST、发布前扫描、渗透测试或依赖扫描这样的单一类型的测试是有益的,但它们并不能为你提供一个关于应用环境的完整概览。Forrester的年度应用安全报告显示,安全团队正在调整他们的策略,旨在帮助开发者能够以与开发同样的速度来处理和修复漏洞。目前,一些团队已经开始在软件正式生产前进行软件组件分析,并且有些已经将静态应用安全测试(SAST)提前到了开发的早期阶段,这可以通过使用GitLab来实现。另外,还有一些团队采用了漏洞悬赏的方式,即通过众包的方法来发现安全漏洞,这种方法尤其适用于发现那些不属于常见的安全缺陷模式的问题。
努力向DevSecOps模型转型
目前有近70%的开发者被期望能编写安全的代码,但其中只有25%的开发者认为他们的安全编码习惯是“良好”的。从这个角度来看,DevOps成为了一个很好的出发点,更为成熟的DevOps模型能够鼓励团队之间的创新与合作,并且加快了代码测试的速度。随着更多的团队不断地把安全考虑带入开发的早期阶段,DevSecOps这种将开发和安全结合起来的模式将为开发者和安全专家带来实际的好处。