Cobalt Strike|Beacon原理浅析
2020-03-04 15:26:36 Author: www.secpulse.com(查看原文) 阅读量:397 收藏

Hello大家好哇,我是你们可爱的lmn小姐姐,今天我们来研究一下Beacon的一些基础知识,如果有师傅没有看过这个系列之前的文章,可以点击下方图片阅读

Cobalt Strike 作为一种后渗透工具,可以完成侦察鱼叉式钓鱼浏览器代理等攻击。上文中我们介绍了Cobalt Strike 分为客户端服务器两部分,服务器端被称之为Team Server。Team Server既是Beacon payload的控制器,也是Cobalt Strike提供社工功能的主机。Team Server还存储了Cobalt Strike收集的数据以及日志记录。工作模式如下图所示:

很多同学在Cobalt Strike教程中见到最多的词就是Beacon,我们今天主要来介绍一下Beacon和Listener。

0x00 Beacon简介

Beacon是Cobalt Strike运行在目标主机上的payload,Beacon在隐蔽信道上我们提供服务用于长期控制受感染主机。它的工作方式与Metasploit Framework Payload类似。在实际渗透过程中,我们可以将其嵌入到可执行文件添加到Word文档或者通过利用主机漏洞来传递Beacon。

Beacon的功能包括以下几点:

1. 使用HTTP或DNS检查是否有待执行任务

2. 可连接到多个C2域名

3. 能够在分段传输后自动迁移

4. 与Cobalt Strike紧密集成,通过社工、主机漏洞和会话来传递Beacon

Beacon的中文名为信标,像是在网络中告诉我们:“嘿,我是肉鸡,我在这...”。我们可以通过下图来看Beacon的工作原理

Beacon在目标主机上运行之后,会主动我们提前设置好的Listener发送请求信息(叮,您有新的主机已上线)。

Team Server控制器接收到请求后会检查是否有待执行的任务,如果有就会将任务下发到Beacon

此处值得一提的是payloading staging,很多攻击框架都是使用分段的shellcode,以防止shellcode过长,覆盖到了上一函数栈帧的数据,导致引发异常。要说分段shellcode就不得不提stager,stager是一段很精短的代码,它可以连接下载真正的payload并将其注入内存我们使用stager就可以解决shellcode过长的问题。

Cobalt Strike中也支持分段payload

关于分段payload优势与劣势的问题,本文不予讨论,这就像是选择鸡还是鸡蛋一样,Cobalt Strike的作者最终选择了鸡蛋,所以.....在Cobalt Strike 3.5.1后的版本可以通过Malleable C2中添加host_stage选项,以限制分段payload

在Cobalt Strike 4中应该尽可能多的使用unstage,一方面以保证安全性(因为你无法确保stager下载的stage是否受到中间人攻击,除非像MSF一样使用SSL保证安全性)。另一方面如果我们通过层层的代理,在内网进行漫游,这个时候使用分段的payload如果网络传输出现问题,stage没有加载过去,可能就会错失一个Beacon,unstage的payload会让人放心不少。

更多关于stage的参考资料:

 
 
https://blog.cobaltstrike.com/2016/06/15/what-is-a-stageless-payload-artifact/

Beacon有两种通信策略(与团队服务器通信-CS 中以团队服务器作为 C2)

1. 异步式通信 = 异步模式下通信频率低、速度慢,如上图所示:Beacon会主动请求任务列表、然后进入SLEEP状态。

2. 交互式通信 = C2 对 Beacon 实时控制

摘抄(Plagiarism)雪师傅文章😂

0x01 Beacon分类

根据内置Listener的分类可以将Beacon分为:

1. HTTP and HTTPS Beacon

2. DNS Beacon 

3. SMB Beacon

Listener是用来接收Beacon请求信息的Cobalt Strike模块,本文仅介绍Cobalt Strike内置Listener。

1. HTTP and HTTPS Beacon 

