使用 Web Security Scanner 设置自定义扫描

使用 Google Cloud Console 中的 Web Security Scanner 对已部署的应用安排和运行自定义扫描。Web Security Scanner 支持扫描不受防火墙保护的公共网址和 IP。

准备工作

要使用 Web Security Scanner 设置自定义扫描,请执行以下操作:

  • 您必须在公共网址和 IP 上具有已部署的应用。
  • 您必须启用 Security Command Center。

在扫描之前,请仔细审核您的应用,查看是否有功能影响数据、用户或系统,超出扫描的预期范围。

由于 Web Security Scanner 会执行填充字段、按下按钮、点击链接和其他互动,因此您应谨慎使用。Web Security Scanner 可能会激活更改数据或系统状态的功能,造成不良后果。例如:

  • 在允许公开评论的博客应用中,Web Security Scanner 可能会将测试字符串作为评论发布到您的所有博文。
  • 在电子邮件注册页面中,Web Security Scanner 可能会生成大量的测试电子邮件。

如需了解关于如何将风险降至最低的提示,请参阅最佳做法以防止出现意外后果。

启用 Web Security Scanner

在 Security Command Center 中启用 Web Security Scanner 以创建并运行自定义扫描。

如果 Security Command Center 处于活跃状态,您可以在 Google Cloud 控制台中的 Security Command Center 设置页面上启用 Web Security Scanner。

第 1 步:部署测试应用

如需完成自定义扫描的 Web Security Scanner 设置,您需要已部署的 Compute Engine、Google Kubernetes Engine (GKE) 或 App Engine 应用的网址。如果您没有已部署应用,或者想要通过测试应用试用 Web Security Scanner,请部署 App Engine 测试应用。使用您选择的语言:

第 2 步:分配 IAM 角色

要运行 Web Security Scanner 扫描,您必须对要扫描的项目拥有以下 Identity and Access Management (IAM) 角色之一:

  • 编辑器
  • 所有者

要添加其中一个角色,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 IAM 和管理页面
    转到“IAM 和管理”页面
  2. 点击项目选择器下拉列表。
  3. 在显示的请选择对话框中,选择要使用 Web Security Scanner 扫描的项目。
  4. IAM 页面,点击用户名旁边的修改
  5. 在显示的修改权限面板上,点击添加其他角色,然后选择以下角色之一:
    • 项目 > 所有者
    • 项目 > 编辑者
  6. 添加完角色后,点击保存

详细了解 Web Security Scanner 角色

第 3 步:执行扫描任务

设置扫描时,其会排队等待运行。根据当前负载,可能需要几个小时才能执行扫描。如需创建、保存和运行扫描,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Web Security Scanner 页面。
    转到 Web Security Scanner 页面
  2. 选择包含您要扫描的已部署应用的项目。
  3. 要设置新的扫描,请点击新建扫描
  4. 在加载的创建新扫描页面上,设置以下值:

    1. 起始网址下,输入您要扫描的应用的网址。
    2. 时间表下,选择每周
    3. 下次运行时间下,选择一个日期。

    系统会自动选中导出到 Security Command Center 复选框。如果您已将 Web Security Scanner 启用为 Security Command Center 安全来源,扫描结果可能会显示在 Google Cloud 控制台中。

    对于第一次扫描,请使用默认扫描,而不更改创建新扫描页面上的任何其他值。如需详细了解扫描设置,请参阅扫描应用

  5. 要创建扫描,请点击保存

  6. 在 Web Security Scanner 页面上,点击扫描名称以加载其概览页面,然后点击运行扫描

    扫描将加入队列,然后在将来的某个时间运行。扫描可能需要几个小时才能完成。

  7. 扫描概览页面会在扫描完成后显示结果部分。下图展示了未检测到漏洞时的示例扫描结果:

    如果您启用了 Web Security Scanner 作为 Web Security Scanner 安全来源,则 Google Cloud 控制台上也会显示扫描结果。

    要显示特定发现的详细信息,请点击扫描结果中的发现名称。

您现已完成基本的 Web Security Scanner 扫描。如果您扫描了自己的应用,请在本页的扫描应用部分了解如何自定义扫描。

如果您部署了测试应用来运行扫描,请完成此页面上的清理步骤,以避免因该应用而产生 App Engine 费用。

第 4 步:清理

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

扫描应用

使用测试账号为您的应用设置自定义扫描。

第 1 步:创建测试账号

扫描您的应用时,最好使用无权访问敏感数据或有害操作的测试账号。创建可以登录您的应用的测试账号,并在创建扫描时记下登录凭据以提供身份验证。该凭据允许您使用测试账号扫描数据。

