CobaltStrike逆向学习系列(7):Controller 任务发布流程分析
字数 1272 2025-08-07 08:22:23

CobaltStrike逆向学习系列(7): Controller任务发布流程分析

0x00 概述

本文详细分析CobaltStrike中从Controller发布任务到Beacon执行的完整流程,以shell whoami命令为例,解析任务在CobaltStrike组件间的传递和处理机制。

0x01 Controller到TeamServer的任务发布流程

1.1 命令输入与初步处理

  1. 命令输入:在Console中输入命令(如shell whoami)并回车
  2. BeaconConsole处理
    • 专门处理shell命令
    • 使用popString方法解析命令,返回要执行的命令(如whoami)

1.2 任务构造与处理

  1. TaskBeacon处理

    • 处理执行逻辑
    • 构造任务数据,格式化信息供Beacon解析执行
  2. 日志记录

    • 先打印执行日志
    • 日志通过TeamQueue传递给TeamServer
    • TeamServer在ManageUser中接收日志
    • 处理后添加广播将信息发送出去
    • 通过BroadcastWriter写回Controller

1.3 任务发送到TeamServer

  1. Controller发送任务

    • 将构造好的任务发送给TeamServer
  2. TeamServer接收处理

    • 从参数中提取BeaconId和任务数据
    • 进入BeaconData处理逻辑
    • 关键代码位于else分支中的add操作
    • 注意:CS设置了一个暗桩 - 运行30分钟后执行命令会直接发布退出任务
  3. 任务存储

    • 将任务添加到任务List
    • 记录对应的BeaconId

0x02 TeamServer到Beacon的任务传递

2.1 Beacon请求任务

  1. 心跳机制

    • Beacon通过心跳包请求任务
    • 从任务队列中取出数据
  2. 任务处理

    • 循环添加任务,并将已添加的任务移除
    • 如果任务大于指定大小则跳出循环
    • 返回任务队列
  3. 数据构造

    • 取出其他相关内容
    • 构造返回数据
    • 打印日志,输出发送的命令长度

2.2 数据加密

  1. 密钥获取

    • 根据BeaconId获取对应的AESKeyHmacSHA256Key
  2. 数据准备

    • 写入系统时间/1000
    • 写入任务长度
    • 写入任务数据
    • 进行数据补齐(添加'A'字符,补足16的整数倍)
  3. 加密过程

    • 进行AES加密
    • 对数据进行Hmac计算
    • 将AES加密后的任务数据与Hmac的前16位拼接
  4. 返回数据

    • 将加密后的数据返回给Beacon

0x03 流程图解

Controller -> TeamServer -> Beacon 任务流程:

1. Controller端:
   [命令输入] -> [BeaconConsole处理] -> [TaskBeacon构造任务] -> [日志记录] -> [发送任务到TeamServer]

2. TeamServer端:
   [接收任务] -> [BeaconData处理] -> [存储任务到队列] -> [等待Beacon请求]

3. Beacon端:
   [心跳请求] -> [TeamServer返回任务] -> [数据加密] -> [返回加密任务]

4. 加密细节:
   [获取AESKey/HmacKey] -> [数据补齐] -> [AES加密] -> [Hmac计算] -> [拼接返回]

关键点总结

  1. 任务生命周期:Controller -> TeamServer -> Beacon
  2. 加密机制:使用AES和HmacSHA256双重加密
  3. 心跳机制:Beacon通过心跳主动拉取任务
  4. 暗桩设计:30分钟后可能触发退出任务
  5. 数据格式:包含时间戳、长度、任务数据和校验信息
  6. 日志记录:全程伴随日志记录和广播机制

理解这一流程对于分析CobaltStrike通信协议、检测其流量以及开发相关防御措施具有重要意义。

CobaltStrike逆向学习系列(7): Controller任务发布流程分析 0x00 概述 本文详细分析CobaltStrike中从Controller发布任务到Beacon执行的完整流程,以 shell whoami 命令为例,解析任务在CobaltStrike组件间的传递和处理机制。 0x01 Controller到TeamServer的任务发布流程 1.1 命令输入与初步处理 命令输入 :在Console中输入命令(如 shell whoami )并回车 BeaconConsole处理 : 专门处理shell命令 使用 popString 方法解析命令,返回要执行的命令(如 whoami ) 1.2 任务构造与处理 TaskBeacon处理 : 处理执行逻辑 构造任务数据,格式化信息供Beacon解析执行 日志记录 : 先打印执行日志 日志通过 TeamQueue 传递给TeamServer TeamServer在 ManageUser 中接收日志 处理后添加广播将信息发送出去 通过 BroadcastWriter 写回Controller 1.3 任务发送到TeamServer Controller发送任务 : 将构造好的任务发送给TeamServer TeamServer接收处理 : 从参数中提取 BeaconId 和任务数据 进入 BeaconData 处理逻辑 关键代码位于else分支中的 add 操作 注意:CS设置了一个暗桩 - 运行30分钟后执行命令会直接发布退出任务 任务存储 : 将任务添加到任务List 记录对应的 BeaconId 0x02 TeamServer到Beacon的任务传递 2.1 Beacon请求任务 心跳机制 : Beacon通过心跳包请求任务 从任务队列中取出数据 任务处理 : 循环添加任务,并将已添加的任务移除 如果任务大于指定大小则跳出循环 返回任务队列 数据构造 : 取出其他相关内容 构造返回数据 打印日志,输出发送的命令长度 2.2 数据加密 密钥获取 : 根据 BeaconId 获取对应的 AESKey 和 HmacSHA256Key 数据准备 : 写入系统时间/1000 写入任务长度 写入任务数据 进行数据补齐(添加'A'字符,补足16的整数倍) 加密过程 : 进行AES加密 对数据进行Hmac计算 将AES加密后的任务数据与Hmac的前16位拼接 返回数据 : 将加密后的数据返回给Beacon 0x03 流程图解 关键点总结 任务生命周期 :Controller -> TeamServer -> Beacon 加密机制 :使用AES和HmacSHA256双重加密 心跳机制 :Beacon通过心跳主动拉取任务 暗桩设计 :30分钟后可能触发退出任务 数据格式 :包含时间戳、长度、任务数据和校验信息 日志记录 :全程伴随日志记录和广播机制 理解这一流程对于分析CobaltStrike通信协议、检测其流量以及开发相关防御措施具有重要意义。