使用 Google Cloud 控制台中的 Web Security Scanner 对已部署的应用安排和运行自定义扫描。Web Security Scanner 支持扫描不受防火墙保护的公共网址和 IP。
准备工作
要使用 Web Security Scanner 设置自定义扫描,请执行以下操作:
- 您必须在公共网址和 IP 上具有已部署的应用。 Web Security Scanner 仅支持使用 IPv4 的网站。使用 IPv6 的网站不会被扫描。
- 您必须启用 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) 角色之一:
- 编辑者
- 所有者
要添加其中一个角色,请执行以下操作:
- 打开Google Cloud 控制台中的 IAM 和管理页面。 
- 点击项目选择器下拉列表。 
- 在显示的请选择对话框中,选择要使用 Web Security Scanner 扫描的项目。 
- 在 IAM 页面,点击用户名旁边的修改。 
- 在显示的修改权限面板上,点击添加其他角色,然后选择以下角色之一: - 项目 > 所有者
- 项目 > 编辑者
 
- 添加完角色后,点击保存。 
详细了解 Web Security Scanner 角色。
第 3 步:执行扫描任务
设置扫描时,其会排队等待运行。根据当前负载,可能需要几个小时才能执行扫描。如需创建、保存和运行扫描,请执行以下操作:
- 进入 Google Cloud 控制台中的 Web Security Scanner 页面。 
- 选择包含您要扫描的已部署应用的项目。 
- 要设置新的扫描,请点击新建扫描: 
- 在加载的创建新扫描页面上,设置以下值: - 在起始网址下,输入您要扫描的应用的网址。
- 在时间表下,选择每周。
- 在下次运行时间下,选择一个日期。
 - 系统会自动选中导出到 Security Command Center 复选框。如果您已启用 Web Security Scanner 作为 Security Command Center 安全来源,则扫描结果会显示在 Google Cloud 控制台的发现结果问题页面上。 - 对于第一次扫描,请使用默认扫描,而不更改创建新扫描页面上的任何其他值。如需详细了解扫描设置,请参阅扫描应用。 
- 要创建扫描,请点击保存。 
- 在 Web Security Scanner 页面上,点击扫描名称以加载其概览页面,然后点击运行扫描。 - 扫描将加入队列,然后在将来的某个时间运行。 扫描可能需要几个小时才能完成。 
- 扫描概览页面会在扫描完成后显示结果部分。下图展示了未检测到漏洞时的示例扫描结果:  - 如果您启用了 Web Security Scanner 作为 Web Security Scanner 安全来源,则 Google Cloud 控制台上也会显示扫描结果。 - 要显示特定发现的详细信息,请点击扫描结果中的发现名称。 
您现已完成基本的 Web Security Scanner 扫描。如果您扫描了自己的应用,请在本页的扫描应用部分了解如何自定义扫描。
如果您部署了测试应用来运行扫描,请完成此页面上的清理步骤,以避免因该应用而产生 App Engine 费用。
第 4 步:清理
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
扫描应用
使用测试账号为您的应用设置自定义扫描。
第 1 步:创建测试账号
扫描您的应用时,最好使用无权访问敏感数据或有害操作的测试账号。创建可以登录您的应用的测试账号,并在创建扫描时记下登录凭据以提供身份验证。该凭据允许您使用测试账号扫描数据。
第 2 步:创建扫描
- 进入 Google Cloud 控制台中的 Web Security Scanner 页面。 
- 点击选择,然后选择已部署 App Engine、Compute Engine 或 GKE 应用的项目。 
- 要显示新建扫描表单,请点击创建扫描或新建扫描。 
- 要向新建扫描表单添加值,请使用下表作为指南: - 字段 - 说明 - 起始网址 - 基本的网站通常只需要一个起始网址(例如该网站的首页、主页面或着陆页),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 服务账号授予访问权限: - 前往 Google Cloud 控制台中的 IAP 页面。
- 选择要与 Web Security Scanner 一起使用的项目。
- 选择要扫描的应用资源,然后点击信息面板上的添加主账号。
- 在添加主账号面板上的新的主账号框中,输入 service-project-number@gcp-sa-websecurityscanner.iam.gserviceaccount.com格式的 Web Security Scanner 服务账号。
- 在选择角色下拉列表中,选择 Cloud IAP > 受 IAP 保护的 Web 应用用户。
- 添加完角色后,点击保存。
 - 接下来,将 OAuth 客户端 ID 添加到扫描中。Web Security Scanner 只能扫描受单个 OAuth 客户端 ID 保护的应用。要添加 OAuth 客户端 ID,请执行以下操作: - 前往 Google Cloud 控制台中的 IAP 页面。
