本文简单分析和记录了 CobaltStrike http-beacon 类型上线流量的过程。
环境配置
CS 服务器:192.168.238.128
受害者PC:192.168.238.1
CS 版本:4.3,使用默认配置
流量包分析
通过 wireshark 抓取 CobaltStrike 的上线流量,从上线到命令执行大约有4个 TCP 流,如下所示:
全部共239个包:
tcp stream 0:
tcp stream 1:
tcp stream 2:
tcp stream 3:
通过查看第一个 tcp 流,可以看到受控机器向 CS 服务器发起 HTTP GET 请求,从响应内容上看,这里请求的是下载名称为 xt98 的文件 。从 HTTP 对象列表中可以还原相关文件。
第二个 tcp 流与第三个 tcp 流请求内容基本一致,请求资源为 IE9CompatViewList.xml,请求的 Cookie 是一串字符:
gehJfgv3WRxq9/o9fbvtdcais0J7L1r7lK81N8ORi1TrhQtcvy608OLjpczEf/t7VI2wNjNr8+2Ry1qCtCl7DYuTelbwxO0UsT68mb+utwVtcxmccCnObJU8ygz1GJyIzBQ0fc36vziG8F287mrrgazltqdNb0WVifQI4T0r6wg=
不同的是第三个流的响应包多了一串不可知的字符。另外,这两个 HTTP 请求时间的间隔为60s。
第四个 tcp 流中,受控机器向CS服务器发起一个 POST 请求,内容为“/submit.php?id=548222260”和一串不可知的字符,第四个 tcp 流与第三个 tcp 流之间相差1s,猜测是收到第三个 tcp 流的响应内容后立即向 CS 服务器发起 POST 请求。
CS上线过程
通过查阅资料,了解到 CS http 分阶段 beacon 上线过程的理论知识,如下图所示:
结合上面流量分析的结果,可以知道:
1、特定算法生成的 URL 为 xt98,完整的beacon文件为 stage(xt98)。
2、HTTP GET 请求中的IE9CompatViewList.xml为心跳包,Cookie 内容
gehJfgv3WRxq9/o9fbvtdcais0J7L1r7lK81N8ORi1TrhQtcvy608OLjpczEf/t7VI2wNjNr8+2Ry1qCtCl7DYuTelbwxO0UsT68mb+utwVtcxmccCnObJU8ygz1GJyIzBQ0fc36vziG8F287mrrgazltqdNb0WVifQI4T0r6wg=
是用来加密的密钥。
3、HTTP POST 请求中的”/submit.php?id=548222260”是受害者PC将命令执行后的结果返回,请求体中是命令执行结果的加密数据。
分析特定算法生成的URL
受害者PC发起的第一个 HTTP 请求的 URL 是由特定算法生成的,将 xt98 转成10进制然后与256进行模运算,X64 beacon 模运算后的结果为93,X86 beacon 模运算后的结果为92,这里使用的64位的 shellcode。
计算如下:
ascii: xt 9 8
Dec: 120 116 57 56
(120+116+57+56)%256 = 93
在源码的common/CommonUtils工具类中可以找到相关代码:
分析完整的beacon文件
分析对称加密的公私钥
Cookie内容如下:
gehJfgv3WRxq9/o9fbvtdcais0J7L1r7lK81N8ORi1TrhQtcvy608OLjpczEf/t7VI2wNjNr8+2Ry1qCtCl7DYuTelbwxO0UsT68mb+utwVtcxmccCnObJU8ygz1GJyIzBQ0fc36vziG8F287mrrgazltqdNb0WVifQI4T0r6wg=
.cobaltstrike.beacon_keys 。
对该文件进行解析:
获取到公私钥。
对公私钥进行base64编码转换和hex处理,这里得到的公钥与beacon文件中的公钥一致。
Cookie解密
使用私钥解密Cookie,得到对称加密密钥 Raw key,受害者PC执行任务后的内容通过该密钥进行加密后返回给 CS 服务器。
方式1:
在线网站解密Cookie信息:
https://www.lddgo.net/encrypt/rsa
得到解密后的base64字符,解密后的字符串是由特定格式组成的,使用脚本进行解析。
方式2:
使用github上的解密脚本进行解密:
https://github.com/minhangxiaohui/CSthing
*左右滑动查看更多
执行任务内容传输解密
使用脚本对命令执行的流量进行解密:
总结
在默认情况下,CS的URL特征和流量是十分明显的,可以很容易判断出CS回连,目前也有很多的安全设备可以识别互联网上的使用CS的C2服务器,并且识别出对应使用的心跳回连uri和任务执行回传使用的uri以及相关心跳间隔和使用的beacon类型。
在实际利用过程中,攻击队会放弃使用默认配置,并通过修改profile配置文件对流量特征进行修改或者是对CS相关源码进行修改从而躲避检测。这会增加基于流量分析的难度,不过依然可以通过流量异常行为分析模型,或结合终端异常行为进行关联分析和样本识别。
参考及推荐阅读
Cobaltstrike4.0 学习——http分阶段stagebeacon上线流量刨根问底
https://forum.butian.net/share/1861
Cobaltstrike 分析利用脚本
https://github.com/Skactor/cs-scripts
+ cobaltstrike 流量解密
https://blog.csdn.net/weixin_46081055/article/details/123413246
在线RSA解密
https://www.lddgo.net/encrypt/rsa
*左右滑动查看更多
原文始发于微信公众号(安恒信息安全服务):九维团队-暗队(情报)| CobaltStrike http-beacon流量分析
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论