对云函数隐藏C2技术的防御反制思路
字数 1682 2025-08-26 22:11:22

云函数隐藏C2技术的防御反制思路

前言

随着云函数概念的普及,攻防演练中频繁出现云函数扫描器及云函数隐藏C2服务器的案例。本文详细分析云函数隐藏C2的技术原理,并提供有效的防御反制方法。

环境搭建

腾讯云函数注意事项

  1. Python版本选择:

    • Python 3.7不自带requests库,需手动安装
    • 建议使用Python 3.6(自带requests库)
  2. 安装方式:

    • 新版本在线编辑器支持终端pip安装
    • 安装过程可能较慢
  3. 验证成功:

    • 访问80端口显示404为正常现象
    • 出现腾讯云日志记录即表示成功
  4. C2配置:

    • 上线地址需去掉http://:80
    • 格式应为:service-xxxxxxxx-xxxxxxxxxx.sh.apigw.tencentcs.com

Cobalt Strike流量分析

CS流量可分为三个阶段:

  1. Stage下载阶段

    • 远程下载payload(约210KB)
    • 注入到目标服务器内存
  2. Beacon心跳包阶段

    • 按配置文件以GET方法向C2发起心跳请求
    • 宿主机信息经过公私钥加密后发送
  3. 命令执行与回传阶段

    • C2通过HTTP返回包下发命令
    • Beacon通过POST方法回传执行结果

Stage下载阶段特征

  • 请求包

    • 路径ASCII之和与256取余等于92(checksum8规则)
  • 返回包

    • 包含回连地址、加密字段、公钥等配置信息
    • 云函数特有属性:
      • X-Request-Id: 请求ID
      • X-Api-FuncName: 函数名(可伪装)
      • X-Api-AppId: 对应账号ID
      • X-Api-ServiceId: 服务ID
      • X-Api-HttpHost: 组合信息
      • X-Api-Status: 200
      • X-Api-UpstreamStatus: 200

心跳包阶段特征

  • 通过Cookie传输机器信息
  • 加密流程:
    1. 公私钥加密
    2. Base64编码
    3. 添加"SESSIONID="前缀
    4. 添加Cookie头

命令执行阶段特征

  • 请求头带有明显云函数特征
  • Host头包含云函数API URL
  • Header中包含云函数参数

Profile文件分析

典型云函数profile文件示例:

set sample_name "t";
set sleeptime "3000";
set jitter "0";
set maxdns "255";
set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";

http-get {
    set uri "/api/x";
    client {
        header "Accept";
        metadata {
            base64;
            prepend "SESSIONID=";
            header "Cookie";
        }
    }
    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Server" "Nodejs";
        output {
            base64;
            print;
        }
    }
}

http-stager {
    set uri_x86 "/vue.min.js";
    set uri_x64 "/bootstrap-2.min.js";
}

http-post {
    set uri "/api/y";
    client {
        header "Accept";
        id {
            base64;
            prepend "JSESSION=";
            header "Cookie";
        }
        output {
            base64;
            print;
        }
    }
    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Connection" "keep-alive";
        output {
            base64;
            print;
        }
    }
}

全局选项

  1. set sleeptime "3000"; - 设置睡眠时间(毫秒)
  2. set jitter "0"; - 设置数据抖动(百分比)
  3. set maxdns "255"; - DNS上传数据时主机名最大长度
  4. set useragent - 设置UA

局部选项

  • set uri - 分配客户端和服务器引用的URI
  • client块 - 配置客户端行为
  • server块 - 配置服务器响应
  • metadata处理流程:
    1. Base64编码
    2. 添加前缀
    3. 设置Header

分析与反制思路

流量特征识别

  1. Stage下载阶段

    • 约210KB大流量包
    • 路径ASCII和与256取余等于92
    • 访问/bootstrap-2.min.js等特定路径
  2. 心跳阶段

    • 访问/api/getit等类似API模式
    • 带有云函数特有Header
  3. 云函数特征

    • Host格式:service-xxxxxx.sh.apigw.tencentcs.com
    • 请求头包含:
      • X-Request-Id
      • X-Api-FuncName
      • X-Api-AppId
      • X-Api-ServiceId
      • X-Api-HttpHost
      • X-Api-Status
      • X-Api-UpstreamStatus

