Jump to content

FortiGuard實驗室最近遇到了一個以前沒有報導過的內容管理系統(CMS)掃描器和用Go編程語言(通常也稱為Golang)編寫的攻擊破解器。在幾個在線論壇上,它被描述為安裝在受感染的WordPress網站上,但沒有公開的分析報告。

受影響平台:Linux;

影響用戶:任何組織;

影響:遠程攻擊者可以控制易受攻擊的系統;

嚴重級別:嚴重;

Golang攻擊破解器並不新鮮。例如,我們之前報導過2019年的StealthWorker活動。這個新的攻擊破解器是我們命名為GoTrim的新活動的一部分,因為它是用Go編寫的,並使用“:trim:”來區分與C2服務器通信的數據。

與StealthWorker類似,GoTrim也利用網絡執行傳播式攻擊攻擊。我們發現最早的樣本是在2022年9月。在撰寫本文時,該活動仍在進行中。

本文詳細介紹了這個殭屍網絡如何使用WordPress和OpenCart掃描和破壞網站。

攻擊鏈picture1.png

GoTrim攻擊鏈

GoTrim使用木馬網絡對其目標執行傳播式攻擊攻擊。每個木馬都會獲得一組憑據,用來嘗試登錄一長串的網站目標。成功登錄後,木馬客戶端將被安裝到新感染的系統中。然後,它等待來自攻擊者的進一步命令,從而擴展木馬網絡。

GoTrim僅在攻擊嘗試成功後向C2服務器報告憑據。我們沒有在GoTrim中觀察到任何用於傳播自身或部署其他惡意軟件的代碼。然而,我們確實找到了下載和執行GoTrim bot客戶端的PHP腳本。攻擊者似乎在某種程度上濫用洩露的憑據來部署PHP腳本以感染GoTrim系統。

picture2.png

PHP下載腳本

通常,每個腳本都將GoTrim惡意軟件從硬編碼的URL下載到與腳本本身相同的目錄中的文件並執行它。為了掩蓋其踪跡,下載器腳本和GoTrim攻擊程序都從受感染的系統中刪除。它不會在受感染的系統中保持持久性。

靜態分析除非另有說明,本文中詳細的分析是基於具有SHA-256哈希c33e50c3be111c1401037cb42a0596a123347d5700cee8c42b2bd30cdf6b3be3的示例。

GoTrim是用Go 1.18版本構建的。與所有Go應用程序一樣,代碼中使用的所有第三方庫都靜態鏈接到惡意軟件,導致可執行二進製文件相對較大。但是這樣做的好處是不依賴任何外部文件來正確執行。為了解決大小問題,惡意軟件使用UPX打包,將文件從6 MB減少到1.9 MB。

使用Go的另一個優點是,相同的源代碼可以交叉編譯,以支持不同的體系結構和操作系統。根據示例中的源代碼路徑,在開發GoTrim時使用了Windows。但是,我們只觀察到針對64位Linux的示例。

C2通信GoTrim可以通過兩種方式與命令和控制(C2)服務器通信:客戶端模式,它向命令和控制服務器(C2服務器)發送HTTP POST請求,或服務器模式,它啟動HTTP服務器以偵聽傳入的POST請求。與C2交換的所有數據都使用Galois計數器模式下的高級加密標準(AES-GCM)進行加密,密鑰來自嵌入惡意軟件二進製文件中的口令。

默認情況下,如果受感染的惡意軟件直接連接到internet(即受害者的出站或本地IP地址是非私有的),GoTrim將嘗試在服務器模式下運行。否則,將切換到客戶端模式。

執行後,GoTrim創建一個MD5哈希,表示受感染設備的唯一標識(木馬ID)。它由以下字符串生成,包含由“:”字符分隔的幾條信息:

VICTIM_EXTERNAL_IP:HTTP_SERVER_PORT:1:OUTBOUND_IP:AES_PASSPHRASE

VICTIM_EXTERNAL_IP:設備的外部/公共IP;

HTTP_SERVER_PORT:HTTP服務器端口。這是在服務器模式下為HTTP服務器隨機生成的介於4000到8000之間的數字。對於客戶端模式,始終為0;

惡意軟件初始化標誌:在計算木馬ID時始終設置為1;

OUTBOUND_IP:目標設備的出站/本地IP地址;

AES_PASSPHRASE:嵌入每個樣本的硬編碼字符串。該惡意軟件後來使用該字符串的SHA256哈希作為AES-GCM密鑰,用於加密其與C2服務器的通信。我們觀察到的所有樣本都共享相同的AES密碼。

在生成bot ID之後,GoTrim創建一個異步Go例程(類似於多線程),該例程在客戶端和服務器模式下向C2服務器發送信標請求。

C2請求URL在不同版本之間發生變化,如本文稍後部分所述。對於此特定示例,信標請求URL為“/selects?dram=1”。

在這個信標請求中,一些受害者和木馬信息被發送到C2服務器,如下圖所示。

picture3.png

發送到C2服務器的數據截圖

信標請求中發送的一些有趣的字段包括:

1. Bot ID:木馬的唯一ID;

2.外部IP:受害設備的公共IP地址;

3.HTTP服務器端口:為HTTP服務器隨機生成的端口(客戶端模式為0);

4.惡意軟件初始化標誌:發出此請求時始終設置為1;

5.出站IP:受害目標設備的本地IP地址;

6.狀態消息:“GOOD”消息被其他字符串替換,這些字符串在後續信標請求期間報告任何正在運行的CMS檢測或強制執行任務的狀態;

7.狀態標誌:這些標誌指示惡意軟件當前是否有C2服務器分配的任何處理任務以及這些任務的ID;

8.MD5校驗和:該值由上述請求的部分和硬編碼的AES密碼生成,它用作消息完整性校驗和。

這些字段通過:trim:字符串連接在一起,因此為這個活動選擇了這個名稱。然後使用AES-256-GCM密鑰加密數據,這是前面提到的密碼的SHA-256哈希。

服務器通常以“OK”、“404 page not found”或“BC”響應,所有這些都使用相同的AES-GCM密鑰加密。當收到“BC”時,GoTrim將重新生成其bot ID並從服務器模式切換到客戶端模式。

第一個信標請求是向木馬網絡註冊一個新的木馬。

每次信標請求後,GoTrim會休眠幾秒到幾分鐘,這取決於C2服務器的響應,以及惡意軟件在發送下一個請求之前是否正在處理C2分配的任務。惡意軟件定期執行此信標請求,以更新C2服務器有關木馬狀態的信息,包括成功的憑據,如本文的攻擊攻擊部分所述。如果GoTrim在100次重試後未能從C2服務器接收到有效響應,它將自行終止。

當信標請求被異步發送以更新C2服務器的狀態時,GoTrim要么向C2服務器發送請求以接收命令(客戶端模式),要么設置HTTP服務器以偵聽傳入的任務請求(服務器模式)。

客戶端模式在客戶端模式下,惡意軟件發送一個POST請求到“/selects?”bilert=1 '接收來自C2服務器的命令。

C2服務器響應使用相同AES-GCM密鑰加密的命令。在下圖中可以看到一個解密命令的示例。

picture4.png

包含命令及其選項的響應截圖

通過“:trim:”字符串分割數據後,可以識別7個字段,如下所示。

1. MD5校驗和:用於校驗消息的完整性。如:83217f8b39dccc2f9f2a0157f0236c4f;

2. 命令ID:表示當前任務的命令;

3.並發級別:這會影響每個任務執行的goroutine的數量;

4. 命令選項:包含命令的選項,以7E 6A 71 6D 70 C2 A9 (~jqmp©)字節分隔。根據命令的不同,它們的解釋也不同:

a.目標列表:這是GZIP壓縮數據,解壓縮後,包含將作為登錄嘗試目標的域列表。

