原文:

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

一、Cobalt Strike 公钥和私钥

Cobalt Strike 信标(客户端)和 Cobalt Strike 团队服务器 (C2) 之间的通信使用 AES 加密(即使它通过 HTTPS 进行)

公钥和私钥存储在文件 .cobaltstrike.beacon_keys 中。这些密钥是在首次使用 Cobalt Strike 团队服务器软件时生成的。

img

二、使用

捕获文件:使用文章中的数据包进行测试。

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

第一步 找到信标

1
http.request.uri matches "...$"

img

第二步 查看是否是CS生成的shellcode

Metasploit 和 Cobalt Strike 为 http(s) shell 生成 shellcode。在这个 shellcode 中找到的 URL 有一个由 4 个随机字母数字字符组成的路径。但它们并不是完全随机的:它们的 8 位校验和是一小组常数.

使用metatool.py工具进行检查

https://blog.didierstevens.com/2021/04/18/metatool-py/

img

第三步 将beacon转化成vir文件

l 完整信标的下载被捕获:

img

l 提取并下载

img

img

第四步、使用工具 1768.py对其进行分析

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

1768.py 是一个可以解码/解密 Cobalt Strike beacon并提取其配置的工具

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
0x0001 表明这是一个通过 HTTPBeacon 进行通信的 

0x0002 表明使用端口 8080

0x0003 表明是睡眠时间是60s

0x0005 表明抖动系数为 0%

0x0007 使用的公钥

0x0008 表明使用服务器 192.254.79.71

0x0008 表明 GET 请求使用 /ptj

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

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

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

解密的元数据及原始密钥:caeab4f452fe41182d504aa24966fbd0。使用此密钥来解密流量

1
Python  cs-decrypt-metadata.py  [cookie]

【此元数据使用信标配置中的公钥(选项 0x0007)进行 RSA 加密,私钥来自已经泄露的】

img

第六步 使用 cs-parse-http-traffic.py 解密流量

l 找到c2发送的命令

数据包 6034 和 6703是信标本身的下载,并且通信未加密。因此,我们将使用以下显示过滤器过滤掉这些数据包:

1
http and ip.addr == 192.254.79.71 and frame.number > 6703

img

从第一个流开始,找到第一个有响应内容的

img

l 使用工具 解析命令

https://github.com/DidierStevens/Beta/blob/master/cs-parse-http-traffic.py

img

img

三、测试

流量包来源:cs4.3 http

​ 使用cs4.3打包进行测试是否可破解cs流量

1、流量包

​ 数据包样例

img

2、使用1768.py对其进行分析

攻击机使用了HTTP的beacon,受害机会连接192.168.24.129的8888端口,GET请求路径是/ptj,POST请求路径是/submit.php

img

3、使用工具cs-decrypt-metadata.py来找到原始密钥 报错

​ 说明密钥可能错误,可以将自己的密钥配置近代码中

img

使用进程内存解密流量

https://blog.nviso.eu/2021/11/03/cobalt-strike-using-process-memory-to-decrypt-traffic-part-3/

4、cs-parse-http-traffic.py提取此加密字符串

https://github.com/DidierStevens/Beta/blob/master/cs-parse-http-traffic.py

img

img

5.DMP文件

https://docs.microsoft.com/en-us/sysinternals/downloads/procdump

使用tasklist找到进程PID

执行命令[将进程内容转储存成dmp文件]

1
procdump.exe -mp 3788[PID]

6、cs-extract-key.py获取密钥

https://github.com/DidierStevens/Beta/blob/master/cs-extract-key.py

元数据包含原始密钥:16 个随机字节。AES 和 HMAC 密钥是通过计算原始密钥的 SHA256 值从该原始密钥导出的。SHA256 值的前半部分是 HMAC 密钥,后半部分是 AES 密钥。

1
python cs-extract-key.py -t 加密字符串【4】 xxx.dmp

img

7、使用恢复的 AES 和 HMAC 密钥来解密流量

https://github.com/DidierStevens/Beta/blob/master/cs-parse-http-traffic.py

1
Python cs-parse-http-traffic.py -k [sha256 ray key] pcap

img