如何部署CobaltStrike
CobaltStrike已经是Red Team中使用最广泛的远控程序,但是CobaltStrike中也存在一些问题,部分比较严重的问题只能通过修改代码进行修补,而有些问题可以通过更改部署方式实现修补
CobaltStrike Intro
beacon –> TeamServer –> Controller
TeamServer默认使用50050端口作为管理端口,我将该作用端口称为TeamServer。用作接收beacon请求的端口,我称之为listener。另外CobaltStrike在使用过程中可能还会使用到由red team operator 指定的socks4a服务端口(狗都不用)。
TeamServer 存在的问题 & 如何规避
在TeamServer上目前存在如下问题:
- 默认端口
- 证书指纹
TeamServer上存在的问题比较好解决,通过修改端口号与更换证书即可。
修改端口号
查看 teamserver
文件最后,我们可以看到启动命令中有指定端口的配置参数 -Dcobaltstrike.server_port=50050
,通过修改参数,即可修改端口号。
更换证书
在 teamserver
文件中,如果路径下缺少 cobaltstrike.store
文件,则会按照设定内容创建一个cobaltstrike固定证书。我们可以通过修改脚本文件内容并删除已经创建的 cobaltstrike.store
文件让脚本自动创建。也可以自己通过 keytool
命令创建一个证书文件并命名为 cobaltstrike.store
。
1 | # 创建证书 |
通过代理隧道连接TeamServer
在防火墙上直接关闭50050的外部连接,然后通过ssh隧道或其他代理隧道访问50050
1 | sudo ufw deny 50050 |
使用proxifer或proxychains给cobaltstrike配置代理访问TeamServer
Listener 存在的问题 & 如何规避
- 请求流量
- checksum8指纹
- 特殊请求地址下载stager
修改流量特征
通过配置profile中的http-get
与http-post
可以直接修改C2通信过程中的流量内容。
使用几个工具可以快速生成你想要的流量
Caddy重定向器
限制listener外部直接访问
创建http协议与https协议listener分别在33080或33443端口上,通过防火墙限制两个端口的访问
1 | sudo ufw deny 33080 |
配置profile
在 http-config
块中添加选项 set trust_x_forwarded_for “true”;
Caddyfile
使用caddy反向代理功能(Nginx和Apache都可以实现),将80与443端口分别代理到33080与33443端口上。这样就可以caddy转发访问到listener。
实际配置过程中不要配置/*
,这样配置无法做到滤除checksum8指纹与stager请求
1 | http://random-domain { |
隐匿TeamServer真实IP
域前置
这里相关博客网上有很多,而且我也没配置过。这里就不细说了。
云函数/云网关
云函数这里部署可以参考搜索腾讯云函数部署,相关代码参考SCFProxy项目。
值得注意的是使用参考相关文章进行部署完成后,在TeamServer上的外部IP会不断变化,这里需要在profile中设置XFF头(参考Caddy部分)。此处的流量传递过程是beacon –> (云网关 –> 云函数) [–> caddy] –> listener,如果使用了转发器转发还需要将在转发器中修改XFF头(参考Caddy的配置),因为caddy获取到的地址是由云函数传递过来的,要将云网关/云函数获取的真实地址传递给caddy。
Reference
【R1】https://hosch3n.github.io/2020/12/16/检测与隐藏Cobaltstrike服务器/