b.命令選項1(已修訂):此選項包含身份驗證命令的用戶名。 C2服務器可以指定一系列字節(如C2 A9 64)來使用域作為用戶名,而不是為每個域使用相同的用戶名。

c.命令選項2(修改後):對於認證命令,該選項包含密碼;

d.命令選項3:WordPress認證的未知選項;

e.命令選項4:WordPress身份驗證選項,在提交憑據時使用POST請求或XML-RPC。

5. 內部值:惡意軟件本身不使用的數值(例如,42和255),可能代表當前命令的內部任務ID。

惡意軟件支持以下命令:

1:驗證WordPress域提供的憑據;

2:驗證對Joomla!域提供的憑據(目前尚未實現);

3:根據OpenCart域驗證所提供的憑據;

4:根據Data Life Engine域驗證所提供的憑據(目前尚未實現);

10:檢測在域中安裝WordPress, Joomla! OpenCar或Data Life Engine CMS;

11:終止惡意軟件;

我們觀察到一個目標列表在一個WordPress認證命令中包含多達30000個域。此外,我們觀察到,身份驗證命令只提供一個密碼來測試列表中的所有域。如上所述,攻擊可能是通過命令受感染設備網絡測試不同的域和憑據來傳播的。

惡意軟件完成處理命令後,在發送另一個POST請求以接收來自C2服務器的新任務之前,它會休眠一段時間。

服務器模式在服務器模式下,GoTrim在4000到7999之間的隨機端口上啟動服務器,以響應攻擊者發送的傳入POST請求。這種模式為攻擊者提供了一種與木馬通信的更靈敏的方式。例如,攻擊者可以檢查木馬的狀態,而無需等待後續的信標請求,只需向木馬的HTTP服務器處理的特定URL發送POST請求。

為了向目標設備發出命令,攻擊者向“/BOT_ID?”ert=1 '發送POST請求,正文包含AES-256-GCM加密的命令數據,類似於C2服務器在客戶端請求命令時的響應。服務器模式支持與客戶端模式相同的命令。

攻擊者還可以發送帶有參數“/BOT_ID?intval=1”的請求,以查看當前正在運行的任務的狀態以及分配的任務是否已完成。

當CPU利用率低於某個水平(75%或90%,取決於當前任務使用的並發工作者的數量)時,將生成一個單獨的goroutine來處理每個域。

殭屍網絡命令檢測CMSGoTrim試圖確定目標網站上是否使用了四個CMS(WordPress、Joomla!OpenCart或DataLife Engine)中的一個。它通過檢查網頁內容中的特定字符串來實現這一點。

有趣的是,它只通過檢查“WordPress.com”的Referer HTTP標頭來針對自託管的WordPress網站。由於託管的WordPress主機提供商,例如wordpress.com,通常會實施更多的安全措施來監控、檢測和阻止攻擊嘗試。

用於確定已安裝CMS的字符串如下所示:

微信截图_20221215094401.png

雖然GoTrim可以使用上述四種cms檢測網站,但它目前只支持針對WordPress和OpenCart網站的身份驗證。這表明該殭屍網絡仍在開發中。

驗證WordPress憑據除了C2服務器提供的用戶名之外,它還試圖通過向“/wp-json/wp/v2/users”發送GET請求來收集更多的用戶名。

之後,它嘗試使用C2命令中提供的用戶名列表和密碼登錄WordPress網站,通過發送POST請求到“/wp-login.php”。下圖顯示了登錄的POST請求示例。

picture5.png

WordPress身份驗證請求

這個請求導致在成功登錄後重定向到WordPress網站的管理頁面(即/wp-admin)。為了確認登錄和重定向成功,它檢查響應是否包含“id=\”adminmenumain\”。

C2服務器還可以通過WordPress XML- rpc特性指定要執行的身份驗證,這是用戶使用XML以編程方式與CMS遠程交互的另一種方式。通過直接與web服務器的後端通信,可以繞過通常在訪問網站頁面時有效的反木馬機制(如captchas)。

