反恐精英0 day,被用於傳播Belonard木馬

導語:​研究人員發現反恐精英Counter-Strike 1.6存在0 day漏洞,攻擊者利用該漏洞來傳播Belonard木馬。

反恐精英Counter-Strike 1.6是Valve Software(維爾福軟件公司)2000年發佈的一款遊戲。截止目前,該遊戲仍然有很多忠實粉絲。使用官方CS 1.6客戶端的有20000在線用戶,在Steam上註冊的遊戲服務器數量超過5000個。

出於廣告和獲利的目的,名為Belonard的開發者使用他的服務器用木馬感染了CS 1.6玩家的設備,並用其賬號推薦其他的遊戲服務器。

惡意服務器的所有者使用遊戲客戶端的漏洞和木馬作為其技術基礎。木馬的目的就是感染玩家設備並下載惡意軟件來確保系統中木馬的安全,並將它分發到其他玩家的設備上。截止目前,至少在官方遊戲客戶端和4個盜版遊戲客戶端中發現了多個遠程代碼執行RCE漏洞。

在系統中安裝完成後,木馬將遊戲客戶端中可用的遊戲服務器列表替換,並在受感染的計算機上創建代理來傳播木馬。代理服務器的ping值會比較小,玩家會覺得這是最快的服務器。選擇了代理服務器後,玩家就會被重定向到會感染木馬的惡意服務器上。

基於此,木馬開發者就可用創建一個由CS 1.6客戶端組成的殭屍網絡。根據分析師的分析,官方Steam客戶端的5000個服務器中有1951個都是Belonard木馬創建的。

感染客戶端

木馬Trojan.Belonard含有11個組件,可用根據遊戲客戶端在不同的場景下運作。如果使用了官方客戶端,木馬就會利用RCE漏洞來感染設備;盜版客戶端的感染也是一樣的。如果用戶從惡意服務器所有者的網站上下載受感染的客戶端,遊戲第一次啟動後就保證了木馬在系統中的駐留。

反恐精英0 day,被用於傳播Belonard木馬

當用戶啟動官方Steam客戶端並選擇遊戲服務器時,如果鏈接到惡意服務器,就會利用RCE漏洞上傳惡意庫到受害者的設備。根據漏洞的類型,會下載和執行client.dll (Trojan.Belonard.1)或Mssv24.asi (Trojan.Belonard.5)。

木馬Trojan.Belonard.1會在受害者設備上刪除任意的和庫文件相同目錄下的.dat文件。之後惡意庫會理解到C2服務器fuztxhus.valve-ms[.]ru:28445,併發送解密的請求來下載文件Mp3enc.asi (Trojan.Belonard.2)。服務器會在響應中發送加密的文件。

下圖是來自服務器的解密的數據包:

反恐精英0 day,被用於傳播Belonard木馬

安裝到客戶端

啟動後,遊戲會從遊戲代理處下載ASI文件。從木馬開發者的網站下載的客戶端會感染木馬Trojan.Belonard.10 (Mssv36.asi),但是木馬在系統中發安裝於在清潔版的遊戲客戶端不同。安裝到受感染的客戶端之後,木馬Trojan.Belonard.10會檢查用戶操作系統中的組件。如果不存在,就從主體釋放組件並下載Trojan.Belonard.5 (Mssv24.asi)到進程內存中。與其他模塊類似,Trojan.Belonard.10會修改創建、修改和訪問的日期和時間,所以木馬的文件無法通過對文件夾中的內容安裝創建日期排序找出。

在安裝完新組件後,木馬Trojan.Belonard.10仍然在系統中,承擔客戶端的保護校色。它會來自其他遊戲服務器的過濾請求、文件和命令,將客戶端修改變化相關的數據轉移到木馬開發者的服務器上。

Trojan.Belonard.5會接收關於運行進程和路徑的信息。如果進程名不是rundll32.exe,就開始一個新的線程用於隨後的動作。在運行的線程中,木馬Trojan.Belonard.5會創建註冊表值[HKCU\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers] ',分配值RUNASADMIN,檢查模塊名。如果不在Mssv24.asi,就在Mssv24.asi模塊中複製自己、刪除名字不同的版本、啟動Trojan.Belonard.3 (Mssv16.asi)。如果名字匹配,就立刻下載和啟動木馬。

