出品|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去除特征的更多相关文章

  1. CobaltStrike去除流量特征

    CobaltStrike去除流量特征 ​普通CS没有做流量混淆会被防火墙拦住流量,所以偶尔会看到CS上线了机器但是进行任何操作都没有反应.这里尝试一下做流量混淆.参考网上的文章,大部分是两种方法,一种 ...

  2. 【Machine Learning】机器学习の特征

    绘制了一张导图,有不对的地方欢迎指正: 下载地址 机器学习中,特征是很关键的.其中包括,特征的提取和特征的选择.他们是降维的两种方法,但又有所不同: 特征抽取(Feature Extraction): ...

  3. <转>特征工程(二)

    出处: http://blog.csdn.net/longxinchen_ml/article/details/50493845, http://blog.csdn.net/han_xiaoyang/ ...

  4. 决策树和基于决策树的集成方法(DT,RF,GBDT,XGBT)复习总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 内容: 1.算法概述 1.1 决策树(DT)是一种基本的分类和回归方法.在分类问题中它可以认为是if-the ...

  5. 浅谈关于特征选择算法与Relief的实现

    一. 背景 1) 问题 在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果: 1.     特征个数越多,分析特征.训练模型所需的时间就越 ...

  6. 【深度学习系列】用PaddlePaddle和Tensorflow实现GoogLeNet InceptionV2/V3/V4

    上一篇文章我们引出了GoogLeNet InceptionV1的网络结构,这篇文章中我们会详细讲到Inception V2/V3/V4的发展历程以及它们的网络结构和亮点. GoogLeNet Ince ...

  7. 【算法】Normalization

    Normalization(归一化) 写这一篇的原因是以前只知道一个Batch Normalization,自以为懂了.结果最近看文章,又发现一个Layer Normalization,一下就懵逼了. ...

  8. 『计算机视觉』各种Normalization层辨析

    『教程』Batch Normalization 层介绍 知乎:详解深度学习中的Normalization,BN/LN/WN 一.两个概念 独立同分布(independent and identical ...

  9. google hack使用集锦

    转载:https://blog.csdn.net/weixin_42127015/article/details/84472777 关于google hack的几个基础过滤器使用[请务必谨记,过滤器虽 ...

随机推荐

  1. redis基础-Remote Dictionary Server

    Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念. Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),可以通过配置dat ...

  2. Kubernetes官方java客户端之四:内部应用

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. ES6模板字符串及字符串的扩展方法

    一.ES6模板字符串 传统定义字符串的方式是: const str='hello es2015,this is a string' ES6新增了一种定义字符串的方式用反引号进行标识 const str ...

  4. MFC(c++大作业)基本对话框的使用(求平均成绩)

    OOPEx2Dlg.cpp // OOPEx2Dlg.cpp : 实现文件 // #include "stdafx.h" #include "OOPEx2.h" ...

  5. 2018年第九届蓝桥杯B组(201803-----乘积尾零)

    标题题目:乘积尾零 如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零? 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 79 ...

  6. Go 的定时任务模块 Cron 使用

    前言 新项目是Golang作为开发语言, 遇到了些新的坑, 也学到了新的知识, 收获颇丰 本章介绍在Go中使用Cron定时任务模块来实现逻辑 正文 在项目中, 我们往往需要定时执行一些逻辑, 举个例子 ...

  7. PAT Advanced 1003 Emergency 详解

    题目与翻译 1003 Emergency 紧急情况 (25分) As an emergency rescue team leader of a city, you are given a specia ...

  8. WCNSS_qcom_cfg.ini WIFI配置文件参数详细解析

    STA相关的一般配置 参数 含义 最小值 最大值 默认值 gNeighborLookupThreshold 1 触发roam scan发生的条件在WCNSS_qcom_cfg.ini文件中gNeigh ...

  9. zabbix-server安装部署配置

    zabbix-server安装部署配置 zabbixLinux安装部署安装脚本 1 一步一步部署 1.1 安装zabbix仓库源 这里安装阿里的zabbix仓库地址 选用zabbix版本3.4 rpm ...

  10. 中间件:ElasticSearch组件RestHighLevelClient用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.基础API简介 1.RestHighLevelClient RestHighLevelClient的API作为ElasticSearch备 ...