如何隐藏C2
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 | 查看证书文件:keytool -list -v -keystore xx.store |
keystore
Keystore是什么?keystore是java的密钥库,用来进行通信加密,如数字签名。keystore就是用来保存密钥对的,公钥和私钥。Keystore可理解为一个数据库,可以存放很多个组数据。
每组数据主要包含以下两种数据:
- 密钥实体 — 密钥(secret key)又或者私钥和配对公钥(采用非对称加密)
- 可信任的证书实体 — 只包含公钥
查看CobaltStrike的默认store文件
1 | keytool -list -v -keystore cobaltstrike.store |
输入默认密码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 | keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)" |
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 | set sample_name "tryblog POS Malware"; |
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