Cobaltstrike去除特征

本文作者: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时,客户端发出一个合理的请求。


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

<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”中的一些建议。


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



本文作者:Ms08067安全实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/148377.html

Tags:
评论  (0)
快来写下你的想法吧!

Ms08067安全实验室

文章数:51 积分: 154

已出版《Web安全攻防》《内网安全攻防》《Python安全攻防》《JAVA代码安全审计(入门篇)》等书

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号