Cobalt Strike 通过 Azure 服务总线的外部 C2 集成,C2 流量经由 Azure 服务总线

CobaltBus DotNetCore 二进制文件与 CobaltStrike 的 ExternalC2 集成,会创建一个本地 SqliteDB 以跟踪多个信标。发往 CobaltBus 的入站消息将被捕获并写入数据库。数据库文件“CobaltBus.db”和“CobaltBus-log.db”将在 CobaltBus.dll 运行所在目录下创建。一旦 Beacon 二进制文件运行,它会向 baseQueueName 队列推送一条“INITIALIZE”消息,其中包含随机生成的 BeaconId 和 Pipename。随后 CobaltBus 处理器会捕获此消息,根据发送的 BeaconId 创建并迁移到两个新队列,从 CobaltStrike 请求 stager shellcode,并以“INJECT”消息的形式将其推送回新队列。此后,Beacon 项目将捕获的 shellcode 注入内存,并通过生成的管道名称与 CobaltStrike 信标建立连接。当从 CobaltBus 发出命令时,该命令会被推送到相应信标的队列中,再进入信标管道名称。
当前消息流存在多个缺陷,在考虑将其用于实际操作之前需要解决。请将其视作一个粗糙的 POC。要是有一个鼠标和 C2 专家能让它变得安全可靠就好了……
主要感谢 @ryHanson 的工作 https://github.com/ryhanson/ExternalC2