由于对破解版的广泛使用,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.py
对 EbHm.vir
进行分析:
0x0001
表明这是一个通过 HTTP 进行通信的 Beacon0x0002
表明使用端口 80800x0008
表明使用服务器 192.254.79.710x0008
表明 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。