成功登錄後,以下信息(以“|”分隔)將被更新為全局狀態消息,並與以下請求一起發送到C2(客戶端模式)或作為傳入請求的響應(服務器模式):

目標URL;

使用者名稱;

密碼;

命令ID(1用於WordPress, 3用於OpenCart等);

攻擊狀態(“0GOOD”表示成功);

驗證OpenCart憑據GoTrim還可以強力破解運行開源電子商務平台OpenCart的網站。

它向目標的“/admin/index.php”發送一個GET請求,並收集登錄請求所需的與身份驗證相關的令牌和標頭。然後,它通過向相同的URL發送POST請求以及包含用戶名和密碼的表單編碼數據來執行實際的身份驗證。

為了驗證登錄請求是否成功,它會通過搜索“/dashboarduser_token=”來檢查網站是否返回了OpenCart用戶令牌,並確保接收到的數據中的“redirect”值不為空。

一個有效的身份驗證響應應該如下所示:

{'redirect':'https://example.com/opencart/admin/index.php?route=common/dashboarduser_token=USER_TOKEN_HASH'}

成功登錄後,全局狀態消息將更新為針對WordPress的攻擊狀態。

反木馬檢查GoTrim可以檢測到網絡託管提供商和CDN(如Cloudflare和SiteGround)使用的反木馬技術,並規避一些更簡單的檢查。

它試圖通過使用瀏覽器發送的相同HTTP標頭並支持相同的內容編碼算法(gzip、deflate和Brotli)來模擬來自64位Windows上Mozilla Firefox的合法請求。

對於WordPress網站,它還會檢測是否安裝了CAPTCHA插件。

Google reCAPTCHA;

BestWebSoft的reCAPTCHA;

WP限制登錄嘗試;

屏蔽安全Captcha;

All in One Security (AIOS)Captcha;

JetPackCaptcha;

BestWebSoft的Captcha;

該惡意軟件包含用於解決某些插件的CAPTCHA的代碼。然而,我們需要驗證繞過技術是否有效。我們確定它無法繞過Google、WP限制登錄嘗試和Shield Security的CAPTCHA。

一般來說,對於它無法繞過的安全插件,它只通過使用與成功登錄期間發送的數據類似的信息更新全局狀態消息來向C2服務器報告它們。但它使用“3GOOD”表示攻擊狀態,以指示跳過憑據驗證。

在遇到網頁內容中包含字符串“1gb.ru”的網站時,GoTrim也會發送相同的“3GOOD”攻擊破解狀態。這似乎是一個有意識的決定,以避免針對該提供商託管的網站,但意圖尚不清楚。

活動更新在搜索與此活動相關的其他示例時,我們發現了一個來自2022年9月的PHP腳本和二進製文件,其中包含C2 server 89[.]208[.]107[.]12上不同的URLs “/selects?param=1”和“/selects?walert=1”,我們檢測的PHP腳本PHP/GoTrim!tr.dldr使用相同的安裝方法,只是下載URL在我們收集的示例中有所不同。

picture6.png

來自2022年9月版本的不同C2服務器的代碼片段

2022年11月出現的二進製版本也更新了其HTTP POST URL。信標請求URL“/selects?dram=1”和命令請求URL“/celects?bilert=1”已分別更改為“/route?index=1”和“/routh?alert=1”。數據傳輸中使用的加密算法和密鑰保持不變。

picture7.png

Wireshark從兩個版本的GoTrim捕獲POST請求

總結雖然這個惡意軟件仍在開發中,但它擁有功能完備的WordPress攻擊程序,再加上它的反木馬規避技術,這使得它成為一個值得關注的威脅,特別是隨著WordPress CMS的巨大普及,這個惡意軟件的威脅不容小覷。為了降低這種風險,網站管理員應確保用戶帳戶(特別是管理員帳戶)使用強密碼。另外,保持CMS軟件和相關插件是最新的,因為攻擊者還可以通過利用未修補的漏洞來發起攻擊。

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...