Cobalt Strike 4.7如何魔改特征和流量混淆实现高效隐蔽?
摘要:工具魔改 | Cobalt Strike 4.7 特征修改与流量混淆 本文记录了对 Cobalt Strike 4.7 的一些特征修改过程,包括证书替换、Malleable C2 Profile 流量伪装、Beacon 内存特征处理、异或密
工具魔改 | Cobalt Strike 4.7 特征修改与流量混淆
本文记录了对 Cobalt Strike 4.7 的一些特征修改过程,包括证书替换、Malleable C2 Profile 流量伪装、Beacon 内存特征处理、异或密钥修改等。不是什么教程,就是自己折腾的过程记录。
目录
证书替换
Malleable C2 Profile 流量混淆
修改服务端端口
CS 源码编译与个性化修改
水印修改
Checksum8 与 Stager 特征
异或密钥修改
PowerShell 混淆尝试
一、证书替换
CS 默认证书的特征非常明显,蓝队抓到 SSL 握手包直接就能识别,第一步先把证书换掉。
查看默认证书
keytool.exe 是 Java JRE 自带的证书管理工具,用它查看当前证书信息:
keytool.exe -list -v -keystore cobaltstrike.store
默认密码可以在 teamserver.sh 里看到:
-Djavax.net.ssl.keyStorePassword=123456
原本的证书信息长这样,特征很明显:
生成自定义证书
把证书伪装成 Microsoft 更新服务,运行以下命令:
keytool -genkey -alias cobaltstrike -keyalg RSA -keysize 2048 \
-storetype JKS -keystore cobaltstrike.store -validity 3650
填写信息时模仿微软:
您的名字与姓氏是什么? → www.microsoft.com
您的组织单位名称是什么? → Microsoft Corporation
您的组织名称是什么? → Microsoft
您所在的城市或区域名称是什么? → Redmond
您所在的省/市/自治区名称是什么? → Washington
该单位的双字母国家/地区代码是什么? → US
密钥库口令 → 自己设一个,记住
生成完之后确认一下新证书信息:
修改启动脚本密码
打开 ./teamserver 启动脚本,把密码改成和新证书一致:
-Djavax.net.ssl.keyStorePassword=123456
注意:修改后的文件需要同步到服务端。
启动方式:
./teamserver 172.16.250.128 kali
# 格式:./teamserver [修改了密码的启动方式文件] [连接ip] [连接密码]
验证效果
客户端连接时会弹出证书指纹确认框:
这个指纹就是刚才生成证书时看到的 SHA256 值,完全一致,说明服务端用的就是自定义证书,默认的 CS 证书特征(CN=Major Cobalt Strike)已经没了。
二、Malleable C2 Profile 流量混淆
证书换了之后,CS 默认的心跳流量特征还是很明显,蓝队一抓包就能识别。Malleable C2 Profile 可以把 beacon 的流量伪装成正常的业务请求。
下载现成的 Profile
git clone https://github.com/rsmudge/Malleable-C2-Profiles
里面有很多现成的,我用的是 amazon.profile,伪装成亚马逊购物流量。
