Cobalt Strike基础设施


Cobalt Strike基础设施

在基础设施方面,我们希望设置这样一个可重用且高度灵活的环境。Cobalt Strike 支持重定向,当你的 Cobalt Strike 使用的 C2 域名被销毁了,你不需要创建并启用一个新的环境,只需要替换一个新的 C2 域名。你可以在这里找到更多的使用 socat 配置这些重定向器的信息:链接1 & 链接2

image-20200620234934528

为了使你更好的重定向,我们可以使用域名前置(域名幌子)。域名前置是使用其他的域名和基础设施的技术作为控制器重定向的技术集合(参考链接)。这可以通过使用流行的内容分发网络(CDNs)来实现,如亚马逊云的 CloudFront或其他的 Google Hosts 来隐蔽我们的流量源。这在过去曾被不同的攻击者所利用过(参考链接)。通过使用这些高信誉域名,无论 HTTP 或 HTTPS 的任何流量,看起来都像是它正在与这些域通信,而不是与我们的恶意 C2 服务器通信。这一切是如何运作的?用一个比较抽象的例子来说,你的所有流量将被发送到 CloudFront 的一个主要完全限定域名(FQDNs),例如 a0.awsstatic.com,它是 CloudFront 的主要域名。修改请求中的主机header 将把所有流量重定向到我们的 CloudFront 分发(CloudFront distribution),后者最终会将流量转发到我们的Cobalt Strike C2服务器上(参考链接)

image-20200620235134706

通过更改 HTTP 主机的 header,CDN 将很轻松的的的地把流量传输回到正确的服务器。红队一直使用这种技术通过使用高信誉域名来隐藏 C2 服务器的流量。

另外两个支持域名前置的两个不同公司的优秀资源

CyberArk 还写了一篇很好的博客文章,在文章里他介绍了如何使用谷歌的应用产品来使你的流量看起来是流经了 www.google.com, mail.google.com 或者 docs.google.com.Vincent Yiu 写了一篇关于如何使用阿里巴巴 CDN 来支持自己的域名前置攻击的文章。Cobalt Strike 不是唯一可以支持域名前置的工具,也可以通过 Meterpreter 来完成(参考链接)。

尽管不是基础架构的一部分,但是我们还是应该要理解 beacon 是如何在内部环境中工作的。在操作安全方面,我们应该避免建立会被轻易发现并清除的持久连接。作为一名红队成员,我们必须假设我们的一些客户端是会被蓝队发现的。如果我们让所有的主机都与一个或两个 C2 服务器通信,蓝队很容易就可以把整个基础设施连根拔除。幸运的是,Cobalt Strike 支持内网主机之间使用基于 SMB 的 Beacon 来进行交互。这允许你让一台受感染的计算机与你的C2 服务器进行正常且合适的 beacon 连接,并使内部网络上的所有其他的服务器通过 SMB 协议与最初受感染的主机进行通信。采用这种连接方式,当蓝队检测到一个二级系统有问题并进行取证分析,他们可能会无法识别与这次攻击相关的 C2 服务器域名。Cobalt Strike 可以操纵你的 Beacon 通信,这对红队成员来说是一个非常有用的特性。使用自定义 C2 配置文件,你可以让所有来自受感染主机系统的流量看起来和普通流量无异。现在我们会发现越来越多的内网环境中会针对第7层网络应用层进行过滤。很多时候蓝队在这层中找寻那些网络通信中的异常流量,那么我们怎样才能让我们的C2通信变得如同正常的 Web 流量呢?这就是可定制 C2 配置文件发挥作用的地方。看看这个例子。阅读这个例子,你会看到一些显而易见的信息:

我们可以看出这将会产生带有URI路径的HTTP请求:
set uri “/s/ref=nb_sb_noss_1/167-3294888-0262949/field-keywords=books”;
主机 header 设置为 Amazon:
header “Host” “www.amazon.com”;
甚至一些自定义服务器的 header 也从 C2 服务器发回:
header “x-amz-id-1” “THKUYEZKCKPGY5T42PZT”; 
header “x-amz-id-2” “a21yZ2xrNDNtdGRsa212bGV3YW85amZuZW9ydG5rZmRuZ2t

现在很多红队已经在许多不同的活动中使用了这些配置文件,许多安全厂商已经给所有常见的自定义配置文件创建了指纹签名。为了解决这个问题,我们能做的是: 确保修改了配置文件中的所有静态字符串,确保更改了所有 UserAgent 信息,使用真实的证书配置 SSL(不要使用 Cobalt Strike 默认的 SSL 证书),调整抖动率,并更改客户端的的 beacon 时间。 最后一个注意事项是确保通过 POST(http-post)命令进行通信,因为如果不这样做可能会导致使用自定义配置文件时出现很多问题。 如果你的配置文件注明了通过 http-get 进行通信,它仍然有效,但上传大文件将一直被限制。 请记住,GET 请求通常限制在2048个字符以内。SpectorOps 安全团队还创建了可定制混淆 C2 配置文件的项目.

这个脚本可以将 Cobalt Strike 的配置文件进行混淆来绕过一些基于签名检测的软件,其原理是将变量替换为提供的字典中的随机字符串,然后输出新的 Malleable C2 配置文件


Author: Free04kSec
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Free04kSec !
 Previous
深入理解RMI原理 深入理解RMI原理
深入理解RMI原理定义:RMI(Remote Method Invoke远程方法调用),为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也
2020-06-22 Free04kSec
Next 
Java反序列化学习 Java反序列化学习
Java反序列化学习0x00前言Java中只需要实现java.io.Serializable或者java.io.Externalizable接口即可执行序列化操作 0x01构造序列化/反序列化构造一个调用类,其中,Exployee类实现了j
2020-06-10 Free04kSec
  TOC