针对Web应用的安全扫描工具非常多,其中 OWASP ZAP 是免费软件里面最为常用的。虽然OWASP ZAP官方并没有提供相应的方案和构建系统以及CI进行集成,但是有一些第三方的开源工具可以帮助其集成。下面将以Gradle项目为例,介绍如何在CI自动化测试阶段集成ZAP并进行被动方式的动态安全扫描。
第1步:下载安装ZAP。
第2步:在Gralde构建脚本中配置security-zap插件用于集成ZAP。
第3步:配置WebDriver,为其设置代理。
默认配置下,security-zap插件在启动ZAP之后,ZAP会侦听本地7070端口,因此需要将WebDriver的代理设置为localhost:7070
第4步:启动ZAP并运行测试。
使用zapStart命令来启动ZAP,用build来运行一次构建,在运行所有测试的同时进行被动扫描,命令如下:
gradle zapStart build -Dzap.proxy=localhost:7070
第5步:生成安全报告。
在所有的测试都执行完毕后,使用zapReport命令生成报告,命令如下:
gradle zapReport
它会在项目根目录下新建一个名为zap-reports的目录,并将安全扫描报告放置其中。下面是一份示例安全报告,它列出了所测试的Web应用的安全漏洞,按照严重程度以及类别进行了统计,还包含了每个安全漏洞的细节信息,报告如下:
第6步:关闭ZAP。命令如下:
gradle zapStop
第7步:Jenkins集成。Jenkins配置如下:
在测试环境部署阶段进行主动方式的动态安全扫描
继续以Gradle项目和OWASP ZAP为例,在安装好ZAP并且在构建脚本里配置好security-zap插件后(同上一阶段的步骤1、2), 只需要使用zapStart和zapScan命令就可以启动主动式扫描,命令如下:
gradle zapStart zapScan
主动扫描的检查能力更强,可以弥补被动扫描的不足,但缺点是耗时长,以及在扫描需要身份验证的系统的时操作复杂。
默认配置下主动扫描启动后,security-zap插件会主动检测扫描进度,默认扫描等待时间为60分钟。如果主动式安全扫描的执行时间超过了这一时间,security-zap会因为超时而终止运行,不过ZAP安全扫描并不会因此而停止,它还将继续运行,直到完成所有的安全扫描为止。若要了解当前扫描进度,可以通过运行zapScanStatus命令查询,命令如下:
gradle zapScanStatus
扫描完成后,通过运行下面的命令生成安全扫描报告,并关闭ZAP:
gradle zapReport zapStop
总结
自动化持续Web安全扫描是一个复杂的课题,很大程度上依赖于自动化Web安全扫描工具的能力。当前绝大部分Web安全扫描工具并不能发现所有的安全问题,就算OWASP TOP10也无法全部包括,但是它可以在较小投入的情况下持续发现大部分Web系统的基础安全问题,从而防止大部分中级和几乎所有初级的黑客攻击。如果需要更高级别的安全保障,人工渗透性测试和威胁建模等必不可少,但是成本也是相对较高的。
所以对于Web系统的安全,首先要分析系统的安全需求和可用资源,在资源有限的情况下应该首先实施自动化持续安全扫描。如果系统的安全需求很高,并且在资源允许的情况下再投入人工渗透性测试等,从而获得安全上的最高投资回报比。
更新时间:2023-12-28 09:15