在乾淨客戶端中執行是由木馬Trojan.Belonard.2進行的。下載後,木馬會檢查client.dll(Trojan.Belonard.1)加載的進程的DllMain。如果不在rundll32.exe中,就用註冊表key [HKCU\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers] '創建一個線程,並且分配給它值RUNASADMIN。然後,木馬會手機用戶設備中的數據,從DialogGamePage.res文件中提取信息;再將這些收集的數據以加密格式的形式發送給木馬開發者的服務器。

收集的系統數據結構如下:

反恐精英0 day,被用於傳播Belonard木馬

服務器會響應Mssv16.asi (Trojan.Belonard.3)文件。關於新模塊的元數據會保存在DialogGamePage.res文件中,而Trojan.Belonard.5會從用戶設備中移除。

系統中安裝

確保木馬在系統中駐留利用了木馬Trojan.Belonard.3。木馬安裝後就會移除Trojan.Belonard.5和檢查進程。如果不在rundll32.exe中,就保存另外2個木馬到%WINDIR%\System32\文件夾中,分別是Trojan.Belonard.7 (WinDHCP.dll)和Trojan.Belonard.6 (davapi.dll)。這2個木馬的主體被分成0xFFFC字節的區塊。當保存在硬盤中,木馬會將所有區塊集合起來來獲取工作文件。

集合起來後,Trojan.Belonard.3會創建一個WinDHCP服務在svchost.exe環境中來運行WinDHCP.dll (Trojan.Belonard.7)。根據語言設置,操作系統使用俄語或英語來設置服務參數。

WinDHCP服務參數:

Service name: “Windows DHCP Service” or “Служба Windows DHCP”;

Description: “Windows Dynamic Host Configuration Protocol Service” or “Служба протокола динамической настройки узла Windows”;

ImagePath參數指定為 “%SystemRoot%\System32\svchost.exe -k netsvcs”,而ServiceDll制定了到木馬庫的路徑。

之後,Trojan.Belonard.3會檢查WinDHCP是否在運行。如果沒有運行,就重新安裝該服務。

Trojan.Belonard.7 是一個含有ServiceMain導出函數的WinDHCP.dll,它是通過自動運行服務來安裝在受感染的設備上。其目的是檢查註冊表key HKLM\\SYSTEM\\CurrentControlSet\\Services\\WinDHCP中的Tag參數。如果設置為0,Trojan.Belonard.7會加載davapi.dll,調用其導出函數,傳遞一個到SERVICE_STATUS的指針作為參數,該參數反映了WinDHCP服務的狀態。然後等待1秒並再次檢查tag參數。如果值不等於0,Trojan.Belonard.7就會加載spwinres.dll。之後,調用spwinres.dll的導出函數,傳遞一個到SERVICE_STATUS的指針作為參數。木馬每秒鐘都回重複上面的操作。

WinDHCP服務參數:

在函數開始啟動前,木馬Trojan.Belonard.6會檢查WinDHCP服務註冊表的Tag和Data參數。Data參數必須含有用於生成AES Key的數組。如果沒有,木馬就使用openssl庫來生成32隨機字節,用於生成加密key。之後,木馬會讀取WinDHCP服務的Info和Scheme參數。在Scheme中,木馬保存了4個參數,都使用AES加密,info保存了已安裝持續列表的SHA256哈希值。

Trojan.Belonard.6會解密C2服務器的地址oihcyenw.valve-ms[.]ru,並嘗試與服務器建立連接。如果連接失敗,木馬就使用DGA來生成.ru zone內的域名。但是域名生成代碼中存在錯誤,因此無法為木馬開發者創建域名。

在發送加密的信息後,木馬從服務器處接收了響應消息,解密並保存到%WINDIR%\System32\。數據中含有木馬wmcodecs.dll (Trojan.Belonard.8)和ssdp32.dll (Trojan.Belonard.9)。

Belonard還會在設備上安裝新的遊戲客戶端,這是由Trojan.Belonard.8和Trojan.Belonard.6完成的。

