破解版密钥相同,部分CobaltStrike加密流量可解

admin 2021年11月1日01:15:50评论191 views字数 2565阅读8分33秒阅读模式

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

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

破解版密钥相同,部分CobaltStrike加密流量可解

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 的配置时会显示是否为已知的私钥。

破解版密钥相同,部分CobaltStrike加密流量可解

破解版密钥相同,部分CobaltStrike加密流量可解

1768.py

https://blog.didierstevens.com/2021/10/11/update-1768-py-version-0-0-8/
通过这些私钥可以用来解密元数据和 C&C 流量:

破解版密钥相同,部分CobaltStrike加密流量可解

使用 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 */....$ 进行过滤:

破解版密钥相同,部分CobaltStrike加密流量可解

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

破解版密钥相同,部分CobaltStrike加密流量可解

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

破解版密钥相同,部分CobaltStrike加密流量可解

导出文件:

破解版密钥相同,部分CobaltStrike加密流量可解

破解版密钥相同,部分CobaltStrike加密流量可解

使用 1768.py 对 EbHm.vir 进行分析:

破解版密钥相同,部分CobaltStrike加密流量可解

  • 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 过滤相关流量:

破解版密钥相同,部分CobaltStrike加密流量可解

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

这也可以发现网络行为与配置文件是吻合的,每分钟都发起一个 GET 请求。
  • 0x0003 表明睡眠时间为 60 秒

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

破解版密钥相同,部分CobaltStrike加密流量可解

跟随第一个 HTTP 流可见:

破解版密钥相同,部分CobaltStrike加密流量可解

对 /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/

破解版密钥相同,部分CobaltStrike加密流量可解

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

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

破解版密钥相同,部分CobaltStrike加密流量可解

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

破解版密钥相同,部分CobaltStrike加密流量可解

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

破解版密钥相同,部分CobaltStrike加密流量可解

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

9707 数据包中包含未知指令,但从 9723 数据包中包含目录输出猜测未知的命令应该是查看目录的命令。
流量已经解密,后续的命令就不再赘述。最后一个命令是查看进程:

破解版密钥相同,部分CobaltStrike加密流量可解

分析示例使用的是 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/

原文始发于微信公众号(威胁棱镜):破解版密钥相同,部分CobaltStrike加密流量可解

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年11月1日01:15:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   破解版密钥相同,部分CobaltStrike加密流量可解https://cn-sec.com/archives/606687.html

发表评论

匿名网友 填写信息