前言
這篇文章主要探討一些Malleable-C2-Profiles的簡單運用,Malleable-C2-Profiles可用於定制beacon向cobaltstrike服務端通信的流量特征,不同於常見的修改端口,證書,做反向代理等。Malleable-C2-Profiles是cobaltstrike的一個擴展,意為"可定制的" 的 C2 服務器,官方鏈接地址https://www.cobaltstrike.com/help-malleable-c2
beacon與C2的通信模式
在目標主機上線以后,beacon會定時向C2進行通信,這個通信時間是可以通過sleep控制的,從客戶端輸入的希望受害主機執行的命令並不是直接通過C2轉發給beacon讓受害主機去執行,而是存儲在C2中,beacon定時向C2進行通信,這種通信是以心跳的方式進行的,beacon每次通信都會讀取C2上有沒有新的命令,如果有,就讀取這個命令,並在下一次與C2通信時將執行命令的結果發送給C2。
不經過修改的beacon流量分析
既然要通信,從被害主機上就一定會捕獲通信的流量,那就先來看以下在不進行定制流量特征時流量是什么樣子的。我們使用以下環境進行測試:
受害主機:windows7 C2服務器:CentOS cobaltstrike版本:cobaltstrike4.0
首先,開啟一個http的監聽器,並生成beacon,上傳到目標主機運行使其上線,
上線成功,開始在受害主機上使用wireshark進行抓包,篩選出與C2通信的流量
從抓取的流量可以看到,beacon與C2之間的通信是以http協議通信的,每次心跳,都會請求dot.gif,中間的通信的時間間隔就是以sleep設定的時間為准,這個時間是有一個默認值的,也可通過sleep命令來修改。但所有beacon與C2之間的通信不一定都是請求這個地址,我嘗試過生成其他監聽器重新上線,這個請求地址會發生變化,由此可以確認這個流量特征是隨機的。
查看一下數據包的詳細內容:
雖然通信的數據包格式是隨機的,但如果通過人工分析,這個數據包還是顯得那么不正常,尤其是Host字段還帶了C2服務器的地址和監聽器的端口。
關於Malleable-C2-Profiles
剛才已經說過,Malleable-C2-Profiles可以定制流量特征,具體如何編寫profiles在官方鏈接和其他關於profiles編寫的文章都有詳細的描述,如果感覺編寫很麻煩或不熟練,可以下載實例文件,對文件中的參數進行修改,這樣就簡單的多
實例文件地址:https://github.com/threatexpress/malleable-c2
下載完后,把對應版本的示例文件拿下來編輯
set sample_name 是這個profiles的名稱,不影響其他功能
set sleeptime為設置sleep時間,以毫秒為單位
set jiiter設置抖動值

DNS beacon設置可以定制以dns beacon進行通信時的一些流量特征
http-stager定義分段過程,這里也就是可以定制HTTP請求的地方,實例文件中將流量偽裝成請求一個js文件,並定制一個看似合法的響應。
http-get就不難理解了,這里定義了get請求,客戶端和服務端都可進行詳細配置,剩下還有http-post也是一樣。
Profiles使用
修改完(或編寫完)之后將profiles上傳到C2服務器上,在啟動teamserver時做如下調用
./teamserver [external IP] [password] [/path/to/my.profile]
啟動teamserver,並調用profile,重新上線主機,抓取流量
這樣Host字段隱蔽了C2服務器的ip,請求看起來也像是一個正常的,請求js文件的請求。
參考文獻
https://xz.aliyun.com/t/2796