CobaltStrike被广泛利用于渗透攻击中,可以与其他攻击工具(如Mimikatz、Metasploit和PowerShell Empire)联合使用,支持在网络中横向移动。

一、关于C2的阐述

CobaltStrike是实现C2的具体平台框架。C2全称为Command and Control,即命令与控制。这里分别从KILL CHAIN和MITRE ATT&CK对C2进行简单介绍。

在KILL CHAIN中,一次完整的渗透攻击过程被规范为以下七个阶段:

如上图所示,C2位于攻击流程的末端,是攻击者通过一系列手段成功进入受害者系统后,为实现受害机器(被植入恶意软件)与攻击者控制端通过网络进行交互的一个阶段,关键是拉取二段 exploit 进行驻留。

而MITRE ATT&CK从实现方式上对C2这一阶段进行了详细地介绍,它包括19种常用技术手段,主要为编码混淆、应用层协议利用、网络层协议利用、隧道技术、代理、单双向通信等。这些技术手段均可承载于某一攻击框架。这里C2的释义更接近于某种“基础设施”。

由此,C2架构也就可以理解为,恶意软件通过什么样的方式获取资源和命令,以及通过什么样的方式将数据回传给攻击者,以达到潜藏监控、命令控制的目的。

二、C2 Matrix介绍

一个合适的C2工具,往往可以更好地推进“行动”进展。C2 Matrix包含了用于测试各种C2 的实验室环境、有关每个C2的详细信息(包括如何安装和使用它们等)以及如何为红队交战和紫队演习建设攻击基础设施。

C2 Matrix收录颇丰,但所收录的工具版本普遍落后于当下。目前,业内应用最多者,当属KALI集成的Metasploit以及CobaltStrike。本文的实验研究主要围绕CobaltStrike进行。

三、CobaltStrike介绍

CobaltSrtike早期版本依赖Metasploit框架,而现在的CobaltStrike已经不再使用MSF,而是作为单独的平台使用。它分为客户端(Client)与服务端(Teamserver),服务端只有一个,客户端可以有多个,团队可进行分布式团队协作。

CobaltSrtike拥有多种协议主机上线方式,集成了提权、凭据导出、端口转发、Socket代理、Office攻击、文件捆绑、钓鱼等功能。同时,CobaltStrike还可以调用Mimikatz等其他常用工具,因此广受黑客青睐。

CobaltSrtik

四、特征讨论(网络维度与端点维度)

环境准备:

本次实验主要利用了CobaltSrtike Attacks中的MS Office Macro和Windows Executable两种攻击方式。

环境介绍:

· CobaltStrike Sever:kali

· CobaltStrike客户端:kali、MAC

靶机:win10

主要工具:

cobaltstrike4.2、office2016、wireshark、processhacker、火绒剑

1、CobaltStrike HTTP隧道通信与流量分析

CobaltSrtike4.0之前的版本支持http传输,木马基于TCP协议会产生明显的通讯特征,如独有的端口、协议数据格式等。

beacon与C2的通信逻辑

a)stager的beacon会先下载完整的payload并执行,stage则省略这一步。

b) beacon进入睡眠状态。结束睡眠状态后,它会用http-get方式发送一个metadata(具体发送细节可以在malleable_profile文件里的http-get模块进行自定义),metadata的内容包括目标系统的版本、当前用户等信息。

c)如果存在待执行的任务,C2会响应这个metadata并发布命令,beacon将会收到具体任务内容与一个任务id。

d)执行完毕后,beacon会将回显数据与任务id用post方式发送回C2(细节可以在malleable_profile文件中的http-post部分进行自定义),然后又会回到睡眠状态。

PCAP包:

PCAP分析:

· GET /cx 请求轮询指令

· HTTP 200 OK响应附带指令

· POST 提交指令响应数据

检测CobaltStrike网络指标

CobaltStrike默认配置文件通过伪造HTTPS流量规避安全监测,所以需要使用TLS检查,然后隔离bot通信流,完成后再通过检查HTTPS请求中的数据来识别可疑的通信流。

控制端发起desktop监控,该操作指令携带在TCP握手响应包里,靶机POST携带输出结果。

针对get、post轮询请求建立模型,检查与目标的通信频率,人工产生的流量不断变化,机器人产生的流量趋于一致且均匀。此外,在默认设置中,Sleeptime=60000ms,可根据这一设定尝试建立模型,检测出来自未修改默认设置的可疑CobaltSrtike攻击。

2、进程分析

释放进程rundll32.exe

Word关闭后进程依然在运行,控制端发起desktop监控,rundll32.exe又发起一个rundll32.exe。

火绒剑显示其远程地址是127.0.0.1,判断应该是做了混淆处理,此处可作为特征。

