破解版密鑰相同,部分CobaltStrike加密流量可解
由于對破解版的廣泛使用,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 請求使用/ptj0x000a表明 POST 請求使用/submit.php0x000b表明解密之前不對數據執行任何操作
不過好消息是該惡意軟件使用了已知的私鑰,可以進一步解密分析。通過 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 的文章對業界都很有幫助。