第 2 步:创建扫描

  1. 转到 Google Cloud 控制台中的 Web Security Scanner 页面。
    转到 Web Security Scanner 页面
  2. 点击选择,然后选择已部署 App Engine、Compute Engine 或 GKE 应用的项目。
  3. 要显示新建扫描表单,请点击创建扫描新建扫描
  4. 要向新建扫描表单添加值,请使用下表作为指南:
    字段 说明
    起始网址

    简单的网站通常只需要一个起始网址(例如该网站的首页、主页面或着陆页),Web Security Scanner 可以从中找到所有其他网站网页。但是,如果网站存在以下情况,Web Security Scanner 可能无法找到所有网页:

    • 许多页面
    • 由未连接页面构成的“孤岛”
    • 导航需要复杂的 JavaScript(如鼠标悬停驱动的多级菜单)

    在这种情况下,请指定更多起始网址以扩大扫描覆盖范围。

    排除的网址 为降低复杂性,可使用带有一个或多个 * 通配符的简化原型语言(而不是要求使用有效的正则表达式)来定义排除项。如需了解详情和示例有效模式,请参阅本页面后面的排除网址
    身份验证 > Google 账号

    您可以在 Gmail 中创建一个测试账号,然后使用该账号来扫描您的产品。如果您是 Google Workspace 客户,则可以在网域中创建测试账号,例如 test-account@yourdomain.com。在 Web Security Scanner 中,这些账号的操作方式与 Gmail 账号类似。不支持双重身份验证。

    Google 对 Google 账号实行实名制。如果您的测试账号中的姓名看起来不真实,则该账号可能被屏蔽了。

    身份验证 > Identity-Aware Proxy Alpha 版

    如需使用 Identity-Aware Proxy 保护资源,请参阅 IAP 指南

    如需将 Web Security Scanner 与受 IAP 保护的资源一起使用,请先向 Web Security Scanner 服务账号授予访问权限:

    1. 转到 Google Cloud 控制台中的 IAP 页面
    2. 选择要与 Web Security Scanner 一起使用的项目。
    3. 选择要扫描的应用资源,然后点击信息面板上的添加主账号
    4. 添加主账号面板上的新的主账号框中,输入以下格式的 Web Security Scanner 服务账号:

      service-project-number@gcp-sa-websecurityscanner.iam.gserviceaccount.com.

    5. 选择角色下拉列表中,依次选择 Cloud IAP > IAP Secured Web App User
    6. 添加完角色后,点击保存

    接下来,将 OAuth 客户端 ID 添加到扫描中。Web Security Scanner 只能扫描受单个 OAuth 客户端 ID 保护的应用。要添加 OAuth 客户端 ID,请执行以下操作:

    1. 转到 Google Cloud 控制台中的 IAP 页面
    2. 选择要与 Web Security Scanner 一起使用的项目。
    3. 溢出菜单上,选择修改 OAuth 客户端
    4. 在出现的 Web 应用客户端 ID 窗口中,复制客户端 ID
    5. 前往 Google Cloud 控制台中的 Web Security Scanner 页面
    6. 身份验证下,选择 Identity-Aware Proxy Alpha 版
    7. OAuth2 客户端 ID 框中,粘贴您复制的 OAuth 客户端 ID,然后点击保存
    身份验证 > 非 Google 账号

    如果您已创建自己的身份验证系统,但未使用 Google 账号服务,请选择此选项。指定登录表单的网址、用户名和密码。这些凭据用于登录和扫描您的应用。

    Web Security Scanner 会尝试使用启发法登录您的应用并扫描该应用。具体来说,此方法会查找包含 username 字段和 password 字段的两个字段登录表单。登录操作必须生成身份验证 Cookie,扫描程序才能继续扫描。

    常见问题会导致自定义登录失败,包括:

    • 使用非标准 HTML 表单字段,例如,不使用 password 类型。
    • 使用复杂的登录表单,例如,包含多个 usernamepassword 字段的表单。
    • 成功登录后不保存身份验证 Cookie。
    • 在某些情况下,扫描程序会被拒绝,以防范机器人、DDOS 和其他攻击。

    建议使用 Identity-Aware Proxy 集成,以便在以身份验证方式扫描应用时获得最一致的体验。

    时间表 您可以将扫描设置为每天、每周、每两周或每四周运行一次。最好创建定期扫描,以确保未来版本的应用得到测试。此外,由于我们偶尔会发布可以找到新错误类型的新扫描程序,因此定期运行扫描可以扫描更多覆盖范围,而无需手动操作。
    从一组预定义的来源 IP 地址运行扫描
    预览版
    选择此选项可以将扫描流量限制为一组预定义 IP 地址。这样,扫描程序就可以访问受防火墙保护的应用,但可能会限制扫描范围。要修改防火墙规则以允许 Web Security Scanner 流量,请参阅本页面后面的配置防火墙
    导出选项 选择此选项可自动将扫描配置和扫描结果导出到 Security Command Center。
    忽略 HTTP 状态错误 此选项可以控制扫描过程中有大量 HTTP 状态错误(例如 400 错误请求)是否会导致扫描报告为失败。如果选择此选项,系统会忽略状态错误。如果未选择此选项,并且状态错误的百分比超过预定阈值,则扫描会报告为失败。
  5. 添加值后,点击保存。您现在可以运行新的扫描。