3、来自默认设置的一些信息证书

SSL/TLS证书

证书是teamserver主控端使用的加密证书,网上一些文章提到CobaltStrike默认的SSL/TLS证书是固定的,所以一般都使用这个证书作为特征值来发现CobaltStrike服务器。

CobaltSrtike证书查看

默认的证书具有很明显的特征。Eg:

O=cobaltstrike,;OU=AdvancedPenTesting;

CN=Major Cobalt Strike

https上线使用的证书

https上线使用的证书,并不是前文中修改的那一个!


Self-signed Certificates with SSL Beacon和Valid SSL Certificates with SSL Beacon是用来修改https上线使用的证书的。

默认证书特征

Fofa搜索:

cert="73:6B:5E:DB:CF:C9:19:1D:5B:D0:1F:8C:E3:AB:56:38:18:9F:02:4F"&&after="2020-01-01"

Censys.io搜索:

443.https.tls.certificate.parsed.fingerprint_sha256:87f2085c32b6a2cc709b365f55873e207a9caa10bffecf2fd16d3cf9d94d390c

结合搜索引擎,情报社区来判断。

全局选项

官方文档显示:“可将Malleable C2配置文件配置为具有许多全局选项,以调整流量和Beacon的行为。完整列表可在官方文档中找到。至少应设置sleeptime、jitter和useragent选项。”这一提示非常重要。

Eg:

3.1 sleeptime用于配置频率,以毫秒为单位;jitter用于按指定的百分比更改检查间隔,它接受0到99的值。

3.2 useragent配置将用于HTTP通信的useragent字符串。如果可以收集目标组织中主机正在使用的实际用户代理(向目标机构成员发送一封带有Web漏洞的电子邮件并监视后续GET请求中发送的user-agent值),使用该代理为好。先进的组织经常监视其环境中是否存在不规则的用户代理字符串,大多数公司仅使用了少数合法字符串。

Eg:set useragent "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 5.2) Java/1.5.0_08";

查看bot通信流的来源,检查生成TLS通信流的用户代理。乍一看用户代理貌似是合法的,“Mozilla/5.0 (Windows NT 6.1)”,这是Internet Explorer (IE)的值。然而,用户代理完全可以被伪造,一些机器学习算法可以推导出数据包流的真正用户代理。由此,我们得出一种检测恶意流量的方法。

如果使用的是明文HTTP流量或者是目标环境中存在SSL拦截,那么与环境不匹配的User-Agent值就会被发现。

3.3 dns_idle选项用于发送信号给DNS的信标没有任务在排队等候。我们可以设置任何IP,但是主机广泛使用Google DNS服务器作为DNS主机,因此我们将使用它(8.8.4.4)。同样,这是自定义目标DNS服务器的理想选择。

3.4 DNS隐蔽信道:使用Wireshark观察到,主机访问了nexus.office.live.com这种不规则域名,即可粗略猜测这是一个C&C服务器。

特征:

这里我们可以通过根据AV引擎或其他IOC给出的情报做二次判断。

4. 检测加密流量

JA3方法用于收集Client Hello数据包中以下字段的十进制字节值。

原理:这里相当于把支持的TLS扩展信息,都收集起来当作一个特征值来用(除了客户端发起的,还有关于服务器的JA3S)。

“这其实算一种降维打击,并且我们发现主流在线沙箱、主流IDS大都支持了JA3/JA3S指纹检测。”

其他

从一位使用者的角度来看,50050端口是否开启,也可成为确定CobaltSrtike server的一个佐证。CobaltSrtike能得到大量黑白帽子的使用,必然是隐蔽性极高,高度的定制化是其重要原因,我们很难通过某一特征判定是否为恶意流量,但众多模糊特征的聚合一定可以让我们看到不一样的东西。

五、检测规则以及分析思路

利用日志易SIEM安全大数据分析平台,根据相关特征制定C2检测规则。

1、进程特征利用——父子进程关联

分析平台根据四种进程分析部分,可以将分析结果归纳为五种可疑进程。实际使用时,分析平台会对进程进行检索,并将出现可疑进程的检索结果的机器ip写入观察列表。

2、U-A头利用

检索可疑useragent字符串,这些U-A头可以来自情报或机器学习算法推导,将这些可疑结果IP写入观察列表或作为搜索条件。

3、IOC利用

不同情报源的CobaltSrtike server IP将被写入观察列表。

4、特征联合利用

将步骤1和步骤2作为检索主体,联合步骤3进行检测,进一步提高检测精度。

5、联合设备告警

告警设备之间联合,设备与情报、本地规则联合,提高了告警精度,聚焦了入侵阶段与机器安全状态。

告警可在威胁处置展示,也可进行定制化推送。