如何部署CobaltStrike

CobaltStrike已经是Red Team中使用最广泛的远控程序,但是CobaltStrike中也存在一些问题,部分比较严重的问题只能通过修改代码进行修补,而有些问题可以通过更改部署方式实现修补

CobaltStrike Intro

beacon –> TeamServer –> Controller

TeamServer默认使用50050端口作为管理端口,我将该作用端口称为TeamServer。用作接收beacon请求的端口,我称之为listener。另外CobaltStrike在使用过程中可能还会使用到由red team operator 指定的socks4a服务端口(狗都不用)。

TeamServer 存在的问题 & 如何规避

在TeamServer上目前存在如下问题:

  1. 默认端口
  2. 证书指纹

TeamServer上存在的问题比较好解决,通过修改端口号与更换证书即可。

修改端口号

查看 teamserver文件最后,我们可以看到启动命令中有指定端口的配置参数 -Dcobaltstrike.server_port=50050,通过修改参数,即可修改端口号。

更换证书

teamserver文件中,如果路径下缺少 cobaltstrike.store文件,则会按照设定内容创建一个cobaltstrike固定证书。我们可以通过修改脚本文件内容并删除已经创建的 cobaltstrike.store文件让脚本自动创建。也可以自己通过 keytool命令创建一个证书文件并命名为 cobaltstrike.store

1
2
3
4
5
# 创建证书
keytool -keystore cobaltstrike.store -storepass armitageIsBest -genkey -keyalg RSA -alias toyota.jp -dname "CN=toyota.jp, OU=e-TOYOTA DIV, O=TOYOTA MOTOR CORPORATION, L=Toyota-Shi, S=Aichi, C=JP"

# 查看证书
keytool -list -v keystore cobaltstrike.store

通过代理隧道连接TeamServer

在防火墙上直接关闭50050的外部连接,然后通过ssh隧道或其他代理隧道访问50050

1
2
3
4
sudo ufw deny 50050

# 建立SSH代理隧道
ssh -i id_rsa -N -D 127.0.0.1:50500 root@XXX.XXX.XXX.XXX

使用proxifer或proxychains给cobaltstrike配置代理访问TeamServer

Listener 存在的问题 & 如何规避

  1. 请求流量
  2. checksum8指纹
  3. 特殊请求地址下载stager

修改流量特征

通过配置profile中的http-gethttp-post可以直接修改C2通信过程中的流量内容。
使用几个工具可以快速生成你想要的流量

  1. JustC2file
  2. random_c2_profile
  3. Burp2Malleable

Caddy重定向器

限制listener外部直接访问

创建http协议与https协议listener分别在33080或33443端口上,通过防火墙限制两个端口的访问

1
2
sudo ufw deny 33080
sudo ufw deny 33443

配置profile

http-config块中添加选项 set trust_x_forwarded_for “true”;

Caddyfile

使用caddy反向代理功能(Nginx和Apache都可以实现),将80与443端口分别代理到33080与33443端口上。这样就可以caddy转发访问到listener。
实际配置过程中不要配置/*,这样配置无法做到滤除checksum8指纹与stager请求

1
2
3
4
5
6
7
8
9
10
11
http://random-domain {
reverse_proxy /* localhost:33080 {
header_up X-Forwarded-For {header.X-Forwarded-For}
}
}

https://random-domain {
reverse_proxy /* localhost:33443 {
header_up X-Forwarded-For {header.X-Forwarded-For}
}
}

隐匿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服务器/