15

Cobaltstrike去除特征

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzU1NjgzOTAyMg%3D%3D&%3Bmid=2247489458&%3Bidx=1&%3Bsn=22d7e7449871485c299c8deb0120116b
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文作者: 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目录

fMfyInm.png!mobile

查看keytool -list -v -keystore cobaltstrike.store 证书情况,输入默认密码123456回车,可以看到所有者、发布者中Cobalt Strike相关字样。

bAVzya2.png!mobile

然后修改 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。

U7JZNvj.png!mobile

这时发现所以关于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的通信基础:

A7nYJfv.png!mobile

从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

QJzYf2.png!mobile

绿色为运行成功,黄色的为警告,红色的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模块:

3iYNRvV.png!mobile

如上图所示。设定了victim的beacon发送给c2的metadata的相关配置。

1.在client部分中,先设置了多个http header头,然后在uri中存储一个参数。把Referer伪造成Google

2.然后又设置了在metadata数据在传输的时候,先base64加密然后将所有的值填写在Cookie字段中。

3.在server部分,先设置多个header头。然后更改相应内容然后base64编码,然后把数据放在在body里。

http-post模块:

YVzqIn.png!mobile

先说下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

zyMv2qr.png!mobile

生成一个 Windows后门可执行文件EXE。

Q7vuUfJ.png!mobile

然后把这个后门放到靶机里使其上线。

然后;

打开 wireshark,然后开启抓包

这里要做下筛选:

http and tcp.port == 80 #我这里CS监听端口是80 可以根据自己需求定制

3YriiuZ.png!mobile

然后  进入到被控机的beacon模式下。

执行命令 shell  dir

FBNNBbr.png!mobile

然后发现已经抓取到包,查看下包的内容。

右键选定 ---  follow --- TCP Tream

7NJVvuU.png!mobile

此时发现Referer为Google 证明实验成功,成功伪造流量。

下面的是基于JQuery的配置文件作为基础配

下载:

git clone https://github.com/threatexpress/malleable-c2.git

然后运行语法:

./c2lint [/path/to/my.profile]   #这个路径是Malleable的配置文件路径

我这里用的是CS4.0,所以选用这个profile

RVZfyqB.png!mobile

然后配置文件信息

参考前面的 配置文件名称,sleep时间、用户代理 ,同上 user-agent还是使用目标机的真实的user-agent值。

aAZN3i6.png!mobile

SSL证书设置 :

此设置控制用于HTTPS通信的SSL证书。如果可能的话,请为你正在使用的域使用真实的,正确发布的SSL证书。LetsEncrypt可以发布所有主要操作系统和浏览器都信任的免费SSL证书,并且会让防御者更难以检查Beacon流量。

YjAveia.png!mobile

SpawnTo 过程 :

spawnto设置控制beacon生成的进程以便后渗透利用工作,以及何时使用spawn命令。该命令也可以使用命令行参数。

set %windir%\\sysnative\\svchost.exe -k localservice -p -s fdPHost

qeqeyiM.png!mobile

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

a6FfYjq.png!mobile

分段过程(staging process)

可以自定义信标分段过程。分段过程是用于完全加载信标的代码存根。

了解有关Beacon分段过程的更多信息,

请阅读这篇文章:

https://blog.cobaltstrike.com/2013/06/28/staged-payloads-what-pen-testers-should-know/

幸运的是,可以修改Beacon stager的HTTP特性。更改这些设置以模仿单个合法的HTTP请求/响应。

Yj67rq7.png!mobile

在此示例中,请求将发送到

/jquery-3.3.1.slim.min.js

或/jquery-3.3.2.slim.min.js

(取决于目标进程体系结构),以开始分段过程。构建HTTP服务器参数以模仿jQuery请求。Beacon命令和payload被混合到jQuery javascript文本块中。从CDN请求jQuery时,客户端发出一个合理的请求。

很多网站发出请求的实现方式如下:

<script src =“jquery-3.3.1.min.js”> </ script>

可以将URI修改为类似其他CDN的形式。例如,你可以修改http-stager,使其看起来好像是从Microsoft jQuery CDN中提取的。

<script src =“https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js”> </script>

在某些情况下,使用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”中的一些建议。

BBbQbai.png!mobile

http-get&http-post

http-get 和 http-post 修改格式和上面基本类似

a6vMjqj.png!mobile

ZFVNvu.png!mobile

这里  都是伪造成 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流量符合你的预期

VBNFba2.png!mobile

这里检测没问题 流量特征都已经被修改。

还有一种 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

学习更多文章, 加入内网小组,扫描二维码!

6JRzYr.png!mobile

扫描下方二维码邀请你进入内部微信群!

3UZfyuE.png!mobileJr2mIn6.png!mobile

riyQfyz.jpg!mobileiq6ZneA.png!mobile

目前30000+人已关注加入我们

JrqqYnb.gif!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK