4、动态代码分析(DAST)入门:什么是DAST、常见工具(OWASP ZAP, Burp Suite)、在CI/CD中集成DAST
4.1 什么是DAST?说白了就是黑盒测试
动态代码分析,也就是DAST,跟SAST完全是两码事。
SAST是看你的源代码,像读作文一样找语病。DAST呢?它根本不看你的代码。它直接对着正在运行的应用发起攻击,像个黑客一样试探你。
我习惯这么理解:SAST是静态检查,DAST是动态攻击。你想想看,一个应用跑起来了,它对外暴露了哪些接口?参数怎么传的?Cookie怎么处理的?DAST就是模拟真实攻击者,去捅这些地方。
核心区别一句话:
SAST检查代码本身,DAST检查运行中的行为。
我在项目中遇到过好几次这样的情况:SAST报告全是绿的,代码写得漂漂亮亮。结果一上DAST,瞬间爆出好几个高危漏洞。为什么?因为有些漏洞是运行时才暴露的,比如配置错误、第三方组件版本过低、甚至是你自己写的API逻辑漏洞。
4.2 常见工具:OWASP ZAP 和 Burp Suite
DAST工具不少,但真正在生产环境里用得多的,就两个:OWASP ZAP 和 Burp Suite。
4.2.1 OWASP ZAP:免费、开源、CI/CD友好
我个人习惯用ZAP做自动化扫描。它是免费的,而且有命令行模式,非常适合集成到流水线里。
ZAP能做什么?
- 自动爬取你的应用页面
- 主动扫描常见漏洞(SQL注入、XSS、CSRF等)
- 生成HTML/XML报告
- 支持API调用,方便自动化
举个例子,用ZAP的Docker镜像跑一次扫描,命令很简单:
docker run -v $(pwd):/zap/wrk/:rw -t owasp/zap2docker-stable \
zap-full-scan.py -t https://your-app.com -r report.html
嗯,这里要注意:第一次扫描可能会比较慢,尤其是应用页面多的时候。我建议先做一次被动扫描,把基础信息收集了,再开主动扫描。
4.2.2 Burp Suite:专业渗透测试的首选
Burp Suite是商业工具,功能更强大。它的社区版免费,但功能有限。专业版才支持自动化扫描。
Burp Suite的优势在于:
- 拦截代理,可以手动调试每个请求
- 扩展插件丰富(比如各种漏洞检测插件)
- 扫描结果更细致,误报率相对低
不过说实话,Burp Suite更适合人工渗透测试。你要把它集成到CI/CD里,不是不行,但成本高、配置复杂。我一般只在做安全审计时用它。
我的建议:
CI/CD里用ZAP,人工测试用Burp Suite。两者互补,不冲突。
4.3 在CI/CD中集成DAST
这才是今天的重点。DAST如果只靠人工跑,那就失去了DevOps的意义。我们要让它自动跑、天天跑。
4.3.1 集成方式:两种主流做法
| 方式 | 说明 | 适用场景 |
|---|---|---|
| 独立Job | 在流水线中单独加一个DAST扫描阶段 | 每次部署前或定时扫描 |
| 并行扫描 | 与功能测试同时进行 | 快速反馈,但资源消耗大 |
我推荐用独立Job的方式。为什么?因为DAST扫描通常比较慢,如果跟单元测试、集成测试混在一起,整个流水线会被拖死。
4.3.2 实战:在GitLab CI中集成ZAP
直接上代码。这是一个典型的.gitlab-ci.yml配置片段:
dast-scan:
stage: security
image: owasp/zap2docker-stable
script:
- zap-full-scan.py -t https://staging.example.com -r zap-report.html
artifacts:
paths:
- zap-report.html
when: always
only:
- main
你看,就这么几行。但有几个坑,我踩过:
避坑指南:
我曾经在集成ZAP时,发现扫描总是超时。后来排查发现,是因为目标应用是单页应用(SPA),ZAP默认爬虫爬不到动态路由。解决办法是:先用zap-cli手动设置上下文,或者用--hook参数加载自定义脚本。
4.3.3 扫描策略:不是所有环境都适合
你想想看,DAST是直接攻击你的应用。如果对着生产环境跑,万一搞挂了怎么办?
我个人的做法是:
- 预发布环境:每次部署前必跑,阻断高危漏洞
- 测试环境:每天定时跑一次,做全面扫描
- 生产环境:只做被动扫描,不主动攻击
说白了,DAST是一把双刃剑。用好了能发现真问题,用不好可能把自己搞宕机。
4.4 扫描结果怎么处理?
扫描完了,报告出来了,然后呢?
我见过不少团队,DAST报告堆了一堆,没人看。为什么?因为误报太多,或者漏洞太多,根本修不过来。
我的经验是:
- 先处理高危漏洞:比如SQL注入、命令执行,这些必须阻断发布
- 中危漏洞:记录到缺陷跟踪系统,排期修复
- 低危/信息类:可以忽略,或者作为安全改进项
一个小技巧:
在ZAP的配置里,可以设置alertthreshold参数。比如只报告高危和中危,低危直接过滤掉。这样报告看起来清爽很多。
4.5 总结一下
DAST不是银弹,但它能补上SAST的盲区。尤其是那些运行时才暴露的问题,比如配置错误、第三方组件漏洞、业务逻辑缺陷。
我建议每个团队至少把ZAP集成到CI/CD里。成本低、效果好。至于Burp Suite,留给安全团队做深度测试就好。
嗯,最后说一句:安全不是一个人的事。DAST只是工具,真正重要的是团队有没有安全意识。工具再强,没人看报告、没人修漏洞,等于白搭。