默认情况下,Web Security Scanner 在每次运行期间使用随机分配的 IP 地址。如需使 Web Security Scanner IP 地址可预测,请完成本页面后面的启用静态 IP 扫描部分的操作。

第 3 步:运行扫描

要运行扫描,请执行以下操作:

  1. 登录您用于创建扫描的测试账号。
  2. 转到 Google Cloud 控制台中的 Web Security Scanner 页面。
    转到 Web Security Scanner 页面
  3. 点击选择,然后选择要在其中创建扫描的项目。
  4. 扫描配置下,点击要运行的扫描的名称。
  5. 在扫描详情页面上,点击运行

此扫描会放入队列中,并且在运行之前可能会有延迟。运行可能需要几分钟或几个小时,具体取决于系统负载和功能,如:

  • 网站复杂性
  • 每页可操作元素的数量
  • 链接数量
  • 网站上的 JavaScript 数量,包括导航

您设置并运行的不同扫描数量达到 10 个,则需要删除或清理以前保存的结果。

查看自定义扫描结果

自定义扫描的状态和结果显示在 Google Cloud 控制台中的扫描详情页面上。如需查看扫描结果,请执行以下操作:

  1. 登录您用于创建扫描的测试账号。
  2. 转到 Google Cloud 控制台中的 Web Security Scanner 页面。
    转到 Web Security Scanner 页面
  3. 点击选择,然后选择包含您要查看的扫描的项目。
  4. 扫描配置下,点击要查看的扫描的名称。

扫描详情页面会加载并显示最近扫描的结果。如果扫描正在进行中,结果标签页将显示当前完成百分比。要显示先前扫描的结果,请从下拉列表中选择扫描日期和时间。

已完成的自定义扫描的详细信息:

  • 结果标签页会显示扫描结果的漏洞列表(如果有)。
  • 已抓取的网址标签会显示扫描检查的网址列表。
  • 详细信息标签页包括:
    • 起始网址
    • Authentication
    • 用户代理
    • 最大扫描速度即每秒查询次数 (QPS)

您可以在日志页面中找到关于扫描的更多信息。

修改自定义扫描

要修改自定义扫描,请执行以下操作:

  1. 登录您用于创建扫描的测试账号。
  2. 转到 Google Cloud 控制台中的 Web Security Scanner 页面。
    转到 Web Security Scanner 页面
  3. 点击选择,然后选择包含您要修改的扫描的项目。
  4. 扫描配置下,点击要修改的扫描的名称。
  5. 在显示的扫描详情页面上,点击修改
  6. 在显示的修改 [扫描名称] 页面上,进行所需的更改,然后点击保存

修改后的自定义扫描会在下一次安排运行时运行,您也可以手动运行以获取更新结果。

删除自定义扫描

要删除一个或多个自定义扫描,请执行以下操作:

  1. 登录您用于创建扫描的测试账号。
  2. 转到 Google Cloud 控制台中的 Web Security Scanner 页面。
    转到 Web Security Scanner 页面
  3. 点击选择,然后选择包含您要修改的扫描的项目。
  4. 扫描配置下,选中要删除的一个或多个扫描旁边的复选框。
  5. 点击删除,然后点击确定

您选择的所有扫描都将被删除。

从静态 IP 设置扫描

本部分介绍如何启用从静态 IP 地址进行 Web Security Scanner 自定义扫描。启用此功能后,Web Security Scanner 会使用可预测的 IP 地址来扫描您的公共 Compute Engine 和 Google Kubernetes Engine 应用。此功能处于预览版,Web Security Scanner IP 地址在未来版本中可能会发生变化。

准备工作

要使用静态 IP 功能的 Web Security Scanner 自定义扫描,您需要:

  • 公共 Compute Engine 或 GKE 应用。此功能目前不支持 App Engine 应用。
  • 在没有身份验证或 Google 账号身份验证的情况下创建的扫描。此功能目前不支持使用非 Google 账号身份验证的扫描。

第 1 步:配置防火墙

  1. 转到 Google Cloud 控制台中的防火墙规则页面。
    转到“防火墙规则”页面
  2. 点击选择,然后选择您的项目。
  3. 在显示的防火墙规则页面上,点击创建防火墙规则
  4. 创建防火墙规则页面上,设置以下值:
    1. 名称:输入 web-security-scanner 或类似名称。
    2. 优先级:选择比拒绝应用出站流量的所有规则更高的优先级(较低的数值)。
    3. 来源 IP 地址范围:输入 34.66.18.0/2634.66.114.64/26
    4. 协议和端口:选择全部允许或指定应用的协议和端口。通常,您可以选中 tcp 复选框,然后输入端口 80443
  5. 设置完值后,点击创建