HTTP and HTTPS Beacon非常简单,关键是Beacon通过GET请求来下载任务。

需要强调的一点是这两个窗口中输入的地址作用并不相同。

2. DNS Beacon

DNS Beacon是我最喜欢的方式,没有之一。Cobalt Strike使用DNS来完成Beacon check in的工作,如果DNS返回的记录解析为有需要执行的任务,那Beacon会使用HTTP来完成获取任务这一过程。具体原理参看下图:

需要注意的是DNS Beacon现在已经有两种方式(第二种方式是使用TXT记录)传输Beacon和task list,关于此内容后期的DNS Beacon文章中会特别强调,欢迎师傅关注后续文章

3. SMB Beacon

SMB Beacon需要连接到Parent Beacon使用,所有任务均从parent Beacon接收,并通过parent Beacon返回任务结果。它使用了Windows的命名管道,命名管道是Windows进程间通信机制,允许两者间通信、互相查看和操作对方的文件。Cobalt Strike使用这种方式在进程与进程或主机与主机之间通信,因为基于SMB协议所以被称之为SMB Beacon。

本文对SMB Beacon不详细展开,欢迎师傅关注下一篇文章,专门讲解SMB Beacon。

0x02 Beacon安全性

设想这样一个问题,如果有人劫持了你的通信流量,并可以监听到你的Beacon向Team Server传回的数据,这时会发生什么呢?

答案是什么都不会发生。因为Beacon内置了多种安全特性(除了第四条):

1. Beacon stage 在连接时会验证Team Server

2. Beacon 的任务请求和任务输出都是被加密的

3. Beacon 有重放保护机制

4. Beacon stagers 没有任何安全机制

当你启动Team Server并创建了Beacon Listener时,Team Server就会创建公钥对来保证后续传输过程的安全性。我们以分段传输payload为例,详细讲解一下Cobalt Strike的安全特性。

1. 当stager下载stage时公钥也会被一起发送:

2. 当Beacon stage准备check in的时候,第一步就是要发送关于beacon session的元数据(Metadata)元数据中包含了用户、PID、电脑名称、IP地址等等基础信息,同时元数据中也包括了Beacon stage创建的一个随机会话密钥。为了保证安全性,Beacon stage会使用公钥加密元数据(含会话密钥),这意味着只有Team Server才能够解密该数据包。

3. 当Beacon从Team Server下载任务的时候,团队服务器会使用会话密钥加密这些任务,Beacon stage也会使用会话密钥来解密任务列表。

4. 同样在返回任务结果的时候,Beacon stage也会使用会话密钥对任务输出加密。

可以看到Raphael在设计Cobalt Strike的时候已经充分的考虑到了它的安全性问题,所以..师傅放心用吧,wink~

0x03 致谢

本文参考引用修改了以下文章的部分或节选内容,感谢各位师傅。

强烈推荐雪师傅的CS硬文:http://blog.leanote.com/post/snowming/62ec1132a2c9 
探寻Metasploit Payload模式背后的秘密:https://cloud.tencent.com/developer/news/335831 
Out of the Blue:https://www.recordedfuture.com/identifying-cobalt-strike-servers/ 
Cobalt Strike系列2listener与payload:https://blog.csdn.net/weixin_42140534/article/details/104163391 
SMB Beacon Setup and Use:https://www.youtube.com/watch?v=J3BEeIx6Xzk 
Volatility Plugin for Detecting Cobalt Strike Beacon:https://blogs.jpcert.or.jp/en/2018/08/volatility-plugin-for-detecting-cobalt-strike-beacon.html 
Meterpreter载荷执行原理分析:https://xz.aliyun.com/t/1709/ 
CobaltStrike基本功能与使用:https://www.jianshu.com/p/8d823adbc6b5

本文作者:物联网IOT安全

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


文章来源: https://www.secpulse.com/archives/124454.html
如有侵权请联系:admin#unsafe.sh