使用 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 设置页面
第 1 步:部署测试应用
要针对自定义扫描完成 Web Security Scanner 设置,您需要 Compute Engine、Google Kubernetes Engine (GKE) 或 App Engine 应用 部署的 Pod如果您没有已部署的应用,或者想要通过测试应用试用 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 security source、扫描结果 可在 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。
- 前往 “Web Security Scanner”页面 Google Cloud 控制台中。
- 在身份验证下,选择 Identity-Aware Proxy Alpha 版。
- 在 OAuth2 客户端 ID 框中,粘贴您复制的 OAuth 客户端 ID,然后点击保存。
身份验证 > 非 Google 账号 如果您已创建自己的身份验证系统,但未使用 Google 账号服务,请选择此选项。指定 登录表单的网址、用户名和密码这些凭据 登录您的应用并进行扫描。
Web Security Scanner 会尝试使用启发法登录您的应用并扫描该应用。具体而言,此方法会查找两个 字段 login-form,包含
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 且包含 fragment open 。
|
https://www.google.com/app/example#open |
无效的格式匹配
下表提供了无效格式的示例:
格式 | 原因 |
---|---|
http://www.google.com |
网址不包含路径。 |
http://*foo/bar |
主机中的 * 后面必须跟 . 或 / 。 |
http://foo.*.bar/baz |
如果主机中有 * ,则它必须是第一个字符。 |
http:/bar |
网址为架构分隔符,格式不正确。"/" 应为 "//" 。 |
foo://* |
网址架构无效。 |