基于浏览器分析器的 DAST

  • Tier: 旗舰版
  • Offering: JihuLab.com, 私有化部署
History
    • 在极狐GitLab 15.7 中 GA。

在极狐GitLab 17.10 中,基于浏览器分析器的 DAST 4 替代了 DAST 5。关于如何迁移到 DAST 5 的说明,请参见迁移指南

浏览器基础版的 DAST 帮助您识别网页应用中的安全漏洞(CWEs)。在您部署网页应用后,它将暴露给新的攻击类型,许多这些攻击在部署前无法检测到。例如,您的应用服务器配置错误或对安全控制的错误假设可能无法从源代码中显现,但可以通过浏览器基础版的 DAST 进行检测。

动态应用安全测试 (DAST) 在已部署的环境中检查类似的应用漏洞。

不要对生产服务器运行 DAST 扫描。它不仅可以执行用户能执行的 任何 功能,比如点击按钮或提交表单,还可能触发漏洞,导致生产数据的修改或丢失。只对测试服务器运行 DAST 扫描。

极狐GitLab 构建的 DAST 浏览器基础版分析器用于扫描现代网页应用的漏洞。扫描在浏览器中运行,以优化测试严重依赖 JavaScript 的应用,例如单页应用。更多信息请参见 DAST 如何扫描应用

要将分析器添加到您的 CI/CD 流水线中,请参见 启用分析器

DAST 如何扫描应用#

扫描执行以下步骤:

  1. 认证,如果已配置。
  2. 爬取目标应用,通过执行用户操作如跟随链接、点击按钮和填写表单来发现应用的表面区域。
  3. 被动扫描,在爬取过程中发现的 HTTP 消息和页面中搜索漏洞。
  4. 主动扫描,通过在爬取阶段记录的 HTTP 请求中注入载荷来搜索漏洞。

爬取应用#

“导航”是用户可能在页面上采取的操作,例如点击按钮、点击锚链接、打开菜单项或填写表单。“导航路径”是表示用户如何遍历应用的导航动作序列。DAST 通过爬取页面和内容并识别导航路径来发现应用的表面区域。

爬取初始化时,导航路径包含一个导航,该导航在专门仪器化的 Chromium 浏览器中加载目标应用 URL。DAST 然后爬取导航路径,直到所有路径都被爬取。

要爬取导航路径,DAST 打开一个浏览器窗口并指示它执行导航路径中的所有导航动作。当浏览器完成最终动作结果加载后,DAST 检查用户可能采取的页面操作,为每个找到的操作创建一个新的导航,并将其添加到导航路径中以形成新的导航路径。例如:

  1. DAST 处理导航路径 LoadURL[https://example.com]
  2. DAST 找到两个用户操作,LeftClick[class=menu]LeftClick[id=users]
  3. DAST 创建两个新的导航路径,LoadURL[https://example.com] -> LeftClick[class=menu]LoadURL[https://example.com] -> LeftClick[id=users]
  4. 爬取在两个新的导航路径上开始。

HTML 元素通常在应用中多个地方存在,例如在每个页面上可见的菜单。重复元素可能导致爬虫重复爬取相同页面或陷入循环。DAST 使用基于 HTML 属性的元素唯一性计算来丢弃其之前爬取的新导航动作。

被动扫描#

被动扫描检查在扫描的爬取阶段发现的页面中的漏洞。被动扫描尝试以正常用户的方式与站点交互,包括执行破坏性操作如删除数据。然而,被动扫描不模拟对抗行为。被动扫描默认启用。

检查搜索 HTTP 消息、cookies、存储事件、控制台事件和 DOM 中的漏洞。被动检查示例包括搜索暴露的信用卡、暴露的密钥令牌、缺少内容安全策略和重定向到不可信位置。

更多关于单个检查的信息,请参见 检查

主动扫描#

主动扫描通过在扫描的爬取阶段记录的 HTTP 请求中注入攻击载荷来检查漏洞。主动扫描默认禁用,因为它们模拟对抗行为。

DAST 分析每个记录的 HTTP 请求以查找注入位置,例如查询值、头值、cookie 值、表单提交和 JSON 字符串值。攻击载荷被注入到注入位置中,形成新的请求。DAST 将请求发送到目标应用,并使用 HTTP 响应来确定攻击是否成功。

主动扫描运行两种类型的主动检查:

  • 响应匹配攻击分析响应内容以确定攻击是否成功。例如,如果攻击尝试读取系统密码文件,当响应主体包含密码文件的证据时,将创建一个发现。
  • 时间攻击使用响应时间来确定攻击是否成功。例如,如果攻击尝试强制目标应用休眠,当应用响应时间超过休眠时间时,将创建一个发现。时间攻击多次重复不同的攻击载荷以最小化误报。

简化的时间攻击如下:

  1. 爬取阶段记录 HTTP 请求 https://example.com?search=people
  2. DAST 分析 URL 并找到 URL 参数注入位置 https://example.com?search=[INJECT]
  3. 主动检查定义一个载荷 sleep 10,尝试让 Linux 主机休眠。
  4. DAST 发送新的 HTTP 请求到目标应用,带有注入的载荷 https://example.com?search=sleep%2010
  5. 如果目标应用执行查询参数值作为系统命令而没有验证,例如 system(params[:search]),则目标应用存在漏洞。
  6. 如果响应时间超过 10 秒,DAST 创建一个发现。