CobaltStrike的檢測
CobaltStrike是一款滲透測試神器,支持http/https、tcp、smb等多種通信方式。
在hvv防守方、應急響應等場景中,都有檢測CobaltStrike的需求。
現有檢測方案
使用特征碼掃描
- https://github.com/Apr4h/CobaltStrikeScan
- https://github.com/CCob/BeaconEye
- https://github.com/jas502n/cs_yara
通常使用yara規則去匹配內存或者文件,但缺點如不支持3.x、只支持http/https的beacon等
內核檢測方案
- [2021]檢測Cobalt Strike只使用40行代碼
其技術原理是
1. 在內核通過PsSetLoadImageNotifyRoutine設置鏡像加載通知回調,之后任何exe,dll的加載都會被檢測。
2. 而CobaltStrike使用sRDI方案,shellcode會調用LoadLibrary來加載需要dll,此時獲取堆棧回溯
3. 檢測調用者的內存屬性為是否為private,是否可寫
但缺點是
1. 內核模塊啟動要先與CobaltStrike,如果已經運行則無法檢測
2. 在客戶業務環境中內核模塊要保證穩定性兼容性,還要解決數字簽名等問題
CobaltStrike特征分析
鑒于以上兩種方案各有缺點,CobaltStrike的特征到底是什么?
我認為有兩個通用的特征
1. 對于http/https通信而言CobaltStrike均使用WinINet.dll來進行通信
2. 無論選擇exe/dll/raw等格式,CobaltStrike內存均會sRDI
通過ETW記錄WinINet日志
ETW可以記錄WinINet的進程id、線程id、url、請求頭、返回狀態碼、返回頭等信息
在應急中,可以通過進程id、線程id、url進一步排查,進而阻斷其網絡和進程。
手動操作步驟
1. 打開事件查看器
2. 打開菜單 查看->顯示分析和調試日志
3. 進入 應用程序和服務日志->Microsoft->Windows->WinINet(Microsoft-Windows-WinINet)
4. 右鍵啟動 Microsoft-Windows-WinINet/UsageLog 日志

wininetlog
工具
用C#寫了個簡單的工具WinINetLogger

wininetlogger
通過應用層的堆棧回溯判斷sRDI和CobaltStrike
sRDI本身具有很強的隱蔽性,在內存中可以任意編碼、加密。
但正如前文提到的內核檢測方案中,其調用系統api時,調用者的內存屬性有問題。
正常調用系統api時,調用者內存屬性一般為IMAGE類型,并且不可寫。
但也有例外如C#和V8等包含jit即時編譯的代碼。
此時就需要結合CobaltStrike自身的特征
- http/https時,堆棧回溯只有兩種情況
- 1. 睡眠時:sRDI -> kernel32.dll!Sleep
- 2. 通信時:sRDI -> WinINet.dll!xxxx
- bindSMB時,堆棧回溯只有兩種情況
- 1. 監聽管道時:sRDI -> kernel32!ConnectNamedPipe
- 2. 讀取數據時:sRDI -> kernel32!ReadFile
- bindTCP時,堆棧回溯只有兩種情況
- 1. 監聽端口時:sRDI -> ws2_32.dll!accept
- 2. 接收數據時:sRDI -> ws2_32.dll!recv
分析調用堆棧時,如果這些api的調用者內存有問題,那么就可以確定是CobaltStrike
通過ProcessHacker插件檢測CobaltStrike

參考鏈接
- https://github.com/Apr4h/CobaltStrikeScan
- https://github.com/CCob/BeaconEye
- https://github.com/jas502n/cs_yara
- https://medium.com/threat-hunters-forge/threat-hunting-with-etw-events-and-helk-part-1-installing-silketw-6eb74815e4a0
- https://key08.com/index.php/2021/07/25/1260.html
工具和代碼
- https://github.com/howmp/WinINetLogger
- https://github.com/howmp/CobaltStrikeDetect
- https://guage.cool/cobaltstrike-detect/processhacker.zip
- https://guage.cool/cobaltstrike-detect/WinINetLogger.zip