反制手段

  1. 批量上线钓鱼马

    • 利用云函数IP变化特性
    • 大量上线使攻击者无法分辨
  2. 消耗云函数额度

    • 使用脚本频繁访问耗尽攻击者额度
    • 工具推荐:MenoyGone
  3. 虚假上线

    • 重放心跳包但无法执行命令
  4. 截图举报

    • 收集证据(Host名、X-Api-FuncName、X-Api-AppId等)
    • 向云服务商举报封禁

总结

防御云函数隐藏C2的关键在于识别其特有流量特征,包括请求路径、返回包大小、云函数特有Header等。通过主动反制手段可有效干扰攻击者操作,保护企业安全。

云函数隐藏C2技术的防御反制思路 前言 随着云函数概念的普及,攻防演练中频繁出现云函数扫描器及云函数隐藏C2服务器的案例。本文详细分析云函数隐藏C2的技术原理,并提供有效的防御反制方法。 环境搭建 腾讯云函数注意事项 Python版本选择: Python 3.7不自带requests库,需手动安装 建议使用Python 3.6(自带requests库) 安装方式: 新版本在线编辑器支持终端pip安装 安装过程可能较慢 验证成功: 访问80端口显示404为正常现象 出现腾讯云日志记录即表示成功 C2配置: 上线地址需去掉 http:// 和 :80 格式应为: service-xxxxxxxx-xxxxxxxxxx.sh.apigw.tencentcs.com Cobalt Strike流量分析 CS流量可分为三个阶段: Stage下载阶段 : 远程下载payload(约210KB) 注入到目标服务器内存 Beacon心跳包阶段 : 按配置文件以GET方法向C2发起心跳请求 宿主机信息经过公私钥加密后发送 命令执行与回传阶段 : C2通过HTTP返回包下发命令 Beacon通过POST方法回传执行结果 Stage下载阶段特征 请求包 : 路径ASCII之和与256取余等于92(checksum8规则) 返回包 : 包含回连地址、加密字段、公钥等配置信息 云函数特有属性: X-Request-Id : 请求ID X-Api-FuncName : 函数名(可伪装) X-Api-AppId : 对应账号ID X-Api-ServiceId : 服务ID X-Api-HttpHost : 组合信息 X-Api-Status : 200 X-Api-UpstreamStatus : 200 心跳包阶段特征 通过Cookie传输机器信息 加密流程: 公私钥加密 Base64编码 添加"SESSIONID="前缀 添加Cookie头 命令执行阶段特征 请求头带有明显云函数特征 Host头包含云函数API URL Header中包含云函数参数 Profile文件分析 典型云函数profile文件示例: 全局选项 set sleeptime "3000"; - 设置睡眠时间(毫秒) set jitter "0"; - 设置数据抖动(百分比) set maxdns "255"; - DNS上传数据时主机名最大长度 set useragent - 设置UA 局部选项 set uri - 分配客户端和服务器引用的URI client 块 - 配置客户端行为 server 块 - 配置服务器响应 metadata 处理流程: Base64编码 添加前缀 设置Header 分析与反制思路 流量特征识别 Stage下载阶段 : 约210KB大流量包 路径ASCII和与256取余等于92 访问 /bootstrap-2.min.js 等特定路径 心跳阶段 : 访问 /api/getit 等类似API模式 带有云函数特有Header 云函数特征 : Host格式: service-xxxxxx.sh.apigw.tencentcs.com 请求头包含: X-Request-Id X-Api-FuncName X-Api-AppId X-Api-ServiceId X-Api-HttpHost X-Api-Status X-Api-UpstreamStatus 反制手段 批量上线钓鱼马 : 利用云函数IP变化特性 大量上线使攻击者无法分辨 消耗云函数额度 : 使用脚本频繁访问耗尽攻击者额度 工具推荐: MenoyGone 虚假上线 : 重放心跳包但无法执行命令 截图举报 : 收集证据(Host名、X-Api-FuncName、X-Api-AppId等) 向云服务商举报封禁 总结 防御云函数隐藏C2的关键在于识别其特有流量特征,包括请求路径、返回包大小、云函数特有Header等。通过主动反制手段可有效干扰攻击者操作,保护企业安全。