由于对破解版的广泛使用,NVISO 的研究人员发现公网的 Cobalt Strike 服务器中有超过四分之一使用的加密密钥对都是相同的,使用这些密钥就可以对部分加密 Cobalt Strike 流量进行解密。

Cobalt Strike Beacon 与 Cobalt Strike Server 之间的通信使用 AES 进行加密,而 AES 加密的密钥由 Beacon 生成。

Beacon 使用 RSA 公钥加密元数据块(默认为 Cookie),C&C 服务器通过私钥进行解密。

公钥和私钥都存在 .cobaltstrike.beacon_keys 文件中,该文件是在第一次使用 Cobalt Strike Team Server 时生成的。

通过对公网暴露的 Cobalt Strike 服务器进行分析识别,发现许多服务器使用相同的公钥,这意味着他们使用的 .cobaltstrike.beacon_keys 文件相同,公私钥都相同。

因为这些人使用的都是 Cobalt Strike 的破解版,而在第一次使用时生成的 .cobaltstrike.beacon_keys 文件也被包含在破解版中共享出去了。

通过 VirusTotal 进行样本检索,发现了 10 个破解版 Cobalt Strike 的 ZIP 压缩包,这些压缩包中根据 .cobaltstrike.beacon_keys 提取了 6 个 RSA 密钥对。其中有 2 个密钥对被广泛使用,发现的 Cobalt Strike 服务器中有 25%(1500 余个)使用的都是这二者之一。

通过 1768.py 提取 Cobalt Strike Beacon 的配置时会显示是否为已知的私钥。

1768.py

https://blog.didierstevens.com/2021/10/11/update-1768-py-version-0-0-8/

通过这些私钥可以用来解密元数据和 C&C 流量:

使用 Brad Duncan 在 Malware-Traffic-Analysis.net 上共享的流量文件 2021-02-02-Hancitor-with-Ficker-Stealer-and-Cobalt-Strike-and-NetSupport-RAT.pcap.zip 作为示例。

2021-02-02-Hancitor-with-Ficker-Stealer-and-Cobalt-Strike-and-NetSupport-RAT.pcap.zip

https://www.malware-traffic-analysis.net/2021/02/02/index.html

流量文件中包含 Cobalt Strike Beacon 与 C&C 服务器通信的加密 HTTP 流量。

首先使用 Wireshark 打开文件,通过 Stager Shellcode 查找完整 Beacon 的下载。Beacon 有多种形式,主要可分为两类:

  • Stager Shellcode,用于下载 Beacon 的 Shellcode

  • Beacon,可以反射加载的 PE 文件

使用 http.request.uri matches */....$ 进行过滤:

GET 请求中下载 Beacon 的路径确为 Cobalt Strike,可以使用 metatool.py 进行检查:

这确实是 32 位 Beacon 下载的有效路径,响应也被捕获:

导出文件:

使用 1768.pyEbHm.vir 进行分析:

  • 0x0001 表明这是一个通过 HTTP 进行通信的 Beacon

  • 0x0002 表明使用端口 8080

  • 0x0008 表明使用服务器 192.254.79.71

  • 0x0008 表明 GET 请求使用 /ptj

  • 0x000a 表明 POST 请求使用 /submit.php

  • 0x000b 表明解密之前不对数据执行任何操作

不过好消息是该恶意软件使用了已知的私钥,可以进一步解密分析。通过 http and ip.addr == 192.254.79.71 过滤相关流量:

相关的 HTTP 流量中的前两个数据包是下载 Beacon,主要过滤分析后面的流量(http and ip.addr == 192.254.79.71 and frame.number>6703)。

这也可以发现网络行为与配置文件是吻合的,每分钟都发起一个 GET 请求。

  • 0x0003 表明睡眠时间为 60 秒

  • 0x0005 表明抖动系数为 0%

跟随第一个 HTTP 流可见:

/ptj 的 GET 请求收到没有任何数据的 200 响应,这意味着 C&C 服务器没有任何相关的命令。

Cookie 看起来像是一个 base64 字符串,通过配置文件也可知这是 RSA 公钥加密的元数据。通过 cs-decrypt-metadata.py 即可解密元数据:

cs-decrypt-metadata.py

https://blog.didierstevens.com/2021/10/22/new-tool-cs-decrypt-metadata-py/

元数据解密后可以找到原始密钥 caeab4f452fe41182d504aa24966fbd0,使用该密钥即可解密流量。当然,元数据中还包含计算机名、用户名等信息。

跟踪 9379、9383 数据包的 HTTP 流,可以发现攻击者发送的第一个命令:

响应数据可以看到是加密的:

过滤掉与 C&C 无关的 HTTP 流量,使用原始密钥进行解密:

9383 数据包中是 SLEEP 指令,睡眠时间为 100 毫秒且抖动系数为 90%。

9707 数据包中包含未知指令,但从 9723 数据包中包含目录输出猜测未知的命令应该是查看目录的命令。

流量已经解密,后续的命令就不再赘述。最后一个命令是查看进程:

分析示例使用的是 Brad Duncan 在半年前在沙箱中运行恶意 Cobalt Strike Beacon 生成的流量数据,通过已知的私钥来解密流量。相关的公私钥对可以在提供的工具里查看详情,该研究人员围绕 Cobalt Strike 展开了深入的分析,NVISO 也披露了一系列狩猎 Cobalt Strike 的文章对业界都很有帮助。

NVISO 原文

https://blog.nviso.eu/2021/10/27/cobalt-strike-using-known-private-keys-to-decrypt-traffic-part-2/

声明:本文来自威胁棱镜,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。