使用 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) 角色之一:
- 编辑器
- 所有者
要添加其中一个角色,请执行以下操作:
转到 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 一起使用的项目。
- 选择要扫描的应用资源,然后点击信息面板上的添加主账号。
-
在添加主账号面板的新主账号框中,输入以下格式的 Web Security Scanner 服务账号:
service-project-number@gcp-sa-websecurityscanner.iam.gserviceaccount.com
。 - 在选择角色下拉列表中,依次选择 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 集成,以获得经过身份验证的应用扫描的最一致体验。
时间表 您可以将扫描设置为每天、每周、每两周或每四周运行一次。最好创建定期扫描,以确保未来版本的应用得到测试。此外,由于我们偶尔会发布可以找到新 bug 类型的新扫描程序,因此定期运行扫描可以扫描更多覆盖范围,而无需手动操作。 根据一组预定义的来源 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://* |
网址架构无效。 |