Web Security Scanner 概览

Web Security Scanner 可识别 App Engine、Google Kubernetes Engine(GKE)和 Compute Engine Web 应用中的安全漏洞。它会抓取您的应用,跟踪起始网址范围内的所有链接,并尝试执行尽可能多的用户输入和事件处理程序。Web Security Scanner 仅支持不受防火墙保护的公共网址和 IP。

Web Security Scanner 支持 App Engine 标准环境和 App Engine 柔性环境、Compute Engine 实例和 GKE 资源。

Web Security Scanner 旨在完善您现有的安全设计和开发流程。为避免出现误报让您分心,Web Security Scanner 会在报告不足的一侧提供错误提示,而且不会显示可信度较低的提醒。此工具不能取代手动安全审查,也不能保证您的应用没有安全缺陷。

扫描类型

Web Security Scanner 为公共 App Engine、GKE 和 Compute Engine 服务的 Web 应用提供代管式和自定义的 Web 漏洞扫描。

代管式扫描

Web Security Scanner 代管式扫描由 Security Command Center 配置和管理。每周自动运行代管式扫描,以检测和扫描公共 Web 端点。这些扫描不使用身份验证,而是发送仅限 GET 的请求,因此他们无需在实际网站上提交任何表单。

代管式扫描与自定义扫描分开运行。

如果在组织级层激活 Security Command Center,您可以使用代管式扫描来集中管理组织中项目的基本 Web 应用漏洞检测,而不需要各个项目团队参与。发现结果后,您可以与这些团队合作,以设置更全面的自定义扫描。

启用 Web Security Scanner 作为服务后,Security Command Center 漏洞页面和相关报告会自动显示代管式扫描发现结果。如需了解如何启用 Web Security Scanner 代管式扫描,请参阅配置 Security Command Center 服务

托管式扫描仅支持使用默认端口的应用,HTTP 连接的默认端口为 80,HTTPS 连接的默认端口为 443。如果您的应用使用非默认端口,请改为执行自定义扫描。

自定义扫描

Web Security Scanner 自定义扫描可提供有关应用漏洞发现结果的详细信息,例如过时的库、跨站脚本攻击或混合内容的使用。

您需要在项目级层定义自定义扫描。

完成设置 Web Security Scanner 自定义扫描的指南后,在 Security Command Center 中可获取自定义扫描发现结果。

扫描发现结果

本部分介绍了 Web Security Scanner 发现类型和相关合规性标准。

检测器与合规性

Web Security Scanner 支持 OWASP 十大类别中的类别,该文档根据开放式 Web 应用安全项目 (OWASP) 对前 10 个最重要的 Web 应用安全风险进行排名并提供补救指南。

合规性映射仅供参考,并非由 OWASP 基金会提供或审核。此功能仅用于监控合规性控制的违规行为。您不应将提供的映射作为针对产品或服务的监管、行业基准或标准合规性的审计、认证或报告的基础或替代方案。

如需详细了解合规性,请参阅评估和报告安全基准合规性

发现类型

Web Security Scanner 自定义和代管式扫描可识别以下发现结果类型。在标准层级中,Web Security Scanner 支持对公共网址和 IP 不受防火墙保护的已部署应用进行自定义扫描。

类别 发现结果说明 OWASP 2017 年排名前 10 OWASP 2021 年排名前 10

Accessible Git repository

API 中的类别名称:ACCESSIBLE_GIT_REPOSITORY

Git 代码库被公开。如需解决此发现结果,请移除对 Git 代码库的意外公开访问权限。

价格层级付费方案或标准方案

修正此发现结果

A5 A01

Accessible SVN repository

API 中的类别名称:ACCESSIBLE_SVN_REPOSITORY

SVN 代码库会公开。如需解决此发现结果,请移除对 SVN 代码库的意外公开访问权限。

价格层级付费方案或标准方案

修正此发现结果

A5 A01

Cacheable password input

API 中的类别名称:CACHEABLE_PASSWORD_INPUT

在 Web 应用中输入的密码可以缓存在常规浏览器的缓存中,而不是安全的密码存储空间中。

价格层级付费方案

修正此发现结果

A3 A04

Clear text password

API 中的类别名称:CLEAR_TEXT_PASSWORD

密码以明文形式传输,可以被拦截。要解决此发现结果,请对通过网络传输的密码进行加密。

价格层级付费方案或标准方案

修正此发现结果

A3 A02

Insecure allow origin ends with validation

API 中的类别名称:INSECURE_ALLOW_ORIGIN_ENDS_WITH_VALIDATION

跨站点 HTTP 或 HTTPS 端点仅验证 Origin 请求标头的后缀,然后将其呈现在 Access-Control-Allow-Origin 响应标头内。若要解决此问题,请先验证预期的根网域是否是 Origin 标头值的一部分,然后再将其反映在 Access-Control-Allow-Origin 响应标头中。对于子网域通配符,请在根域名前面附加英文句点,例如 .endsWith(".google.com")

价格层级付费方案

修正此发现结果

A5 A01

Insecure allow origin starts with validation

API 中的类别名称:INSECURE_ALLOW_ORIGIN_STARTS_WITH_VALIDATION

跨站点 HTTP 或 HTTPS 端点仅验证 Origin 请求标头的前缀,然后将其呈现在 Access-Control-Allow-Origin 响应标头内。如需解决此发现结果,请先验证预期网域是否与 Origin 标头值完全匹配,然后再将其呈现在 Access-Control-Allow-Origin 响应标头内,例如 .equals(".google.com")

价格层级付费方案

修正此发现结果

A5 A01

Invalid content type

API 中的类别名称:INVALID_CONTENT_TYPE

加载的资源与响应的 Content-Type HTTP 标头不匹配。 如需解决此发现结果,请使用正确的值设置 X-Content-Type-Options HTTP 标头。

价格层级付费方案或标准方案

修正此发现结果

A6 A05

Invalid header

API 中的类别名称:INVALID_HEADER

安全标头存在语法错误,因此被浏览器忽略。要解决此发现结果,请正确设置 HTTP 安全标头。

价格层级付费方案或标准方案

修正此发现结果

A6 A05

Mismatching security header values

API 中的类别名称:MISMATCHING_SECURITY_HEADER_VALUES

安全标头具有重复的、不匹配的值,这会导致未定义的行为。 要解决此发现结果,请正确设置 HTTP 安全标头。

价格层级付费方案或标准方案

修正此发现结果

A6 A05

Misspelled security header name

API 中的类别名称:MISSPELLED_SECURITY_HEADER_NAME

安全标头拼写错误并且被忽略。要解决此发现结果,请正确设置 HTTP 安全标头。

价格层级付费方案或标准方案

修正此发现结果

A6 A05

Mixed content

API 中的类别名称:MIXED_CONTENT

资源是通过 HTTPS 页面上的 HTTP 提供的。要解决此发现结果,请确保所有资源通过 HTTPS 传送。

价格层级付费方案或标准方案

修正此发现结果

A6 A05

Outdated library

API 中的类别名称:OUTDATED_LIBRARY

检测到有已知漏洞的库。要解决此发现结果,请将库升级到新版本。

价格层级付费方案或标准方案

修正此发现结果

A9 A06

Server side request forgery

API 中的类别名称:SERVER_SIDE_REQUEST_FORGERY

检测到服务器端请求伪造 (SSRF) 漏洞。要解决此发现结果,请使用许可名单限制 Web 应用可以向其发出请求的网域和 IP 地址。

价格层级付费方案或标准方案

修正此发现结果

不适用 A10

Session ID leak

API 中的类别名称:SESSION_ID_LEAK

在发出跨网域的请求时,Web 应用的 Referer 请求标头中包含用户的会话标识符。此漏洞会向接收网域授予会话标识符的访问权限,可用于假冒或唯一标识用户。

价格层级付费方案

修正此发现结果

A2 A07

SQL injection

API 中的类别名称:SQL_INJECTION

检测到潜在的 SQL 注入漏洞。如需解决此发现结果,请使用参数化查询以防止用户输入影响 SQL 查询的结构。

价格层级付费方案

修正此发现结果

A1 A03

Struts insecure deserialization

API 中的类别名称:STRUTS_INSECURE_DESERIALIZATION

检测到使用易受攻击的 Apache Struts 版本。如需解决此发现结果,请将 Apache Strut 升级到最新版本。

价格层级付费方案

修正此发现结果

A8 A08

XSS

API 中的类别名称:XSS

此 Web 应用中的字段容易受到跨站脚本 (XSS) 攻击。要解决此发现结果,请验证和转义不受信任的用户提供的数据。

价格层级付费方案或标准方案

修正此发现结果

A7 A03

XSS angular callback

API 中的类别名称:XSS_ANGULAR_CALLBACK

用户提供的字符串没有转义,并且 AngularJS 可以对其进行插入。要解决此发现结果,请验证和转义 Angular 框架处理的不受信任用户提供的数据。

价格层级付费方案或标准方案

修正此发现结果

A7 A03

XSS error

API 中的类别名称:XSS_ERROR

此 Web 应用中的字段容易受到跨站脚本攻击。要解决此发现结果,请验证和转义不受信任的用户提供的数据。

价格层级付费方案或标准方案

修正此发现结果

A7 A03

XXE reflected file leakage

API 中的类别名称:XXE_REFLECTED_FILE_LEAKAGE

检测到 XML 外部实体 (XXE) 漏洞。此漏洞可能会导致 Web 应用泄露主机上的文件。如需解决此发现结果,请配置 XML 解析器以禁止外部实体。

价格层级付费方案

修正此发现结果

A4 A05

Prototype pollution