第 2 步:配置扫描

在配置防火墙以允许 Web Security Scanner 可预测的 IP 地址后,请配置扫描以使用预定义的 IP:

  1. 转到 Google Cloud 控制台中的 Web Security Scanner 页面。
    转到 Web Security Scanner 页面
  2. 点击选择,然后选择您的项目。
  3. 创建新扫描或修改现有扫描。
  4. 选中从一组预定义的来源 IP 运行扫描复选框。
  5. 保存扫描。

下次扫描运行时,它会扫描受防火墙保护的公共 Compute Engine 和 GKE 应用。

排除网址

您最多可以指定 100 个排除网址格式,以避免在扫描期间测试网站的某些部分。Web Security Scanner 不会请求与任何排除项匹配的资源。以下部分介绍了 Web Security Scanner 使用的格式匹配。

网址格式匹配

排除的网址匹配基于由匹配格式定义的一组网址。匹配格式是包含 5 个分段的网址:

  • scheme:例如 http*
  • host:例如 www.google.com*.google.com*
  • path:例如 /*/foo*/foo/bar. *
  • query:例如 ?*?*foo=bar*
  • fragment:例如 #*#access

以下是基本语法:

<exclude-pattern> := <scheme>://<host><path><query><fragment>
<scheme> := '*' | 'http' | 'https'
<host> := '*' | '*.' <any char except '/' and '*'>+
<path> := '/' <any chars except '?' or '#'>
<query> := '?' <any chars except '#'>
<fragment> := '#' <any chars>

每个部分中的 * 具有以下函数:

  • scheme* 与 HTTP 或 HTTPS 匹配。
  • host
    • * 与任何主机都匹配
    • *.hostname 与指定的主机及其所有子网域匹配。
  • path* 与 0 个或多个字符匹配。

排除格式不需要所有分段。

  • 如果未指定 scheme 分段,则默认为 *://
  • 必须始终指定 host 分段。
  • 如果未指定 path 分段,则默认为:
    • /*(如果未指定 queryfragment 分段)。此值与任何 path 都匹配或与 path 不匹配。
    • / 或者为空的 path(如果指定了 queryfragment 分段)。
  • 如果未指定 query 分段,则默认为:
    • ?*(如果未指定 fragment 分段)。此值与任何 query 都匹配或与 query 不匹配。
    • ? 或者为空的 query(如果指定了 fragment)。
  • 如果未指定 fragment 分段,则默认为 #*,其与任何 fragment 都匹配或与 fragment 不匹配。

有效的格式匹配

下表提供了有效格式的示例:

格式 行为 示例匹配网址
http://*/* 匹配使用 HTTP 架构的所有网址。

http://www.google.com/

http://example.org/foo/bar.html

http://*/foo* 如果路径以 /foo 开头,则匹配任何主机上使用 HTTP 架构的任何网址。

http://example.com/foo/bar.html

http://www.google.com/foo

https://*.google.com/foo*bar 如果路径以 /foo 开头并以 bar 结尾,则匹配使用 HTTPS 架构且位于 google.com 主机上的任何网址(例如 www.google.comdocs.google.comgoogle.com)。

http://www.google.com/foo/baz/bar

http://docs.google.com/foobar

http://example.org/foo/bar.html 匹配指定的网址。 http://example.org/foo/bar.html
http://127.0.0.1/* 匹配主机 127.0.0.1 上使用 HTTP 架构的所有网址。

http://127.0.0.1/

http://127.0.0.1/foo/bar.html

*://mail.google.com/* 匹配以 http://mail.google.comhttps://mail.google.com 开头的任何网址。

http://mail.google.com/foo/baz/bar

https://mail.google.com/foobar

*://*/foo*?*bar=baz* 匹配路径以 /foo 开头且查询参数为 bar=baz 的所有网址。 https://www.google.com/foo/example?bar=baz
google.com/app#*open* 匹配使用主机 google.com 且其中的路径以 /app 开头,且片段为 open 的网址。 https://www.google.com/app/example#open

无效的格式匹配

下表提供了无效格式的示例:

格式 原因
http://www.google.com 网址不包含路径。
http://*foo/bar 主机中的 * 必须后跟 ./
http://foo.*.bar/baz 如果 * 位于主机中,则它必须是第一个字符。
http:/bar 网址为架构分隔符,格式不正确。"/" 应为 "//"
foo://* 网址架构无效。

后续步骤