Trojan.Belonard.8會初始化一個含有關於Counter-Strike 1.6客戶端文件名和SHA 256哈希的容器。Trojan.Belonard.6會開始搜索安裝的遊戲客戶端。如果木馬找到運行的客戶端,就根據從Trojan.Belonard.8接收的數據檢查文件和SHA 256哈希值的列表。如果不匹配的話,Trojan.Belonard.8會結束客戶端進程,然後釋放hl.exe文件到遊戲目錄。該文件只有展示在加載遊戲時會顯示錯誤信息“Could not load game. Please try again at a later time”。這樣木馬就有時間他替換客戶端的文件。然後,木馬會用工作文件替換Hl.exe,這樣遊戲啟動時就會出現錯誤了。

木馬會刪除以下客戶端文件:

\\valve\\dlls\\*

\\cstrike\\dlls\\*

\\valve\\cl_dlls\\*

\\cstrike\\cl_dlls\\*

\\cstrike\\resource\\*.res

\\valve\\resource\\*.res

\\valve\\motd.txt

\\cstrike\\resource\\gameui_english.txt

\\cstrike\\resource\\icon_steam.tga

\\valve\\resource\\icon_steam.tga

\\cstrike\\resource\\icon_steam_disabled.tga

\\valve\\resource\\icon_steam_disabled.tga

\\cstrike\\sound\\weapons\\fiveseven_reload_clipin_sliderelease.dll

\\cstrike_russian\\sound\\weapons\\fiveseven_reload_clipin_sliderelease.dll

\\cstrike_romanian\\sound\\weapons\\fiveseven_reload_clipin_sliderelease.dll

根據操作系統的語言設定,木馬會下載英文和俄文的遊戲菜單文件。

木馬的payload是在用戶設備上枚舉大量的偽造的遊戲服務器。為此,木馬會將遊戲客戶端的相關信息轉移到開發者的服務器,服務器會響應創建偽造服務器的加密參數。

反恐精英0 day,被用於傳播Belonard木馬

Trojan.Belonard.9會創建代理遊戲服務器並有Steam API註冊。遊戲服務器端口是從服務器指定的game_srv_low_port的最低值開始順序定義的。服務器還會設置fakesrvbatch的值,該值巨頂了協議模擬器線程的數量。模擬器支持到Goldsource引擎遊戲服務器的基本請求:A2S_INFO, A2S_PLAYER, A2A_PING, 接收challenge steam/non-steam client請求等。在響應connect命令後,木馬就會追蹤來自客戶端的第一個和第二個包。

在交換這些包後,木馬會發送最後一個包svc_director,可以啟動CS客戶端任意命令的執行。該漏洞從2014年發現至今一直沒有修復。嘗試連接到遊戲代理服務器後,玩家會被重定向到惡意服務器。之後,木馬開發者可以利用用戶遊戲客戶端的漏洞來安裝Trojan.Belonard。但是Trojan.Belonard.9也有一個bug,可以用來檢測木馬偽造的遊戲服務器。而且在Game列,偽造的服務器有一個字符串Counter-Strike n,n的範圍在1到3之間。

反恐精英0 day,被用於傳播Belonard木馬

加密

Belonard使用加密來在木馬中保存數據,以及與服務器進行通信。它會保存C2服務器的加密名,一些代碼和庫名。老版本的木馬使用的另一個算法來加密代碼。Trojan.Belonard.2中的解密算法如下所示:

def decrypt(d):

s = ''

c = ord(d[0])

for i in range(len(d)-1):

c = (ord(d[i+1]) + 0xe2*c - 0x2f*ord(d[i]) - 0x58) & 0xff

s += chr(c)

return s

老版本的解密算法:

def decrypt(data):

s = 'f'

for i in range(0,len(data)-1):

s += chr((ord(s[i]) + ord(data[i]))&0xff)

print s

Belonard使用一個很複雜的加密方法來與C2服務器交換數據。在發送信息到服務器之前,木馬會將每個模塊變成不同的結構。收集的數據會用惡意軟件中保存的RSA公鑰加密。但RSA只對數據的前342字節進行加密,如果模塊發送的包的數據大於342字節,只有前342字節會被加密,剩下的數據會用AES加密。

詳細分析報告下載地址:https://st.drweb.com/static/new-www/news/2019/march/belonard_trojan_en.pdf


分享到:


相關文章: