BigQuery 威胁模型报告

上次更新时间:2026 年 4 月 16 日

本文档针对 BigQuery 的数据机密性、完整性和可用性,确定了潜在的攻击媒介和缓解策略。此报告的范围仅限于您的视角,重点关注您可以在 BigQuery 环境中管理的风险。

这些威胁模型是基于当前已知的攻击途径、架构假设和发布时指定的系统范围进行的概率评估。这些模型并非详尽无遗,旨在为 Google Cloud 客户的安全和风险评估提供基准,并指导风险降低决策。

针对此服务,我们发现了以下威胁:

威胁详情

以下各部分将分别介绍每种威胁、其表现以及建议的缓解措施。

使用架构篡改来销毁数据

如果攻击者拥有修改表架构的权限,可能会导致潜在的数据丢失,或使下游应用无法使用该表。这种形式的篡改针对的是数据的元数据和结构,其破坏性与修改数据本身一样严重。

STRIDE 类别

篡改

MITRE ATT&CK 策略

影响

玻璃贴纸

恶意架构更新:具有 bigquery.tables.update 权限的主账号可以对 BigQuery 表调用 tables.patch API 方法来更改其架构。更改列数据类型可能会损坏数据或导致信息丢失,从而可能导致客户端应用或商业智能工具中的查询中断,最终导致下游报告失去可信度。

缓解措施

严格限制 bigquery.tables.update 权限,该权限是 roles/bigquery.dataOwner 等角色的一部分。仅向负责管理架构迁移的少量管理员或自动化 CI/CD 服务账号授予此权限。启用 BigQuery 表备份或使用表快照,以便从意外或恶意架构更改中恢复。监控 Cloud Audit Logs 中的 tables.patch API 调用,并针对在计划维护窗口之外进行的任何更改发出提醒。

利用 IAM 允许政策篡改进行提权

如果攻击者入侵了具有修改 BigQuery IAM 允许政策权限的正文,则可以提升其权限,从而完全控制数据资源。这种威胁可让攻击者绕过现有的访问权限控制,授予对敏感数据的读取、修改或删除权限。

STRIDE 类别

提权

MITRE ATT&CK 策略

提升权限

玻璃贴纸
  • 数据集政策修改:具有 bigquery.datasets.update 权限的主账号可以对 BigQuery 数据集调用 datasets.patch API 方法,以将自己的身份添加到所有者角色,从而获得对该数据集内所有资源的完全控制权。

  • 服务账号模拟:如果某个身份对服务账号具有 iam.serviceAccounts.actAs 权限,则可以将该服务账号附加到其他资源(例如 Compute Engine 实例),以使用所附加服务账号的身份运行代码。或者,具有 iam.serviceAccounts.getAccessToken 权限的身份可以为该服务账号生成访问令牌。如果目标服务账号对 BigQuery 资源拥有提升的权限,攻击者实际上会继承这些权限。

缓解措施

严格限制允许修改 IAM 允许政策的权限(例如 bigquery.datasets.update,该权限是 roles/bigquery.dataOwner 等角色的一部分)。仅将这些角色分配给最少数量的可信管理员。同样,请严格控制有权以服务账号身份行事或模拟服务账号的 IAM 角色,并将这些角色的范围限定为需要这些角色的特定正文。监控 Cloud Audit Logs 中的 SetIamPolicydatasets.patch API 调用,以检测未经授权的政策更改。

使用 BigQuery 触发的下游服务滥用“confused-deputy”

攻击者拥有有限的 BigQuery 权限,但创建的作业或查询会触发下游服务(例如 Cloud Function、Dataflow 作业或 Cloud Composer DAG),而这些服务以更高的权限运行。下游服务在认为自己正代表 BigQuery 执行合法操作时,实际上是被诱骗对其他资源或使用与系统设计者预期不同的数据执行操作。

STRIDE 类别

提权

MITRE ATT&CK 策略

提升权限

玻璃贴纸
  • 恶意函数触发:BigQuery 更改触发了具有广泛权限的 Cloud Function,攻击者操纵 BigQuery 数据来控制该函数的行为。

  • Dataflow 流水线利用:将 BigQuery 查询结果用作 Dataflow 作业的输入,攻击者写入查询结果,导致 Dataflow 作业注入中毒数据。

缓解措施

对由 BigQuery 触发的下游服务所使用的服务账号应用最小权限原则。确保这些服务验证并清理从 BigQuery 作业收到的任何输入或参数。使用 VPC Service Controls 限制网络路径和服务互动。设计下游服务时,请勿在未验证的情况下固有地信任来自 BigQuery 的输入。

使用不受限制的网络出站流量进行数据渗漏

如果未实施网络级安全控制措施,遭入侵的内部主账号可以访问 BigQuery,并将敏感数据泄露到互联网上的任意位置。即使有强大的 IAM 控制措施,但如果没有网络边界,已获得有效凭据的攻击者仍可绕过基于位置的防御措施,并将数据传输到受信任的环境之外。

STRIDE 类别

信息披露

MITRE ATT&CK 策略

渗漏

玻璃贴纸
  • 通过不受信任的网络进行 API 访问:攻击者使用遭入侵的凭据从外部机器连接到公共 BigQuery API 或 BigQuery Storage Read API,从而绕过为本地主机或用户设备配置的网络控制。

  • 导出到外部 Google Cloud 服务:具有 bigquery.jobs.create 和 Cloud Storage 权限的遭入侵服务账号执行查询,将结果导出到组织控制范围之外的公共 Cloud Storage 存储桶。

缓解措施

实施网络出站控制,以降低数据渗漏到任意外部服务的风险。围绕包含 BigQuery 资源的项目实现 VPC Service Controls 边界。此边界有助于限制数据渗漏到边界外的 Google Cloud 服务。为边界配置访问权限级别,以仅允许源自可信 IP 范围或特定 VPC 网络的 API 请求,从而有效防止数据在定义的安全边界之外被访问或移动。

使用中毒的参考表或查找表导致数据完整性漂移

攻击者拥有对参考表或查找表(例如维度表)的写入权限,并巧妙地修改这些表的内容。与这些被污染的表进行联接的查询会生成不正确且具有误导性的结果,从而损害下游分析和业务决策的完整性,而且可能不会出现任何明显的错误。

STRIDE 类别

篡改

MITRE ATT&CK 策略

影响

玻璃贴纸
  • 维度表操作:更改产品维度表中的键值或属性。

  • 查找损坏:更改对照表中的映射数据。

缓解措施

严格限制对参考表或查找表的写入权限 (bigquery.tables.updateData),仅允许可信的数据注入流程写入。实施数据质量检查和验证流水线。使用表快照或版本控制来跟踪更改并启用回滚。监控审核日志,查看这些关键表的更改。

使用恶意加载作业篡改数据

如果攻击者拥有足够的权限,则可以通过执行恶意加载作业来有意损坏或覆盖 BigQuery 表中的关键数据。这种威胁会损害数据的完整性,从而导致业务分析不正确、应用故障和客户信任度下降。

STRIDE 类别

篡改

MITRE ATT&CK 策略

影响

玻璃贴纸
  • 表覆盖:具有 bigquery.jobs.createbigquery.tables.updateData 权限的主账号启动写入处置设置为 WRITE_TRUNCATE 的加载作业,从而擦除所有现有数据并将其替换为来自外部来源的恶意数据。

  • 恶意附加数据:攻击者使用带有 WRITE_APPEND 的加载作业将垃圾数据或恶意数据注入现有表中,从而破坏分析,但不会删除原始记录。

缓解措施

应用最小权限原则。严格控制 bigquery.jobs.createbigquery.tables.updateData 等权限(可在 roles/bigquery.dataEditor 等角色中找到)。仅向可信的正文授予这些权限,并将其限定为特定数据集或表。监控 Cloud Audit Logs 中完成的加载作业,尤其是那些具有 WRITE_TRUNCATE 处理结果的作业,并针对来自意外用户或从不受信任的来源加载数据的作业创建提醒。

过多的 IAM 权限导致信息泄露

过于宽松的 IAM 角色可能会允许过度访问 BigQuery 表中存储的敏感数据。如果攻击者破解了具有广泛数据访问权限的主账号,则可能会窃取大量数据,导致严重的数据泄露。当授予 bigquery.tables.getDatabigquery.jobs.create 等权限的范围过大(例如,在项目级授予),而不是仅限于业务功能所需的特定数据集或表时,就会出现这种威胁。

STRIDE 类别

信息披露

MITRE ATT&CK 策略

渗漏

玻璃贴纸
  • 直接读取数据:具有 bigquery.tables.getData 权限的主账号可以使用 tabledata.list API 方法或高吞吐量的 BigQuery Storage Read API 直接从表中读取数据。

  • 基于查询的数据渗出:具有 bigquery.jobs.create 权限的正文可以使用 jobs.insertjobs.query 执行查询作业,以从其有权访问的任何表中读取数据,然后使用 jobs.getQueryResults 检索结果。

  • 公开可访问性:可以配置 BigQuery 数据集或 BigQuery 表的 IAM 允许政策,以通过向 allUsersallAuthenticatedUsers 等特殊正文授予角色来允许公开访问,从而将数据暴露给互联网。

缓解措施

针对所有 IAM 允许政策实施最小权限原则。授予所需的最低粒度级别的权限(例如,特定的 BigQuery 表或数据集),而不是项目级权限。使用仅包含特定任务所需权限(例如 bigquery.tables.getDatabigquery.jobs.create)的最小权限 IAM 角色。定期审核 IAM 允许政策,以找出在资源层次结构中的较高级别应用了过度宽松的角色(例如 roles/bigquery.dataViewerroles/bigquery.user)的情况。

使用转移到攻击者控制的云项目或账号的方式进行渗漏

攻击者利用 BigQuery 的数据移动功能(例如,将作业导出到 Cloud Storage、跨项目查询、BigQuery Data Transfer Service),将敏感数据从受保护的项目移动到其控制下的 Google Cloud 项目或其他云账号。

STRIDE 类别

信息披露

MITRE ATT&CK 策略

渗漏

玻璃贴纸
  • 导出到外部存储桶:使用导出作业将表数据保存到攻击者项目中的 Cloud Storage 存储桶。

  • 跨项目查询目标:运行查询并将目标表设置为攻击者控制的项目中的数据集。

缓解措施

实现 VPC Service Controls,为项目创建边界,防止数据流出到边界外的项目。严格控制 bigquery.tables.exportbigquery.jobs.create 等权限。使用组织政策限制条件来限制项目共享和创建。监控 Cloud Audit Logs,以查找目标位置超出预期项目边界的导出作业或查询。

因授权视图或行级安全性逻辑配置错误而导致信息披露

授权视图或行级安全政策的 SQL 逻辑存在缺陷,导致数据访问权限比预期更广泛。查询视图或表的用户可能会无意中访问他们不应看到的行或列,从而绕过预期的隔离。

STRIDE 类别

信息披露

MITRE ATT&CK 策略

集合

玻璃贴纸
  • 有缺陷的视图逻辑:已获授权视图的查询省略了基表中行级安全性政策中存在的必要 WHERE 子句。

  • 行级安全绕过:复杂的行级安全政策包含逻辑错误,导致访问权限比预期更广泛。

缓解措施

针对授权视图和行级安全政策中使用的 SQL 逻辑实施严格的代码审核流程。全面测试安全逻辑。限制创建或更新视图和行级安全政策的权限(例如 bigquery.tables.createbigquery.tables.updatebigquery.rowAccessPolicies.create)。定期审核现有视图和行级安全配置。遵循行级安全性的最佳实践。

通过公开或跨项目数据集暴露信息

敏感数据遭到泄露,原因在于 BigQuery 数据集被意外或恶意设为公开(例如,使用 allUsers 或 allAuthenticatedUsers),或者与预期信任边界之外的其他 Google Cloud 项目共享的范围过广。攻击者无需进行身份验证或使用任何经过身份验证的 Google 账号即可直接访问或复制数据。

STRIDE 类别

信息披露

MITRE ATT&CK 策略

渗漏

玻璃贴纸
  • 公开数据集:数据集的 IAM 允许政策向 allUsers 授予查看者权限。

  • 跨项目过度共享:数据集与外部组织或不受信任的项目中的服务账号共享。

缓解措施

针对数据集 IAM 允许政策实现最小权限原则。使用组织政策(例如 constraints/iam.allowedPolicyMemberDomains)将共享限制为仅限特定网域。定期使用 Security Command Center 审核数据集 IAM 允许政策,以检测公开或过于宽泛的权限。使用 VPC Service Controls 为包含敏感数据的项目创建边界,以防止未经授权的流出。

内部人员滥用已获授权的 BigQuery 访问权限(将合法查询用于恶意收集)

恶意内部人员拥有对 BigQuery 的合法访问权限,但他们会利用自己的授权权限来运行查询并收集敏感数据,以用于未经授权的目的(例如,个人利益或间谍活动)。虽然访问已获得授权,但数据的使用意图和方式是恶意的。

STRIDE 类别

信息披露

MITRE ATT&CK 策略

集合

玻璃贴纸
  • 数据囤积:定期查询和下载超出工作要求的客户数据。

  • 敏感分析:执行分析以提取商业机密或个人身份信息,以便进行数据渗漏。

缓解措施

启用并监控数据访问权限审核日志,以跟踪数据访问模式。使用 Sensitive Data Protection 等工具扫描查询结果中是否存在敏感信息。实施用户行为分析 (UBA),以检测异常的查询模式或数据访问量。实施明确的数据处理政策并提供安全意识培训。使用行级安全性和列级安全性来限制数据暴露,即使是获得授权的用户也不例外。

通过数据集、授权视图或预定查询中的隐秘 BigQuery IAM 绑定实现持久性

攻击者在获得初始访问权限后,通过在 BigQuery 中创建难以检测的访问机制来建立长期存在。此威胁包括向数据集添加 IAM 绑定、创建查询敏感数据的授权视图,或设置在特权服务账号下运行的预定查询,以窃取数据或保持访问权限。

STRIDE 类别

提权

MITRE ATT&CK 策略

持久性

玻璃贴纸
  • 隐藏数据集 IAM:向个人账号授予对特定数据集的查看者权限,但该数据集的监控程度较低。

  • 授权视图后门:创建有权访问受限表的视图,并授予对该视图的访问权限。

  • 恶意预定查询:配置预定查询,以定期将数据复制到外部位置。

缓解措施

定期审核所有 IAM 允许政策,包括使用 Security Command Center 等工具检查数据集级权限。严格控制创建或更新数据集 (bigquery.datasets.update)、例程 (bigquery.routines.create/update) 和数据传输 (bigquery.transfers.update) 的权限。

使用遭入侵的服务账号凭据或用于 BigQuery 访问的 OAuth 令牌进行欺骗

攻击者获取服务账号凭据(例如导出的 JSON 密钥),并使用这些凭据以遭入侵的服务账号的身份向 BigQuery 进行身份验证,从而继承该服务账号的所有权限。借助这种威胁,攻击者可以执行服务账号获授权执行的任何操作,例如读取数据、运行作业或修改资源。

STRIDE 类别

仿冒邮件数

MITRE ATT&CK 策略

初始访问

玻璃贴纸
  • 泄露的服务账号密钥:JSON 密钥文件在代码库、公共存储空间或实例元数据中公开。

  • 应用遭到入侵:使用服务账号的应用遭到入侵,导致攻击者可以提取并使用其凭据。

  • 被盗的 OAuth 令牌:攻击者拦截或泄露了客户端应用或浏览器会话中的 OAuth 令牌。

  • 范围过大的令牌:应用请求并存储范围过大的令牌(例如,只需要读取权限,却请求了完整的 BigQuery 访问权限)。

缓解措施

避免导出服务账号密钥。请尽可能改用关联的服务账号或工作负载身份联合。如果必须使用密钥,请定期轮替密钥,并仅向服务账号授予必要的最低权限。监控 Cloud Audit Logs 和 Security Command Center,以发现异常的服务账号活动或密钥泄露情况。使用 constraints/iam.disableServiceAccountKeyCreation 组织政策限制条件来停用服务账号密钥创建功能。安全地存储和传输 OAuth 令牌。遵循 OAuth 2.0 最佳实践。仅请求必要的范围。安全地使用短期有效的令牌和刷新令牌。实现用于检测和撤消遭盗用令牌的机制。监控是否存在异常的 token 使用模式。完成标准服务账号密钥保护措施。为 Google Cloud 服务配置会话时长,以强制使用短期有效的令牌并降低令牌泄露的风险。

使用高成本查询的基于费用的拒绝服务攻击

经过身份验证的主账号执行旨在消耗过多 BigQuery 资源(例如槽和扫描的字节)的查询。这种威胁可能会导致按需项目出现巨额成本超支,或者导致基于预留的项目中其他用户出现槽饥饿,从而阻碍业务运营。

STRIDE 类别

拒绝服务攻击

MITRE ATT&CK 策略

影响

玻璃贴纸
  • 未优化的查询:在没有过滤条件的情况下,对大型表运行包含交叉联接的查询。

  • 重复执行:通过脚本频繁执行费用高昂的查询。

缓解措施

您可以使用 BigQuery 自定义配额,针对查询用量(例如每天扫描的字节数)设置用户级和项目级限额。在查询作业中使用 maximumBytesBilled 参数。使用 BigQuery 预留功能隔离工作负载并保证容量。在 Cloud Billing 中配置结算提醒,并在 Cloud Monitoring 中监控 slot 利用率,以便检测异常情况并做出相应反应。