DAST(动态应用安全测试)从外部测试正在运行的应用,以发现弱点。本页说明它与其他方法的区别,以及如何用于您自己的应用(不涵盖测试他人网站)。
什么是DAST
DAST是动态应用安全测试(dynamic application security testing)的缩写。OWASP的DevSecOps指南将其描述为黑盒测试,即发现正在运行的应用中的安全漏洞和弱点。黑盒是指只通过从外部可见的内容进行测试,而不查看内部源代码。
实际操作中,工具会沿着应用的页面和输入字段进行访问,发送测试请求,并在响应中寻找问题的迹象。该指南称,它对输入/输出验证、身份验证问题和服务器配置错误尤其有用。
工作原理
与SAST、IAST和SCA的区别
| 方法 | 检查对象 | 是否运行应用 | 适用于 |
|---|---|---|---|
| DAST | 运行中应用从外部表现的行为 | 是 | 输入/输出验证、身份验证、服务器配置 |
| SAST | 源代码或编译后的代码 | 否 | 在开发早期发现编码问题 |
| IAST | 应用的内部行为(通过传感器) | 是(测试期间) | 自动化测试中出现的问题 |
| SCA | 库和其他依赖项 | 否 | 存在已知漏洞(CVE)的组件 |
对于SAST,OWASP列出了一些局限,例如只能发现相对较小比例的应用安全缺陷、误报较多以及会漏掉配置问题。DAST有助于弥补这一缺口,但也并不完整。关于SCA,请参阅使用OSV-Scanner审计依赖项。
如何用于自己的应用(以OWASP ZAP为例)
ZAP(Zed Attack Proxy,原称OWASP ZAP)是一款免费的开源DAST工具。其官方网站现将其标注为"ZAP by Checkmarx"。
- 准备您管理的测试环境的URL。使用测试环境,而非生产环境
- 运行基线扫描。根据ZAP文档,它仅为被动模式:默认运行1分钟的爬虫(即页面跟踪功能),不执行任何攻击。最多只需几分钟
- 查看结果,并由人员确认哪些发现是真实的;误报确有发生
- 如有需要,再转向主动扫描,且仅在测试环境中进行。它会对目标运行已知攻击,文档称不得用于您不拥有的Web应用
- 定期重新运行,例如在CI中,每次修复后运行一次
仅针对您拥有或管理的应用的测试环境使用
DAST工具发送的流量与真实攻击相似。若在您无权测试的网站上运行,可能构成未经授权的访问或服务中断。ZAP文档同样指出,不得对您不拥有的Web应用使用主动扫描。在生产环境上运行还可能产生副作用,例如创建数据或增加负载。
DAST遗漏的内容
ZAP文档指出,其主动扫描无法发现访问控制失效等逻辑问题,因此应辅以手动测试。像IDOR这类漏洞(即一名用户可以查看另一名用户的数据)对自动化工具而言很难发现,因为工具并不知道正确的行为应该是什么。您需要编写自己的测试,请求另一用户的ID,并确认该请求会被拒绝。
另一方面,配置检查正是DAST擅长的内容。关于哪些设置值得配置,请参阅安全响应头:哪些仍然重要。
本站观点:DAST是最后一道防线。应从三个层面思考:代码、组件、行为
与其指望一个工具找出所有问题,不如结合三种从不同位置查看的方法更为现实:先读取代码(SAST),再检查组件是否存在已知漏洞(SCA),然后运行应用并从外部进行测试(DAST)。工具不擅长的"谁可以做什么",应通过您自己编写的测试加以保护。不要直接信任工具输出,修复前请由人员确认。
资料来源(一手)
- OWASP DevSecOps指南,"Dynamic Application Security Testing" — owasp.github.io(DAST的定义,黑盒)
- OWASP DevSecOps指南,"Interactive Application Security Testing" — owasp.github.io(IAST)
- OWASP Community,"Source Code Analysis Tools" — owasp.org(SAST及其局限)
- ZAP文档,"Active Scan" — zaproxy.org(不得用于您不拥有的应用;无法发现逻辑问题)
- ZAP文档,"Baseline Scan" — zaproxy.org(仅被动模式;运行时间)
- 对SCA的描述是一般性定义;未核实其官方定义
延伸阅读
- 术语表:什么是模糊测试 · 什么是OWASP Top 10 · 什么是IDOR
- 指南:安全响应头:哪些仍然重要 · 使用OSV-Scanner审计依赖项
- 术语表:什么是CVE