- 选择要与 Web Security Scanner 一起使用的项目。
- 在溢出菜单上,选择修改 OAuth 客户端。
- 在出现的 Web 应用客户端 ID 窗口中,复制客户端 ID。
- 进入 Google Cloud 控制台中的 Web Security Scanner 页面。
- 在身份验证下,选择 Identity-Aware Proxy Alpha 版。
- 在 OAuth2 客户端 ID 框中,粘贴您复制的 OAuth 客户端 ID,然后点击保存。
 - 身份验证 > 非 Google 账号 - 如果您已创建自己的身份验证系统,但未使用 Google 账号服务,请选择此选项。指定登录表单的网址、用户名和密码。这些凭证用于登录和扫描您的应用。 - Web Security Scanner 会尝试使用启发法登录您的应用并扫描该应用。具体来说,此方法会查找包含 - username字段和- password字段的两个字段登录表单。登录操作必须生成身份验证 Cookie,扫描程序才能继续扫描。- 常见问题会导致自定义登录失败,包括: - 使用非标准 HTML 表单字段,例如,不使用 password类型。
- 使用复杂的登录表单,例如包含多个 username和password字段的表单。
- 成功登录后不保存身份验证 Cookie。
- 在某些情况下,扫描程序可能会被旨在防范漫游器、DDoS 攻击和其他攻击的对抗措施拒绝。
 - 我们建议使用 Identity-Aware Proxy 集成,以获得经过身份验证的应用扫描的最一致体验。 - 时间表 - 您可以将扫描设置为每天、每周、每两周或每四周运行一次。最好创建定期扫描,以确保未来版本的应用得到测试。此外,由于我们偶尔会发布可以找到新错误类型的新扫描程序,因此定期运行扫描可以扫描更多覆盖范围,而无需手动操作。 - 从一组预定义的来源 IP 地址运行扫描(预览版) - 选择此选项可以将扫描流量限制为一组预定义 IP 地址。这样,扫描程序就可以访问受防火墙保护的应用,但可能会限制扫描范围。要修改防火墙规则以允许 Web Security Scanner 流量,请参阅本页面后面的配置防火墙。 - 导出选项 - 选择此选项可自动将扫描配置和扫描结果导出到 Security Command Center。 - 忽略 HTTP 状态错误 - 此选项可以控制扫描过程中有大量 HTTP 状态错误(例如 **400 错误请求**)是否会导致扫描报告为失败。如果选择此选项,系统会忽略状态错误。如果未选择此选项,并且状态错误的百分比超过预定阈值,则扫描会报告为失败。 
- 添加值后,点击保存。您现在可以运行新的扫描。 
默认情况下,Web Security Scanner 在每次运行期间使用随机分配的 IP 地址。如需使 Web Security Scanner IP 地址可预测,请完成本页面后面的启用静态 IP 扫描部分的操作。
第 3 步:运行扫描
要运行扫描,请执行以下操作:
- 登录您用于创建扫描的测试账号。
- 进入 Google Cloud 控制台中的 Web Security Scanner 页面。 
- 点击选择,然后选择要在其中创建扫描的项目。 
- 在扫描配置下,点击要运行的扫描的名称。 
- 在扫描详情页面上,点击运行。 
此扫描会放入队列中,并且在运行之前可能会有延迟。运行可能需要几分钟或几个小时,具体取决于系统负载和功能,如:
- 网站复杂性
- 每页可操作元素的数量
- 链接数量
- 网站上的 JavaScript 数量,包括导航
您设置并运行的不同扫描数量达到 10 个,则需要删除或清理以前保存的结果。
查看自定义扫描结果
自定义扫描的状态和结果显示在 Google Cloud 控制台中的扫描详情页面上。如需查看扫描结果,请执行以下操作:
- 登录您用于创建扫描的测试账号。
- 进入 Google Cloud 控制台中的 Web Security Scanner 页面。 
- 点击选择,然后选择包含您要查看的扫描的项目。 
- 在扫描配置下,点击要查看的扫描的名称。 
扫描详情页面会加载并显示最近扫描的结果。如果扫描正在进行中,结果标签页将显示当前完成百分比。要显示先前扫描的结果,请从下拉列表中选择扫描日期和时间。
已完成的自定义扫描的详细信息:
- 结果标签页会显示扫描结果的漏洞列表(如果有)。
- 已抓取的网址标签会显示扫描检查的网址列表。
- 详细信息标签页包括: - 起始网址
- 身份验证
- 用户代理
- 最大扫描速度即每秒查询次数 (QPS)
 