API 中的类别名称:PROTOTYPE_POLLUTION

该应用容易受到原型污染的影响。如果可以为 Object.prototype 对象的属性分配攻击者可控制的值,就会出现此漏洞。在这些原型上植入的值普遍被认为会转换为跨站脚本攻击,或类似的客户端漏洞以及逻辑 bug。

价格层级付费方案或标准方案

修正此发现结果

A1 A03

使用警告

Security Command Center 的 IAM 角色可以在组织、文件夹或项目级层授予。您能否查看、修改、创建或更新发现结果、资产和安全来源,取决于您获授予的访问权限级别。如需详细了解 Security Command Center 角色,请参阅访问权限控制

使用 Web Security Scanner 时还需要注意以下一些重要事项:

  • 由于 Web Security Scanner 正在不断改进,因此将来的扫描可能会报告当前扫描未报告的问题。
  • 您的应用的某些功能或部分可能未经过测试。
  • Web Security Scanner 尝试激活它找到的每个控件和输入。
  • 如果您公开了测试账号具有权限的状态更改操作,则 Web Security Scanner 可能会激活这些操作。这可能会导致不良结果。
  • Web Security Scanner 的每个项目最多只能进行 15 项扫描。由于扫描会并发运行,因此建议达到此上限的用户为每项扫描添加多个起始网址,或者将扫描添加到尚未达到此上限的其他项目中。

谁可以运行安全扫描?

如需了解适用于 Web Security Scanner 的 Identity and Access Management (IAM) 角色,请参阅访问权限控制

安全扫描需要多长时间?

安全扫描不会立即执行。它会加入队列,稍后执行,也可能会在几小时后再执行,具体取决于系统负载。扫描开始执行后,所需时间取决于应用的大小。 扫描包含很多网址的大型应用可能需要数小时甚至数天的时间。如果扫描未在 20 天内完成,系统会自动停止扫描,并且扫描期间找到的所有抓取结果和发现都将显示为扫描结果。

目标限制

您可以使用 Web Security Scanner 的过滤条件,将扫描目标限制为针对其创建扫描的特定 App Engine 实例。输入不同 App Engine 项目或外部网域的网址将导致错误消息。

Compute Engine 和 GKE 的扫描仅限于映射到为同一项目预留的静态外部 IP 地址以及属于同一项目的静态外部 IP 地址的网域。如需了解如何预留项目 IP 地址,请参阅以下链接:

App Engine 不提供将静态 IP 地址映射到应用的方法。不过,您可以使用 Cloud Load Balancing 和无服务器网络端点组来为负载均衡器预留静态 IP 地址,以便将流量定向到您的应用。如需了解价格,请参阅外部 IP 地址价格

在您的项目中,Web Security Scanner 会自动尝试避开注销网址和可能对扫描产生负面影响的其他通用位置。然而,为保险起见,您可以使用扫描设来手动排除网址

验证

扫描配置将在创建时以及每次扫描之前验证。Web Security Scanner 会检查 Security Command Center 设置和应用的身份验证凭据,以确保扫描正确配置并可成功登录应用。还会检查配置参数(包括最大扫描速度),以确保它们在支持的范围内。

您必须先解决错误,然后才能创建或更新扫描。在初始配置后发生更改的应用可能会在扫描期间产生错误。例如,如果某个网域不再指向项目拥有的 IP 地址,则该资源将不会被扫描,并且扫描配置页面上将报告错误。

最佳做法

由于 Web Security Scanner 会填充字段、按下按钮、点击链接以及执行其他用户操作,因此您应谨慎使用,尤其是扫描生产资源时。Web Security Scanner 可能会潜在激活更改数据或系统状态的功能,造成不良后果。

例如:

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

为避免产生不必要的后果,可单独或组合使用以下技术:

  1. 在测试环境中运行扫描。 通过创建单独的 App Engine 项目并在其中加载应用和数据来设置测试环境。如果您使用 Google Cloud CLI,则可以在上传应用时将目标项目指定为命令行选项。
  2. 使用测试账号。 创建一个不会访问敏感数据或有害操作的用户账号,并使用该账号进行应用扫描。很多应用会在用户首次登录期间提供特殊工作流程,如接受条款和创建个人资料。由于工作流程不同,因此初始用户的测试账号可能产生与已建立的用户账号不同的扫描结果。在第一次流程完成后,最好使用处于正常用户状态的账号进行扫描。
  3. 通过应用 CSS 类 inq-no-click屏蔽不希望激活的个别界面元素。附加到此元素的事件处理脚本不会在抓取和测试期间被激活,无论它们是内嵌 JavaScript、使用 addEventListener 附加还是通过设置适当的事件处理脚本属性进行附加。
  4. 使用备份数据。 考虑在扫描之前备份数据。
  5. 排除的网址。您可以指定不会被抓取或测试的网址格式。如需了解语法,请参阅排除网址

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

后续步骤