DAST 浏览器分析器
- 层级:终极版
- 提供:GitLab.com、GitLab 自托管、GitLab 专用
GitLab 17.0 中,DAST 版本 4 浏览器分析器被 DAST 版本 5 替代。 有关如何迁移到 DAST 版本 5 的说明,请参阅迁移指南。
浏览器型 DAST 可帮助您识别 Web 应用程序中的安全弱点(CWE)。部署 Web 应用程序后,它会暴露于新型攻击,其中许多攻击在部署前无法检测。例如,应用程序服务器的错误配置或对安全控制的错误假设在源代码中可能不可见,但可以通过浏览器型 DAST 检测到。
动态应用程序安全测试(DAST)在已部署的环境中检查应用程序是否存在此类漏洞。
有关概述,请参阅动态应用程序安全测试(DAST)- 高级安全测试。
不要对生产服务器运行 DAST 扫描。它不仅可以执行用户可以执行的任何功能,如点击按钮或提交表单,还可能触发错误,导致生产数据被修改或丢失。仅对测试服务器运行 DAST 扫描。
GitLab 构建的 DAST 浏览器分析器用于扫描现代 Web 应用程序中的漏洞。扫描在浏览器中运行,以优化对严重依赖 JavaScript 的应用程序(如单页应用程序)的测试。有关更多信息,请参阅DAST 如何扫描应用程序。
要将分析器添加到您的 CI/CD 管道,请参阅启用分析器。
入门指南
如果您是 DAST 的新手,请通过为项目启用它来开始使用。
先决条件:
-
您拥有一个在 Linux/amd64 上的 GitLab Runner,具有
docker执行器。 -
您有一个已部署的目标应用程序。有关更多详细信息,请参阅部署选项。
-
dast阶段已添加到 CI/CD 管道定义中,位于deploy阶段之后。例如:stages: - build - test - deploy - dast -
您在 runner 和目标应用程序之间有网络连接。
如何连接取决于您的 DAST 配置:
- 如果
DAST_TARGET_URL和DAST_AUTH_URL指定了端口号,请使用这些端口。 - 如果未指定端口,请使用 HTTP 和 HTTPS 的标准端口号。
您可能需要同时打开 HTTP 和 HTTPS 端口。例如,如果目标 URL 使用 HTTP,但应用程序链接到使用 HTTPS 的资源。配置扫描时,请始终测试您的连接。
- 如果
要在项目中启用 DAST:
理解结果
您可以在管道中查看漏洞:
- 在左侧边栏,选择 搜索或转到 并找到您的项目。
- 在左侧边栏,选择 构建 > 管道。
- 选择管道。
- 选择 安全 选项卡。
- 选择一个漏洞以查看其详细信息,包括:
- 状态:指示漏洞是否已分类或已解决。
- 描述:解释漏洞的原因、其潜在影响和推荐的修复步骤。
- 严重性:根据影响分为六个级别。 了解有关严重性级别的更多信息。
- 扫描器:标识检测到漏洞的分析器。
- 方法:确定易受攻击的服务器交互类型。
- URL:显示漏洞的位置。
- 证据:描述证明给定漏洞存在的测试用例。
- 标识符:用于分类漏洞的引用列表,如 CWE 标识符。
您还可以下载安全扫描结果:
- 在管道的 安全 选项卡中,选择 下载结果。
有关更多详细信息,请参阅管道安全报告。
发现在功能分支上生成。当它们合并到默认分支时,它们会变成漏洞。在评估您的安全态势时,这种区别很重要。
优化
有关为特定应用程序或环境配置 DAST 的信息,请参阅配置选项。
部署
为单个项目配置 DAST 后,您可以将配置扩展到其他项目:
-
如果您的管道配置为每次运行都部署到同一个 Web 服务器,请小心。在服务器更新时运行 DAST 扫描会导致不准确和非确定性的结果。
-
配置 runner 使用始终拉取策略来运行分析器的最新版本。
-
默认情况下,DAST 下载管道中先前作业定义的所有工件。如果 您的 DAST 作业不依赖于
environment_url.txt来定义测试 URL 或在先前作业中创建的任何其他文件,则不应下载工件。为避免下载 工件,扩展分析器 CI/CD 作业以指定无依赖项。例如,对于 DAST 基于代理的分析器,将以下内容添加到您的.gitlab-ci.yml文件:dast: dependencies: []
DAST 如何扫描应用程序
扫描执行以下步骤:
- 如果已配置,则进行身份验证。
- 爬取目标应用程序,通过执行用户操作(如跟随链接、点击按钮和填写表单)来发现应用程序的表面区域。
- 被动扫描以搜索爬取过程中发现的 HTTP 消息和页面中的漏洞。
- 主动扫描通过将有效负载注入爬取阶段记录的 HTTP 请求来搜索漏洞。
爬取应用程序
“导航"是用户可能在页面上执行的操作,如点击按钮、点击锚链接、打开菜单项或填写表单。 “导航路径"是表示用户如何遍历应用程序的导航操作序列。 DAST 通过爬取页面和内容并识别导航路径来发现应用程序的表面区域。
爬取初始化为一个导航路径,其中包含一个导航,该导航在专门配置的 Chromium 浏览器中加载目标应用程序 URL。 然后 DAST 爬取导航路径,直到所有路径都被爬取。
要爬取导航路径,DAST 会打开一个浏览器窗口并指示它执行导航路径中的所有导航操作。 当浏览器完成加载最终操作的结果后,DAST 会检查页面以查找用户可能执行的操作, 为每个找到的操作创建一个新导航,并将它们添加到导航路径以形成新的导航路径。例如:
- DAST 处理导航路径
LoadURL[https://example.com]。 - DAST 找到两个用户操作,
LeftClick[class=menu]和LeftClick[id=users]。 - DAST 创建两个新的导航路径,
LoadURL[https://example.com] -> LeftClick[class=menu]和LoadURL[https://example.com] -> LeftClick[id=users]。 - 开始在两个新的导航路径上进行爬取。
HTML 元素通常存在于应用程序的多个位置,例如在每个页面上可见的菜单。 重复元素可能导致爬虫再次爬取相同的页面或陷入循环。 DAST 使用基于 HTML 属性的元素唯一性计算来丢弃它之前已爬取的新导航操作。
被动扫描
被动扫描检查扫描爬取阶段发现的页面中的漏洞。 被动扫描尝试以与普通用户相同的方式与站点交互,包括执行删除数据等破坏性操作。 但是,被动扫描不模拟恶意行为。 默认情况下启用被动扫描。
这些检查在 HTTP 消息、cookie、存储事件、控制台事件和 DOM 中搜索漏洞。 被动检查的示例包括搜索暴露的信用卡、暴露的密钥令牌、缺失的内容安全策略以及重定向到不受信任的位置。
有关各个检查的更多信息,请参阅检查。
主动扫描
主动扫描通过将攻击有效负载注入扫描爬取阶段记录的 HTTP 请求来检查漏洞。 默认情况下禁用主动扫描,因为它们模拟恶意行为。
DAST 分析每个记录的 HTTP 请求以查找注入位置,如查询值、头值、cookie 值、表单发布和 JSON 字符串值。 攻击有效负载被注入到注入位置,形成一个新的请求。 DAST 将请求发送到目标应用程序,并使用 HTTP 响应来确定攻击是否成功。
主动扫描运行两种类型的主动检查:
- 匹配响应攻击分析响应内容以确定攻击是否成功。例如,如果攻击尝试读取系统密码文件,当响应体包含密码文件的证据时,会创建一个发现。
- 定时攻击使用响应时间来确定攻击是否成功。例如,如果攻击尝试强制目标应用程序休眠,当应用程序响应时间比休眠时间长时,会创建一个发现。定时攻击会使用不同的攻击有效负载重复多次,以最小化误报。
简化的定时攻击工作原理如下:
- 爬取阶段记录 HTTP 请求
https://example.com?search=people。 - DAST 分析 URL 并找到一个 URL 参数注入位置
https://example.com?search=[INJECT]。 - 主动检查定义了一个有效负载,
sleep 10,尝试让 Linux 主机休眠。 - DAST 发送一个新的 HTTP 请求到目标应用程序,带有注入的有效负载
https://example.com?search=sleep%2010。 - 如果目标应用程序在没有验证的情况下将查询参数值作为系统命令执行,例如
system(params[:search]),则该应用程序存在漏洞。 - 如果响应时间超过 10 秒,DAST 会创建一个发现。