濫用 Tyk 的 API 網關提供的 API 路由轉發能力隱藏惡意 C2 流量

如今,通過合法渠道隱藏惡意的C2流量很難,尤其是當CDN提供商阻止所有已知的技術來使用域前置來隱藏惡意流量時。
出于這個原因,我在尋找一種服務,我可以使用它們的域轉發和隱藏我的惡意C2流量,而不暴露我的原始攻擊基礎設施, tyk.io是一個云原生 API 管理全球許多應用程序使用的平臺,用于通過云管理其 API 調用。
Tyk API網關可以讓你管理你的API入口,并將它們路由到不同的終端,其中一些可以是內部的,但一些可以是公開的,你可以在調用你的API時添加一些用于認證目的的控件。
當使用Tyk云時,你將獲得一個與 tyk.io 主域鏈接的自定義子域,例如:

使用此域,你將管理 API 的入口并將流量轉發到多個路由。
那么,我們如何使用它來隱藏我們的信標活動呢?這很簡單,我們將對 C2 的信標活動視為 API,并為它們構建自定義路由,以將流量從 TYK 域轉發到我們的 C2 服務器。
我將使用Cobalt Strike作為我的C2,并將使用TYK API網關轉發CS信標通信。
眾所周知,Cobalt Strike 信標需要定義 4 條路徑來在信標和teamserver之間進行通信,它們是:
http-get
http-post
x64 stager (uri_x64)
x86 stager (uri_x86)
我們可以使用 Cobalt Strike Malleable 配置文件來定義它。
我將在我的 Malleable 配置文件中使用以下變量。

請注意,你可以僅使用 GET 構建配置文件,但這不是我們的情況,我們不會在本文中討論這個問題。
因此,為了明確這一點,TYK 只會處理傳入的請求并將它們轉發到由 Cobalt Strike teamserver處理的原始路由。
所以最終的信標行為應該如下所示:

設置TYK云賬戶
讓我們從創建一個 TYK 云免費帳戶開始,為此,只需導航到此 URL 并填寫表格,然后選擇 Cloud Free 作為你的首選啟動計劃,如下所示:

之后,設置你的組織名稱,在我的例子中是TestTraffic,如下所示:

提交組織名稱后,TYK將為你創建一個新的部署,并發出一條提示消息,告訴你成功創建部署:
以下是我當前的部署詳細信息:

在閱讀框中,我們可以看到Ingress API管理儀表板,從這里我們可以創建路由,我們將用于與TYK云主機通信,并在我們的后端(Cobalt strike teamserver)中創建相應的路由。
創建和配置API終端
現在讓我們創建API終端,并開始配置它們以到達我們的teamserver中的后端路由,換句話說,此時我們將在TYK主機名中創建自定義路由,一旦向這些路由發送請求,這些路由將連接回我們的teamserver。
當你點擊管理API 時,你將看到以下頁面:

創建http-get API
點擊 Design new API,讓我們填寫第一個 API端,它將連接回我們在Malleable C2配置文件中設置為' / API /v2/login的http-getURI。

我們將使用的上游URL是我們的Cobalt Strike teamserver,它已在 https://cslabtest.live 上啟動并運行。
注意,請確保你的teamserver使用有效的ssl證書,并且你使用的是https偵聽器。
正如我提到的,我們將創建一個表示http-get URL的新路由,該URL將指向我們的主要CS teamserver后端。
我的測試后端服務器是https://cslabtest.live,所以我們將確保我們的TYK云主機將從我們的信標發送的http-get請求轉發到原始后端“CS teamserver”https://cslabtest.live/api/v2/login。
因此,在填寫完API名稱和上游URL后,請點擊CONFIGURE API開始配置API,一旦我們點擊它,我們將擁有我們將用來調用此 API 終端的主機名:

如上所示,我們已經創建了一個新的API,并且我們獲得了我們將在調用期間使用的主機名,即:
https://ambitious-power-mgw.aws-euw1.cloud-ara.tyk.io
現在我們需要更改偵聽路徑值和目標URL值,偵聽路徑值將設置偵聽路徑,TYK主機將偵聽該路徑以接收請求,而目標URL值是請求將傳遞到的原始路徑。

為了再次簡化,我們所做的是將發送到https://ambitious-power-mgw.aws-euw1.cloud-ara.tyk.io/api/v2/login的任何請求傳遞到https://cslabtest.live/api/v2/login。
現在讓我們禁用另外兩個與速率限制相關的選項,以確保我們的信標不會在很短的時間內發送太多請求時被阻塞,如果我們有一個短跨度的信標回調,這將很有幫助。
為此,只需向下滾動到 Rate Limiting 和 Quotas 并檢查以下選項:

之后,我們需要做一件非常重要的事情,以確保我們的請求將傳遞到后端CS teamserver,為此我們需要關閉該終端上的任何身份驗證,為此,只需向下滾動到頁面末尾,直到你到達 Authentication 部分并選擇 Open (Keyless) 選項。

該選項將保證請求將在不進行任何身份驗證的情況下傳遞給TYK主機
最后要做的一件事是在這個終端上禁用緩存,這將確保我們不會緩存來自 CS 團隊服務器的任何響應,這可能會阻止我們的信標按預期運行。
為此,導航到高級選項并取消選中啟用緩存選項。

