Cobaltstrike去除特征
出品|MS08067实验室(www.ms08067.com)
本文作者:BlackCat(Ms08067实验室内网小组成员)
前言:
红蓝对抗的时候,如果未修改CS特征、容易被蓝队溯源。
去特征的几种方法:
1、更改默认端口
方法一、直接编辑teamserver进行启动项修改。
vi teamserver
方法二、启动时候指定server_port
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、去除证书特征
(1)、进入CS目录
查看keytool -list -v -keystore cobaltstrike.store 证书情况,输入默认密码123456回车,可以看到所有者、发布者中Cobalt Strike相关字样。
然后修改 keytool
keytool是一个Java 数据证书的管理工具,使用如下:
- -keytool -keystore cobaltstrike.store -storepass 密码
- -keypass 密码
- -genkey -keyalg RSA
- -alias google.com -dname "CN=(名字与姓氏),
- OU=(组织单位名称), O=(组织名称),
- L=(城市或区域名称),
- ST=(州或省份名称),
- C=(单位的两字母国家代码)。
keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias taobao.com -dname "CN=US, OU=”taobao.com“, O=“Sofatest”, L=Beijing, ST=Cyberspace, C=CN"
然后 在观测keytool。
这时发现所以关于cobaltstrike的字眼都被替换掉了。
3、绕过流量审计
(1)高信誉服务伪造
传输过程中,把流量伪造成高信誉的网站,比如Google 、bing等 。
现在的大多数硬件WAF防护设备都能检测出来Cs的流量特征,所以我们必须要修改CS的流量特征,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/
去配置之前先了解下有关Beacon的通信基础:
从Cobalt Strike 3.6版开始,可以将HTTP动词从POST更改为GET。Beacon忽略了此POST请求(配置文件中的http-post服务器)的响应。默认情况下,Beacon将HTTP POST请求用于上述步骤#3和#4。根据您的目标环境或您正在模拟的流量,可能会注意到交替的GET和POST请求。在这种情况下,请将http-post部分的动词设置为GET。
Beacon与teamserver端c2的通信逻辑:
1.stager的beacon会先下载完整的payload执行
2.beacon进入睡眠状态,结束睡眠状态后用 http-get方式 发送一个metadata(具体发送细节可以在malleable_profie文件里的http-get模块进行自定义),metadata内容大概是目标系统的版本,当前用户等信息给teamserver端 。如图的 1)
3.如果存在待执行的任务,则teamserver上的c2会响应这个metadata发布命令。beacon将会收到具体会话内容与一个任务id。
4.执行完毕后beacon将回显数据与任务id用post方式发送回team server端的C2(细节可以在malleable_profile文件中的http-post部分进行自定义),然后又会回到睡眠状态。
参考资料:https://www.chabug.org/web/832.html
许多 Beacon 指标由一个 C2 拓展文件控制。一个 C2 拓展文件由设置和数据转换组成。数据转换是一 个简单的程序,它指定如何转换数据并将其存储在事务中。转换和存储数据的同一程序,向后解释,还 从事务中提取和恢复数据。
配置文件语言:
创建配置文件的最佳方法是修改现有的配置文件。
Malleable配置文件下载:
git clone https://github.com/rsmudge/Malleable-C2-Profiles.git
CS中集成了一个包含在Linux平台下的C2lint工具,下面是检测这段代码是否存在问题:
CD CobaltStrike
chmod 777 c2lint
./c2lint [/path/to/my.profile] #这个路径是Malleable的配置文件路径
./c2lint /Users/blackcat/Desktop/资源/CS学习/Malleable-C2-Profiles/APT/havex.profile
绿色为运行成功,黄色的为警告,红色的error为运行失败。
这里是运行成功;
然后我们要修改里面的参数 思路就是,默认值坚决不使用,具体如下:
set sample_name "AL"; #配置文件名称:
set sleeptime "50000"; #设置sleep时间,单位是毫秒
set useragent "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 5.2) Java/1.5.0_08"; #这个一般结合实战环境去配置,从目标机构中捕获一个真实的user-agent值并且插入到真实的流量中。
例如,可以向目标机构成员发送一封带有web漏洞的电子邮件并监视后续GET请求中发送的user-agent值。如果你使用的是明文的HTTP流量或者是目标环境中存在SSL拦截,那么与环境不匹配的User-Agent值就会被防御者发现。
再往下的代码是http部分。
这里分块来说明下。
http-get模块:
如上图所示。设定了victim的beacon发送给c2的metadata的相关配置。
1.在client部分中,先设置了多个http header头,然后在uri中存储一个参数。把Referer伪造成Google
2.然后又设置了在metadata数据在传输的时候,先base64加密然后将所有的值填写在Cookie字段中。
3.在server部分,先设置多个header头。然后更改相应内容然后base64编码,然后把数据放在在body里。
http-post模块:
先说下Clinet模块:
这里面的id代表的是task id,任务执行后,beacon需要利用post方式来与c2进行通信,需要传送一个唯一的task id值,还需要传送回显。例如ipconfig命令,就会传送命令的结果等。上面的header头就跟之前的header头的用途一致。
client中的output代表的是客户端发送给服务端的响应用什么形式发送,
server部分跟client比较类似所以不做太多讲述。
此处可以通过定制C2的配置,使得C2的流量混合在目标环境流量中,伪装为正常应用流量,达到欺骗的作用。
我这里伪造的是Google的流量,
然后运行这个C2配置文件:
服务端:
sudo ./teamserver 192.168.1.55 Malleable-C2-Profiles/APT/havex.profile
客户端:
./start.sh
然后连接后,点击 Cobalt Strike -- Listeners创建一个监听模块。然后通过这个监听模块创建一个后门文件 ,然后去上线一台机器。
我这里靶机地址:192.168.93.128
然后点击 Attacks-- packages -- Windows Executable
生成一个 Windows后门可执行文件EXE。
然后把这个后门放到靶机里使其上线。
然后;
打开 wireshark,然后开启抓包
这里要做下筛选:
http and tcp.port == 80 #我这里CS监听端口是80 可以根据自己需求定制
然后 进入到被控机的beacon模式下。
执行命令 shell dir
然后发现已经抓取到包,查看下包的内容。
右键选定 --- follow --- TCP Tream
此时发现Referer为Google 证明实验成功,成功伪造流量。
下面的是基于JQuery的配置文件作为基础配
下载:
git clone https://github.com/threatexpress/malleable-c2.git
然后运行语法:
./c2lint [/path/to/my.profile] #这个路径是Malleable的配置文件路径
我这里用的是CS4.0,所以选用这个profile
然后配置文件信息
参考前面的配置文件名称,sleep时间、用户代理,同上 user-agent还是使用目标机的真实的user-agent值。
SSL证书设置 :
此设置控制用于HTTPS通信的SSL证书。如果可能的话,请为你正在使用的域使用真实的,正确发布的SSL证书。LetsEncrypt可以发布所有主要操作系统和浏览器都信任的免费SSL证书,并且会让防御者更难以检查Beacon流量。
SpawnTo 过程 :
spawnto设置控制beacon生成的进程以便后渗透利用工作,以及何时使用spawn命令。该命令也可以使用命令行参数。
set %windir%\sysnative\svchost.exe -k localservice -p -s fdPHost
svchost.exe是微软Windows操作系统中的系统文件,微软官方对它的解释是:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。
如果防御者查看正在运行进程的命令行,额外的参数可以帮助Beacon进一步混淆。但是很难找到与spawnto一起使用的最合适的选项。选择前要进行实验和测试。
SMB 信标:
SMB 信标使用命名管道通过父信标进行通信。这允许在同一主机或网络上的信标之间进行点对点通信。可以配置SMB 信标的管道名称。不要使用默认设置,因为一些防御性产品会查找这些默认设置。选择能够混合到目标环境的内容。
关于SMB信标的更多能容,请访问:
https://www.cobaltstrike.com/help-smb-beacon
DNS信标
DNS信标使用DNS进行全部或部分通信。根据目标环境的防御技术,DNS流量很容易就能被检测到,但通常是防御者的盲点。DNS最适合用作低速和慢速备份通道。更改默认设置以更好地适应你遇到的环境。
有关DNS信标的更多信息,请访问如下链接:
https://www.cobaltstrike.com/help-dns-beacon
分段过程(staging process)
可以自定义信标分段过程。分段过程是用于完全加载信标的代码存根。
了解有关Beacon分段过程的更多信息,请阅读这篇文章:
https://blog.cobaltstrike.com/2013/06/28/staged-payloads-what-pen-testers-should-know/
幸运的是,可以修改Beacon stager的HTTP特性。更改这些设置以模仿单个合法的HTTP请求/响应。
在此示例中,请求将发送到
/jquery-3.3.1.slim.min.js
或/jquery-3.3.2.slim.min.js
(取决于目标进程体系结构),以开始分段过程。构建HTTP服务器参数以模仿jQuery请求。Beacon命令和payload被混合到jQuery javascript文本块中。从CDN请求jQuery时,客户端发出一个合理的请求。
很多网站发出请求的实现方式如下:
在某些情况下,使用stageless payload可能更好,因为分段过程可能会触发防御产品的报警。
内存指示器
一些最新的Malleable C2功能可以修改许多Beacon内存指示器。
有关控制Beacon内存指示器的详细信息,请参阅下面链接:
https://blog.cobaltstrike.com/2018/02/08/in-memory-evasion
https://www.youtube.com/playlist?list=PL9HO6M_MU2nc5Q31qd2CwpZ8J4KFMhgnK
此示例使用peclone工具从explorer.exe中提取内存元数据,另存为Beaconpayload的一部分,并且采用了Raphael发布的一篇博客“In-Memory Evasion”中的一些建议。
http-get&http-post
http-get 和 http-post 修改格式和上面基本类似
这里 都是伪造成 jquery.com的流量。
测试验证:
./c2lint c2lint jquery-c2.3.11.profile
Manual Testing(手工测试)
除了使用c2lint进行测试外,还要在测试系统上手动测试Beacon的所有功能。
手动测试和验证的快速步骤
- 启动wireshark
- 使用测试配置文件启动teamserver
sudo ./teamserver 192.168.1.10 zaq123 jquery-c2.4.0profile
- 创建HTTP监听器(名为http)
- 创建一个Scripted Web Delivery攻击来部署HTTP信标
- Attacks - > Web Drive-by - >Scripted Web Delivery
- 在Windows测试系统上以管理员身份运行PowerShell
- 查看数据包捕获数据以确保http流量符合你的预期
这里检测没问题 流量特征都已经被修改。
还有一种 CDN伪造技术 详细参考
https://paper.seebug.org/1349/#3cobalt-strike-dns_idle
参考:
CobalStrike 绕过流量审计:https://paper.seebug.org/1349/
CobaltStrike」应用攻击手段实例分析:https://zhuanlan.zhihu.com/p/145505228
cobalt strike malleable C2配置文件编写:https://blog.csdn.net/kongbaijun2000/article/details/109604547
深入研究cobalt strike malleable C2配置文件:https://xz.aliyun.com/t/2796
How to Write Malleable C2 Profiles for Cobalt Strike:https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/
CobaltStrike之Malleable-C2-Profiles配置:https://www.zzhsec.com/544.html
转载请联系作者并注明出处!
Cobaltstrike去除特征的更多相关文章
- CobaltStrike去除流量特征
CobaltStrike去除流量特征 普通CS没有做流量混淆会被防火墙拦住流量,所以偶尔会看到CS上线了机器但是进行任何操作都没有反应.这里尝试一下做流量混淆.参考网上的文章,大部分是两种方法,一种 ...
- 【Machine Learning】机器学习の特征
绘制了一张导图,有不对的地方欢迎指正: 下载地址 机器学习中,特征是很关键的.其中包括,特征的提取和特征的选择.他们是降维的两种方法,但又有所不同: 特征抽取(Feature Extraction): ...
- <转>特征工程(二)
出处: http://blog.csdn.net/longxinchen_ml/article/details/50493845, http://blog.csdn.net/han_xiaoyang/ ...
- 决策树和基于决策树的集成方法(DT,RF,GBDT,XGBT)复习总结
摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 内容: 1.算法概述 1.1 决策树(DT)是一种基本的分类和回归方法.在分类问题中它可以认为是if-the ...
- 浅谈关于特征选择算法与Relief的实现
一. 背景 1) 问题 在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果: 1. 特征个数越多,分析特征.训练模型所需的时间就越 ...
- 【深度学习系列】用PaddlePaddle和Tensorflow实现GoogLeNet InceptionV2/V3/V4
上一篇文章我们引出了GoogLeNet InceptionV1的网络结构,这篇文章中我们会详细讲到Inception V2/V3/V4的发展历程以及它们的网络结构和亮点. GoogLeNet Ince ...
- 【算法】Normalization
Normalization(归一化) 写这一篇的原因是以前只知道一个Batch Normalization,自以为懂了.结果最近看文章,又发现一个Layer Normalization,一下就懵逼了. ...
- 『计算机视觉』各种Normalization层辨析
『教程』Batch Normalization 层介绍 知乎:详解深度学习中的Normalization,BN/LN/WN 一.两个概念 独立同分布(independent and identical ...
- google hack使用集锦
转载:https://blog.csdn.net/weixin_42127015/article/details/84472777 关于google hack的几个基础过滤器使用[请务必谨记,过滤器虽 ...
随机推荐
- linux awk基本语法命令总结
一.基本用法 文本内容准备 2 this is a test 3 Are you like awk This's a test 10 There are orange,apple,mongo 用法一: ...
- 动态方法拦截(AOP)的N种解决方案
AOP的本质是方法拦截(将针对目标方法调用劫持下来,进而执行执行的操作),置于方法拦截的实现方案,不外乎两种代码注入类型,即编译时的静态注入和运行时的动态注入,本篇文章列出了几种常用的动态注入方案.这 ...
- MP(MyBatis-Plus)的自动填充功能
什么是自动填充 有些表中会有更新时间.创建时间.更新人或者创建人这些字段. 每次对数据进行新增.删除.修改时都需要对这些字段进行设置.传统的做法是在进行这些操作前,对Entity的字段进行set设置, ...
- 第9章 集合处理(数组、Map、Set)
目录 1. 数组 1.1 创建数组 1.2 在数组两端添加删除元素 1.3 在数组任意位置添加.删除元素 delete删除数组元素无效 使用splice方法增.删.改元素 1.4 数组的常用操作 数组 ...
- Linux下的upx命令学习
upx学习 今天我们来学习一款给应用加壳的软件,叫做upx(the Ultimate Packer for eXecutables) 首先我们先看下它**百科的释义: UPX (the Ultimat ...
- SpringBoot 集成Shiro之使用Redis缓存授权认证信息
因为用户认证与授权需要从数据库中查询并验证信息,但是对于权限很少改变的情况,这样不断从数据库中查询角色验证权限,对整个系统的开销很大,对数据库压力也随之增大.因此可以将用户认证和授权信息都缓存起来,第 ...
- 数学建模学习笔记 | matlab基本命令及用法
前言 数学建模对matlab水平的要求 了解matlab的基本用法,如常用命令.脚本结构.矩阵的基本操作.绘图等: 熟悉matlab的程序结构,能创建和引用函数: 熟悉常见模型的求解算法和套路: 自主 ...
- kali中安装漏洞靶场Vulhub
一.什么是vulhub? Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加 ...
- 【Oracle】10g查看trace生成文件位置及文件名称
select u_dump.value || '/' || db_name.value || '_ora_' || v$process.spid || nvl2(v$process.trace ...
- P2979 [USACO10JAN]奶酪塔Cheese Towers(完全背包,递推)
题目描述 Farmer John wants to save some blocks of his cows' delicious Wisconsin cheese varieties in his ...