您可以在日志页面中找到关于扫描的更多信息。
修改自定义扫描
要修改自定义扫描,请执行以下操作:
- 登录您用于创建扫描的测试账号。
- 进入 Google Cloud 控制台中的 Web Security Scanner 页面。 
- 点击选择,然后选择包含您要修改的扫描的项目。 
- 在扫描配置下,点击要修改的扫描的名称。 
- 在显示的扫描详情页面上,点击修改。 
- 在显示的修改 [扫描名称] 页面上,进行所需的更改,然后点击保存。 
修改后的自定义扫描会在下一次安排运行时运行,您也可以手动运行以获取更新结果。
删除自定义扫描
要删除一个或多个自定义扫描,请执行以下操作:
- 登录您用于创建扫描的测试账号。
- 进入 Google Cloud 控制台中的 Web Security Scanner 页面。 
- 点击选择,然后选择包含您要修改的扫描的项目。 
- 在扫描配置下,选中要删除的一个或多个扫描旁边的复选框。 
- 点击删除,然后点击确定。 
您选择的所有扫描都将被删除。
从静态 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 步:配置防火墙
- 在 Google Cloud 控制台中,打开防火墙规则页面。 
- 点击选择,然后选择您的项目。 
- 在显示的防火墙规则页面上,点击创建防火墙规则。 
- 在创建防火墙规则页面上,设置以下值: - 名称:输入 web-security-scanner或类似名称。
- 优先级:选择比拒绝应用出站流量的所有规则更高的优先级(较低的数值)。
- 来源 IP 地址范围:输入 34.66.18.0/26和34.66.114.64/26。
- 协议和端口:选择全部允许或指定应用的协议和端口。通常,您可以选中 tcp 复选框,然后输入端口 80和443。
 
- 名称:输入 
- 设置完值后,点击创建。 
第 2 步:配置扫描
在配置防火墙以允许 Web Security Scanner 可预测的 IP 地址后,请配置扫描以使用预定义的 IP:
- 进入 Google Cloud 控制台中的 Web Security Scanner 页面。 
- 点击选择,然后选择您的项目。 
- 创建新扫描或修改现有扫描。 
- 选中从一组预定义的来源 IP 运行扫描复选框。 
- 保存扫描。 
下次扫描运行时,它会扫描受防火墙保护的公共 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分段,则默认为:- /*(如果未指定- query和- fragment分段)。此值与任何- path都匹配或与- path不匹配。
- 为 /或者为空的path(如果指定了query或fragment分段)。
 
- 如果未指定 - query分段,则默认为:- ?*(如果未指定- fragment分段)。此值与任何- query都匹配或与- query不匹配。
- 为 ?或者为空的query(如果指定了fragment)。
 
- 如果未指定 - fragment分段,则默认为- #*,其与任何- fragment都匹配或与- fragment不匹配。
有效的格式匹配
下表提供了有效格式的示例:
| 模式 | 行为 | 示例匹配网址 | 
|---|---|---|
| http://*/* | 匹配使用 HTTP 架构的所有网址。 | 
 
 | 
| http://*/foo* | 匹配任何主机上使用 HTTP 架构的网址(如果路径以 /foo开头)。 | 
 
 | 
| https://*.google.com/foo*bar | 匹配使用 HTTPS 架构且位于 google.com主机上(例如www.google.com、docs.google.com或google.com)的所有网址(如果路径以/foo开头并以bar结尾)。 | 
 
 | 
| http://example.org/foo/bar.html | 匹配指定的网址。 | http://example.org/foo/bar.html | 
| http://127.0.0.1/* | 匹配主机 127.0.0.1上使用 HTTP 架构的所有网址。 | 
 
 | 
| *://mail.google.com/* | 匹配以 http://mail.google.com或https://mail.google.com开头的所有网址。 | 
 
 | 
| *://*/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://* | 网址架构无效。 |