我們現在已準備好使用此端點,點擊保存以保存終端的詳細信息。
現在我們可以看到API表了,如下所示:

我們可以看到服務http-get請求的API調用已經就緒,現在讓我們配置其余的終端。
創建http - post API
現在創建一個新的 API 并重復相同的步驟,如下所示:

我們將Listen路徑設置為/api/v2/status,此處的目標 URL 與我們在 Malleable C2 配置文件中使用的相同。
現在,像前面提到的那樣禁用速率限制、身份驗證和緩存。
創建Stager-x86 API
同樣,創建一個名為Stager-X86的新API,并設置以下選項:

我們將Listen路徑設置為/api/v2/GetProfilePicture,此處的 Target URL 與我們在 Malleable C2 配置文件中使用的 URL 相同。
如上所述,禁用速率限制、身份驗證和緩存。
創建Stager-x64 API
最后,創建最后一個被稱為Stager-X64的API,并設置以下選項:

如上所述,禁用速率限制、身份驗證和緩存。
這是我們 API 調用的最終表格:

現在我們已經準備好測試信標了,但是在此之前,讓我們基于TYK主機名在Cobalt Striketeamserver中創建一個新的HTTP偵聽器。
創建 Cobalt Strike HTTPS 偵聽器
現在你只需要在你的Cobalt Strike teamserver中配置一個新的HTTPS監聽器,如下所示:

我用ambitious-power-mgw.aws-euw1.cloud-ara.tyk.io作為我的HTTP主機,當然還有端口 443 作為我的監聽端口。

現在,一起配置完成,一切都應該按預期工作,在我們生成一個信標之前,讓我們嘗試打開 http-get API,它是
`https://ambitious-power-mgw.aws-euw1.cloud-ara.tyk.io/api/v2/login 獲取以下信息:

我們從CSteamserver得到了預期的響應,如果我們配置它,其他一切都應該正常工作。
現在,讓我們嘗試創建一個“stage - less”信標并運行它,看看它是否會按預期工作。

讓我們在windows 10上打開它,看看會發生什么!

我們可以看到我們收到了一個信標,并且所有工作都按預期工作!讓我們嘗試執行一個命令來測試 http-post 端點來測試它:

一切都按預期工作,我們可以看到命令結果。
向終端添加身份驗證
我們可以使用一種通常用于通過 API 進行身份驗證的身份驗證機制來保護終端,我們將使用 Basic Auth 作為我們的身份驗證機制,僅將其添加到我們的 htt-get 請求中,這樣做是為了向你展示這個概念,但是你可以對所有其他終端使用相同的方法。
為此,我們需要將終端設置中的Authentication選項從Open (Keyless)更改為“Basic Authentication”,如下所示:

然后,我們需要添加一個策略來保護這個終端,我們可以在系統管理下的策略部分中做到這一點。

選擇API,然后在Global Limits and Quota部分點擊確保再次禁用速率限制:

我們現在需要做的最后一件事是配置策略名稱并設置密鑰過期,如下所示:

點擊Create Policy保存新策略,之后我們可以在Polices中看到它:

我們需要做的最后一步是添加一個要使用的新密鑰,這是我們需要在基本身份驗證中使用的憑據,為此,請轉到密鑰部分并點擊創建密鑰,然后在應用策略下選擇我們之前創建的策略,從 CHOOSE API 選項中選擇我們需要應用這些憑據的 API。

最后,轉到身份驗證部分并輸入你要用于對該終端進行身份驗證的用戶名和密碼,在我的示例中,我將使用test作為我的用戶名,“testtesttest作為我的密碼,如下所示:

你將收到確認你的密鑰已成功創建的消息,如下圖所示:
現在讓我們嘗試導航到http-get終端,并檢查基本身份驗證是否已啟用,如下所示:

這樣我們就可以看到在這個終端上啟用了 HTTP 身份驗證,現在就可以進入最后一部分。
我們需要我們的信標來通過該身份驗證,這只需通過向我們的請求傳遞 `Authorization HTTP 標頭來完成,并且我們知道 `Authorization 標頭的完整格式是:

所以在我們的例子中,它將是:

我們只需要將該標頭添加到我們的Malleable C2配置文件中,如下所示:

在該示例中,CS信標將發送正確的身份驗證標頭來通過身份驗證并到達原始終端。
讓我們嘗試一下,重新創建一個新的信標并測試它。
我們的信標現在可以通過該終端的身份驗證。
當涉及到直接公開或公開訪問這些終端響應時,添加這個功能可以增強OPSEC。
總結
對于依賴于TYK云的企業或其任何服務正在使用TYK云的企業來說,這種技術是一種很好的技術,可以讓你融入他們擁有的合法網絡流量。
即使你的目標不直接使用 TYK 云,使用 TYK.io 域仍然是一個不錯的選擇,因為它是一個受信任的域并且很多服務都在使用它。
你可以將此技術與你最喜歡的 C2 一起使用,并使用 TYK.io 域使植入/信標隧道成為流量。