DevSecOps安全测试自动化的五个方法
DevOps和DevSecOps的核心都是自动化,以确保开发和发布过程可重复,但当发布速度太快以至于无法在发布之间或在设定时间执行手动安全测试步骤时,自动化安全测试就显得尤为重要。
自动化安全测试可确保每次推送代码时都完成所需的安全测试步骤,并从流程中中删除人类记忆,以便完成回归测试等关键任务。自动化安全测试还能通过策略执行来加强安全性,以防止开发人员直接访问生产代码,成为职责分离的执行点。
对于很多安全从业者来说,尤其是那些没有应用程序安全或软件开发背景的人,可能很难确定在开发管道中何处以及如何开展自动化安全测试。
今天,DevSecOps的多种安全测试都受益于自动化方法,例如代码质量检查、Web应用程序扫描和漏洞扫描。以下是开发团队在开发管道中实现安全测试自动化的五个重要方法:
1、代码质量(SAST)
当人们谈论软件安全或开发安全时,首先想到的控制可能是代码质量,即静态应用程序安全测试(SAST)。对于能熟练使用Unix工具Lint发现C语言代码错误的人来说,静态代码扫描并不是一个陌生的概念。
静态分析工具通常被用来评估源代码,有时也被用于评估对象代码的安全问题。在DevOps工具链中,可以在几个不同的地方实现SAST自动化:
- 可以在开发人员提交代码时运行,即在扫描代码查找问题时运行。
- 可以在构建之前进行。
- 在开发后使用目标代码而非源代码验证工具时使用。
一种策略可以是建立一个基线指标,设定可接受的错误率,高于该指标才需要用户干预。这基于问题的数量、问题的严重性或两者兼顾。高于此阈值,则要求开发人员采取措施修复代码,然后才能进行发布。另一种选择取决于发布节奏和SAST对误报的设置,仅标记问题以供下游进一步审查,但不主动控制代码推送。
2、Web应用程序扫描(DAST)
可在开发完成之后,发布到生产环境之前的应用程序动态测试中实现自动化。
动态应用程序安全测试(DAST)工具从外而内地检查应用程序,包括查看应用程序的表面部分、与其交互并观察发生的情况。在DevOps工具链中,可以实施自动化的一个地方是开发后期的自动化质量保证流程。一个快速实现DAST自动化的方式是在守护进程模式下使用开源应用程序扫描器Zed Attack Proxy(仅命令行界面),通过自动触发与其他测试活动并行运行。可使用此方法或REST API测试Web UI元素,也可结合参数模糊测试。
3、容器扫描/漏洞依赖分析
如今新应用程序的开发大都依赖于应用程序容器,例如Docker或Rkt。容器的优势在于它能将应用程序或组件以及所需的底层库、中间件、资源和其他依赖项打包在一起。
这是容器的一个有用功能,但潜在的缺点之一是:有时这些底层组件存在已知漏洞。由于容器将依赖项组合在一起,从操作的角度来看能够节省不少工作,但也会导致人们很容易忘记这些漏洞,或压根没有意识到它们的存在。
扫描容器的自动化工具(例如开源的Clair或Anchore Engine)能够查看容器内的依赖关系,通过查找和报告易受攻击的支持组件来帮助缓解此问题。为了实现自动化,这些工具可以在创建后的任何时候在容器上运行。如果在依赖项中发现重大问题,则触发手动审查以修复易受攻击的依赖项,记录问题以备将来使用。
4、软件构成分析
企业创建软件物料清单(SBOM)的理由,有些来自客户,有些则来自企业自身。生成SBOM最难的部分是与保持底层依赖项列表最新,这是一项极为复杂的工作。将软件构成分析(SCA)工具引入工具链是帮助保持SBOM更新的有用方法。
SCA工具还可以帮助开发团队明确实施自动化的最佳位置。例如,对目标文件或可执行映像进行操作的软件需要在构建后运行,而对源文件进行操作的软件可能需要与提交流程并行执行。
5、自动漏洞扫描
以上列出的自动化安全测试工具涵盖了大多数软件组件,但不是全部。Web UI系统和REST API可由DAST扫描,容器化软件用容器扫描工具扫描。对于其他软件,合并漏洞扫描会很有帮助。对于部署到云端VM或部署自定义操作系统安装的团队,漏洞扫描可以帮助他们发现和标记潜在的安全问题。
自动化漏洞扫描与配置管理能很好地结合在一起,每当部署资源的配置发生变化(例如基础设施即代码脚本)就会运行漏洞扫描器,这种方法有很高的安全价值。