介绍 ZAP
OWASP ZAP是世界上最受欢迎的 Web 应用程序扫描仪,现在每月收到超过 400 万次“检查更新”调用(今年早些时候只有 100 万次)。
它是免费的、开源的,可供具有广泛安全经验的人使用,从新手到经验丰富的安全专家,以更好地了解 Web 应用程序安全状况。OWASP ZAP的工作方式是以类似于恶意黑客的方式攻击您的网络应用程序,它会在您的应用程序运行时对其进行攻击,并向您展示攻击者在攻击您的应用程序时能够找到的内容。
ZAP 桌面
ZAP 是为灵活性和采用而构建的,因此可以按照您喜欢的工作方式以多种方式运行它:
从命令行
作为桌面应用程序
作为后台守护进程
在本文中,我将向您展示如何从命令行自动化 ZAP,以及如何使用 ZAP 桌面应用程序对其进行设置。ZAP 桌面应用程序允许您准确查看 ZAP 的功能,并调整 ZAP 以尽可能有效地处理您的应用程序。
ZAP 需要Java 8+才能在本地运行,但您也可以在 Docker 中运行 ZAP并使用Webswing通过浏览器访问它。我们不会在这里深入探讨此设置,但欢迎您参考文档以开始使用。
请注意,如果您使用 docker 选项,那么您需要确保使用映射本地驱动器的选项启动 docker,以便您可以在停止 docker 映像后访问将要生成的文件。在 *nix 系统上,docker 选项是-v $(pwd):/zap/wrk/:rw- 在 Windows 上,您需要替换$(pwd)为合适目录的完整路径。
自动化框架
自动化框架(AF) 允许您使用一个 yaml 文件来控制 ZAP。还有其他方法可以使 ZAP 自动化,但 AF 是大多数用户推荐的方法。
您可以在文本编辑器中创建 yaml 文件,但也可以使用 ZAP 桌面创建它,因为这样您可以随时测试计划,这是我们将在此处使用的选项。
使用蜘蛛探索您的应用
首先要做的是探索您的应用程序。为人类设计的应用程序通常最好由人类探索,但这不是自动化和最终扩展的好选择。但是,我们将首先进行一些手动探索,以确保我们可以连接到该应用程序。
在 ZAP 桌面点击“Manual Explore”按钮。在下一个表格中,填写目标应用程序的 URL,取消选中“启用 HUD”框并单击“启动浏览器”。
应启动一个浏览器并显示您的目标应用程序——为了这个示例,我们将使用 Firefox,但如果您安装的是 Chrome 浏览器,它也应该可以正常工作。
现在查看站点树 — 您应该至少看到一个来自目标应用程序的 URL,可能还有更多。在本例中,我使用OWASP Juice Shop作为我的目标。
现在我们可以看到 2 个蜘蛛中的每一个如何处理我们的应用程序。
右键单击站点树中应用程序的顶部节点,然后选择“攻击 -> 蜘蛛…”
然后单击“开始扫描”。
这个蜘蛛应该运行得非常快,它会告诉你有多少 URL 被找到,有多少被添加到站点树:
如果您的目标应用是更传统的应用,那么这就足够了。但是,如果它是大量使用 JavaScript 的更现代的 Web 应用程序,那么您将需要使用 AJAX 蜘蛛。
右键单击站点树中应用程序的顶部节点,然后选择“攻击 -> AJAX 蜘蛛…”
然后单击“开始扫描”。
此蜘蛛程序将花费更长的时间,因为它会启动浏览器以单击 UI 元素。它还会告诉您它找到了多少个 URL:
通过导入 API 定义探索您的应用
如果您的应用程序只定义了一个 API,那么您将无法手动或使用任何一个 ZAP 蜘蛛探索它。
如果您有 API 定义,则可以通过“导入”菜单项导入它。ZAP 支持导入以下定义:
开放API
图形QL
WSDL
哈尔
定义上下文
如果您只是手动使用 ZAP,则不需要定义上下文,但在使用 Automation Framework 时需要定义上下文。幸运的是,这很容易做到——只需右键单击站点树中应用程序的顶部节点,然后选择“包含在上下文中 -> 新上下文:”
并可选地给它一个有意义的名字:
在桌面上创建计划
我们现在准备好创建计划了。
首先,您需要找到“自动化”选项卡。ZAP 有很多选项卡,因此默认情况下,除了最重要的选项卡外,所有选项卡都是隐藏的。单击底部面板中的绿色加号选项卡并选择“自动化:”
在新的自动化面板中单击“新计划...”按钮:
图片说明
选择您在上面定义的上下文,然后选择以下配置文件之一:
基线——如果你只是想被动地扫描你的应用程序而不是攻击它
GraphQL - 如果您有 GraphQL API 定义
OpenAPI - 如果您有 OpenAPI / Swagger API 定义
SOAP - 如果您有 SOAP 定义
全面扫描 - 如果您想攻击您的应用程序(并且没有 API 定义)
现在将显示您的计划摘要:
计划可以比这些配置文件灵活得多,但它们是您入门时使用的最佳选择。
Baseline 和 Full 扫描将包括spider和spiderAjax——如果您发现不需要,可以删除其中一个。不要同时删除两者,否则该计划将根本不会探索您的应用程序!
如果除了抓取之外还想导入 API 定义,则添加相关作业。
您可以在 ZAP 桌面中编辑计划:
双击任何作业将弹出一个对话框,允许您对其进行配置
“添加工作...”按钮将允许您向现有计划添加工作
“删除作业...”按钮将删除选定的作业
“Move Job Up”按钮会将所选作业向上移动一个位置
“向下移动作业”按钮会将所选作业向下移动一个位置
被动扫描
ZAP 将被动扫描由 ZAP 发起或通过它代理的每个请求。
这些配置文件都会添加两个相关的工作:
passiveScan-config - 这允许您微调被动扫描仪
passiveScan-wait - 等待所有请求被被动扫描,它应该总是在探索你的应用程序的任何作业之后运行
主动扫描
activeScan作业运行主动扫描器——这执行实际的攻击。
除非您只想被动扫描您的应用程序,否则您应该始终包含此作业。
双击作业将允许您微调活动扫描规则。
生成报告
毫无疑问,报告作业的任务是生成报告——有多种模板可供您选择,并提供不同的选项。请参阅https://www.zaproxy.org/docs/desktop/addons/report-generation/templates/以获取包含每个示例的最新列表。
验证
身份验证很难,而且绝对超出了这篇博文的范围(但我们将在未来尽最大努力对此进行深入探讨)。但是,ZAP 几乎可以处理任何身份验证机制——更多详细信息,请访问 ZAP 网站。好消息是,您可以在 ZAP 桌面上测试身份验证处理,您可以在其中准确查看正在发生的事情,并且当您使用该上下文创建计划时,所有身份验证配置都将导入计划中。
在本地测试您的计划
您可以使用“运行计划...”按钮运行您在 ZAP 中创建的身份验证计划。然后,您将在计划运行时看到作业的状态:
如果任何作业失败,您可以在 ZAP 桌面中调查它们。
然而,工作可能看似成功,但仍未达到您的预期。
这就是 AF 支持工作结果测试的原因——这些测试可以添加到任何工作中,并且可以执行以下操作:
检查任何ZAP 统计数据
检查特定警报是否存在
检查是否找到了特定的 URL 并可选择检查其内容
统计测试默认添加到蜘蛛作业中,但您可以使用“添加测试...”按钮(还有一个“删除测试...”按钮)向任何作业添加更多测试,并且不要忘记您可以加倍单击计划中的任何测试以对其进行编辑。
在 CI/CD 中运行
您可以使用如下命令从命令行运行 AF 测试:
zap.sh -cmd -autorun plan.yaml
您也可以在 docker 中运行它们。如果您使用的是稳定映像,那么我们建议使用单独的命令更新 ZAP:
docker run -v $(pwd):/zap/wrk/:rw -t owasp/zap2docker-stable bash -c "zap.sh -cmd -addonupdate; zap.sh -cmd -autorun /zap/wrk/plan.yaml"
该$(pwd):/zap/wrk/:rw命令的一部分将您的本地 CWD 映射到/zap/wrkdocker 容器中的目录。
如果您在计划中使用任何脚本,那么您将需要确保它们位于或低于您的本地 CWD 并更改您的计划,以便通过它们在 docker 容器中出现的位置(即在 下/zap/wrk)引用它们。