ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows服务器遭XMRig挖矿病毒?从排查到清除的完整实战指南

Windows服务器遭XMRig挖矿病毒?从排查到清除的完整实战指南 服务器突然卡成PPTCPU飙到100%远程桌面连进去风扇狂转打开任务管理器看到一个陌生的进程占满了所有核心——这种场景我这两年遇到过太多次。处理完一圈下来绝大多数都是同一类问题中了XMRig挖矿病毒。XMRig本来是开源的门罗币CPU挖矿客户端攻击者把它打包成木马通过各种漏洞和弱口令塞进服务器然后悄悄占着你的CPU给他挖币。币是人家收的电费、带宽和机器性能却要你自己扛更头疼的是这类木马非常会藏——修改进程名、写计划任务、用WMI事件订阅做持久化删掉一个文件它马上又复活。这篇文章把我从实际处置中积累的排查思路、清除步骤和加固方案完整写出来整个流程适用于Windows Server 2008 R2到2022也适用于中了同款木马的Windows工作站。不管是专职运维、兼职管服务器的IT还是做安全审计的朋友照着操作基本能摘干净。1. 先别慌认清XMRig挖矿病毒的真面目与入侵路径1.1 它是怎么在你机器里“上班”的先说结论XMRig是GitHub上开源的门罗币CPU挖矿程序本来是用来合法挖矿的工具但因为它命令行参数丰富、支持静默运行、还能通过配置文件自定义挖矿矿池被攻击者大量二次打包成恶意程序。在Windows服务器上它最常见的外在表现有几个进程名伪装成svchost.exe、winupdate.exe、kworker.exe这类系统进程的名字CPU占用率持续卡在80%以上外联连接指向矿池服务器协议通常是stratumtcp矿池常见端口有3333、4444、5555、6666、7777、8443、14444等。从技术原理上看它之所以长期“杀不死”是因为建立了完整的驻留链条。攻击者会在系统里同时埋下多个启动入口计划任务、Windows服务、注册表Run键、WMI事件订阅、启动文件夹只要其中任何一个没有被清理重启之后木马就会被再次拉起。更恶心的是部分变种带有自保护逻辑会实时监控自己的文件和进程一旦发现被杀就用另一条驻留路径重新释放。所以很多管理员拿火绒或者杀毒软件扫了一遍当时没事了第二天CPU又满了原因就是没有按“进程—文件—持久化”三个层面同时动刀。在分析这类病毒时我常用Sysinternals套件里的Process Explorer和Autoruns。Process Explorer能看到进程的完整路径、父进程、命令行参数、网络连接比任务管理器好用太多Autoruns则是把系统所有自启动入口统一列出来包括计划任务、服务、驱动、WMI、登录脚本等等一眼就能发现藏在角落里的异常项。这两个工具都不大建议常备在U盘或者内网共享目录里。1.2 它进来的五条路看看你是哪一条我梳理过自己经手的Windows服务器挖矿案例入侵路径高度集中在以下五类你可以对照自己的环境判断薄弱点在哪。第一类是远程桌面弱口令爆破这是最常走的路。很多服务器的Administrator账号密码设成Admin123、Pssw0rd这种强度不够的密码攻击者用工具跑字典一天能尝试几万次。我接手的一台机器里安全日志中的4625事件登录失败一夜之间录了8000多条来源IP是同一个明显在撞库。处理这类问题的思路不只是改密码还要改端口、加锁定策略、限制来源IP。第二类是业务系统漏洞被利用。典型的有报表系统比如FineReport任意文件上传、中间件反序列化、Tomcat后台弱口令、Jenkins未授权访问等。这里特别提一下网上关于finereport11 windows服务器布署的教程非常多很多管理员照着部署完就忘了给后台加访问控制和强密码结果上传功能被攻击者拿到了webshell随后下载挖矿木马执行。部署任何Web系统都要记住业务能通不等于安全配置做到位了。第三类是开发与运维工具的漏洞。服务器上装了Git服务、Redis、Nacos、Elasticsearch、Docker API这类组件如果没有做访问控制和认证很容易被扫描器自动发现并利用。举个例子有人照着网上windows 2019安装git服务器教程配好了Gitblit或者Gitea密码却用的默认admin攻击者登录后直接往仓库里塞了带挖矿程序的“更新包”谁拉取谁中招。开发工具一旦暴露在公网就必须按生产系统标准去加固。第四类是系统和软件长期不打补丁。Windows Server 2012、2016在国内还有大量存量不少机器因为“怕重启影响业务”常年不更新导致SMB远程代码执行、PrintNightmare这类已知漏洞一直存在。攻击者的扫描器全网跑一遍碰到没修补的老系统直接就打进来了。所以很多单位一升级补丁、一重启服务器反而会发现CPU突然正常了——因为木马所在的服务/驱动在重启后被系统自身的新版本文件覆盖了。第五类是来路不明的镜像、破解补丁和所谓“免费”资源。网上流传的一些“免费永久windows服务器”激活脚本、Ghost镜像、第三方优化工具里面很有可能自带挖矿模块。我见过一台机器中招的原因特别简单管理员图省事下载了一个声称“永久激活”的批处理运行完就多了个计划任务CPU长期满载。这种属于源头污染再怎么清理只要原文件还在U盘里、还在下载目录里一运行又会重新感染。所以清毒之后一定要把这类来源不明的工具彻底丢掉别心疼。2. 深度清除“三板斧”进程、文件、持久化一次清干净2.1 第一板斧急停进程与切断外联中招后的第一步不是急着删文件而是先稳下来做好样本留存和现场分析再动手。我一般按这样的顺序操作。先打开Process Explorer按CPU列降序排列找到那个占了大多数CPU的进程。重点看两点它的路径是不是在临时目录、Public目录或者ProgramData目录它的命令行参数里有没有stratum、pool、miner这类关键词。如果Process Explorer一时没有也可以用任务管理器定位进程PID然后执行下面的命令拿到详细信息wmic process where ProcessId4567 get ProcessId,Name,ExecutablePath,CommandLine这条命令能看到进程的可执行文件路径和完整启动参数。挖矿木马的命令行里一般会有类似“-o stratumtcp://xxxxx:4444”这样的矿池地址或者“--configconfig.json”之类的参数基本一眼就可以确认。接着用netstat查看外联连接锁定它的通信目标netstat -ano | findstr ESTABLISHED再拿PID和netstat输出对上号看看它在和哪些IP通信。正规矿池一般有固定域名很多变种为了方便维护也会在配置里写死IP。确认之后在本地防火墙先封掉目标IP的出站连接或者干脆临时断开服务器外网防止它继续上传数据、下载其他模块。确认无误后先不要直接结束进程。正确做法是先把样本复制一份留作分析再结束进程。复制可以用Process Explorer自带的右键“Create dump”也可以直接到文件路径下拷贝一份exe和同目录的config.json。之后这样强制结束进程taskkill /f /pid 4567 /t/t参数会连同子进程一起结束省得杀了一个马上又起来一个。做完这一步服务器CPU一般能立刻降下来但别高兴太早持久化入口还没清重启必翻车。2.2 第二板斧顺藤摸瓜清掉本体文件进程结束后赶紧根据ExecutablePath找到木马文件所在的目录。这个目录很关键通常不止一个exe还会有一堆辅助文件配置文件、读写日志、挖矿输出的状态文件等。我见过的大部分变种喜欢把文件放在下面几个位置C:\Windows\TempC:\Users\PublicC:\ProgramDataC:\Windows\System32\drivers注意正常驱动很少直接放exeC:\Windows\SysWOW64IIS站点目录下的wwwroot、Tomcat的webapps目录各种临时解压目录比如C:\Users\Administrator\AppData\Local\Temp手工找文件时一个笨但有效的方法是按目录修改时间排序。木马文件一般是在你系统被入侵的那一刻写入的时间点非常集中。打开资源管理器在上级目录里按“修改日期”排序把那个时间段出现的文件单独拎出来看。PowerShell也可以辅助Get-ChildItem -Path C:\ -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-30) -and $_.Extension -in .exe,.dll,.bat,.ps1,.vbs } | Sort-Object LastWriteTime -Descending | Select-Object -First 100执行结果里如果看到异常文件先用Process Explorer确认没有进程占用然后删除。文件被占用导致删不掉时可以先把文件改名比如把evil.exe改成evil.exe.bak让进程无法按原路径重新加载重启后再删或者用PowerShell的Remove-Item -Force强制删除。另外同目录下的config.json建议也一并拷贝留档它记录了攻击者用的矿池和钱包地址是真凭实据。这里分享一个排查技巧很多管理员只删exe不删同目录的数据文件导致下次运行其他样本时木马会复用原来的config很快又连回同一个矿池。所以只要发现异常路径整个目录都要仔细过一遍宁可多删不要漏。2.3 第三板斧斩草除根清理全部持久化文件清完进入最关键的持久化清理环节。攻击者为了让你删不干净会把启动方式分散到多个位置。我按优先级整理了一个清单。第一优先计划任务。用下面命令导出所有计划任务的详细信息schtasks /query /fo LIST /v tasks.txt然后用记事本打开搜索可疑关键词。挖矿木马起任务名的时候很喜欢伪装成WindowsUpdate、MicrosoftEdgeUpdate、OneDriveUpdate这类看着很正经的名字但任务计划执行的程序路径基本都在Temp或Public目录露馅很明显。找到后直接删除schtasks /delete /tn 任务名 /f第二优先Windows服务。有些变种会把自身注册成系统服务开机自启。用PowerShell列出所有服务路径重点看启动类型为Automatic、路径不在System32目录下的服务Get-CimInstance Win32_Service | Select-Object Name,DisplayName,State,StartMode,PathName | Format-List确认是恶意服务后先停掉再删除sc stop 服务名 sc delete 服务名第三优先注册表启动项。手工检查以下位置HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunHKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce命令示例reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v 恶意值 /f除了Run键还要检查镜像劫持Image File Execution Options和Winlogon Shell有些僵尸化的木马会在这两个地方做手脚。另外AppInit_DLLs也值得看一眼虽然Win10/Server2016之后这个机制默认关闭但不排除有老系统还开着。第四优先WMI事件订阅。这是很多管理员忽略的地方。WMI事件订阅可以在特定条件触发时执行命令比如系统启动时、定时器到点时甚至CPU空闲时。检查命令如下Get-WmiObject -Namespace root\subscription -Class __EventFilter Get-WmiObject -Namespace root\subscription -Class CommandLineEventConsumer Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding发现有异常的EventFilter或者Consumer用Remove-WmiObject删掉。WMI的隐蔽性在于它不产生传统意义上的“进程”清理工具如果不扫描WMI命名空间根本发现不了。第五优先启动文件夹。检查shell:startup和shell:common startup这两个目录把可疑的快捷方式或脚本删掉就行。全部清理完后重启服务器。这一步必不可少。重启之前如果服务器上运行着RDS远程桌面服务或多会话环境要和业务方确认好时间窗口。网上经常有人遇到windows server 2016 rds服务器升级补丁重启后其他会话主机提示60分钟后断连的情况这本质是RDS会话被系统回收的机制。清毒重启也是一样的道理尽量安排在业务低峰期并在重启后第一时间检查所有持久化项是否还在CPU和网络是否恢复正常。3. 清理后的系统加固让病毒回不来的7个关键操作3.1 改口令、封端口先堵住大门病毒清干净只是开始如果入口不封下一个木马随时会再进来。第一件事是改密码而且这不是改一个Administrator就完了所有能远程登录的账户都要改包括本地管理员、域管理员、SQL Server sa、FTP账号、Git仓库账号等等。密码强度要有底线长度不低于12位包含大小写字母、数字和特殊符号。同时开启账户锁定策略在“本地安全策略—账户策略—账户锁定策略”里设置5次失败锁定10分钟这能有效延缓爆破速度。远程桌面端口建议从默认3389改成非标准端口或者用防火墙做来源IP白名单只允许办公网出口IP访问。修改注册表项HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber即可改完记得在防火墙放行新端口。Windows防火墙的配置也要重新理一遍以FTP服务为例很多教程只说了开放21端口但没提主动/被动模式的动态数据端口导致要么服务不通要么为了省事把整个入站全放开了。正确做法是只放行业务必需的端口并对来源IP做限制。像前几天我看一台服务器防火墙入站规则里居然有一条“允许所有程序所有端口”这是非常危险的配置。3.2 打补丁、检配置堵住漏洞和“后门”补丁能打的尽量都打上尤其是Windows Server 2016、2019的累计更新和.NET Framework更新。有些运维怕补丁影响业务一拖再拖结果漏洞越攒越多。这里有一个务实做法先在测试机/低负载服务器上打补丁验证观察一天再推广到生产。RDS场景更要注意补丁安装后通常需要重启重启后其他会话主机可能提示60分钟后断连这属于正常回收机制但要在发版窗口内完成避免业务中断。服务和组件的加固我列几个常见的点关闭SMBv1协议禁用Guest账户移除Telnet客户端/服务端。SQL Server禁止sa远程登录禁用xp_cmdshell存储过程数据库账号遵循最小权限原则。Redis如果没有公网需求监听地址改成127.0.0.1设置requirepass且密码不要和系统密码重复。Git、Jenkins、Nacos这类工具如果不是必须公网访问一律内网使用并加上强认证。不用的组件比如IIS里没用的ISAPI筛选器、ASP.NET扩展都清理掉。另外还有一个经常被忽略的点系统时间是否正常。很多挖矿木马为了让日志时间轴混乱、干扰排查会停掉Windows Time服务或者把时间改成异常值。检查方法很简单w32tm /query /status net start | findstr Windows Time如果Windows Time服务没有启动重新配置时间源。这里有一个常见需求windows时间服务器地址怎么填。国内环境推荐用ntp.aliyun.com或者cn.pool.ntp.org配置命令如下w32tm /config /manualpeerlist:ntp.aliyun.com,0x1 /syncfromflags:manual /reliable:yes /update w32tm /resync时间同步正常日志审计的时间线才可信后续定位入侵时间会省很多事。3.3 装监控、留日志防止二次感染加固的最后一步是让服务器具备“自我报告”能力。至少要做到三点。第一开启系统的完整审核策略。在“本地安全策略—审核策略”下把登录事件、进程创建、对象访问都设置为“成功和失败”审核。这样即使再中招安全日志里也会留下4624、4625、4688这些关键事件方便事后溯源。第二部署轻量级的进程监控。Sysmon是微软官方工具安装后能记录进程创建、网络连接、文件写入等行为日志写入事件查看器。如果不方便上EDRSysmon 事件日志转发已经能覆盖大多数挖矿木马的检测需求。安装命令一行就够sysmon64 -accepteula -i sysmonconfig.xml第三CPU和关键进程的告警要做起来。最简单的是Windows任务计划程序配合性能计数器在CPU占用持续超过80%时触发脚本告警到钉钉、企业微信或者邮件。实测下来挖矿木马占用CPU都是持续性的突发性的高CPU反而不太像挖矿这个特征在告警策略里可以写进去避免误报刷屏。4. 常见问题与排查技巧实录附速查表4.1 我踩过的坑进程删不掉、杀毒没用、清完又复发的真相先说一个最常见的现象杀毒软件扫了半天报无毒或者报了一个低级病毒名但CPU还是满的。这太正常了因为XMRig本体是无害的开源程序加壳或者混淆一下特征库未必认识它。对付挖矿木马靠的是行为分析而不是特征匹配。看到CPU异常第一反应应该是用Process Explorer看进程路径和网络连接而不是只在杀毒软件里点“全盘扫描”。第二个坑是“杀完进程立刻删文件结果文件又回来了”。很多木马有守护进程主进程被杀后驻留在计划任务里的守护脚本会在几十秒内重新释放文件。正确清理顺序是先清持久化入口再杀进程最后删文件。如果顺序反了你会觉得自己在和一台“打不死”的机器搏斗。第三个坑是误杀系统文件。我见过有人看到svchost.exe占CPU高就强行结束结果系统直接蓝屏。svchost是Windows的正常宿主进程木马经常伪装成同样的名字。判断依据不能只看进程名要看完整路径和签名。正常的svchost.exe位于C:\Windows\System32有微软数字签名藏在其他目录的“svchost.exe”必然是木马。第四个坑是清理不彻底导致反复感染。有些变种会写多个启动项你清理了计划任务注册表Run键里还有一个清理了Run键WMI事件订阅又把它拉起来。单靠手动排查很容易漏掉所以推荐直接上Autoruns把所有自启动入口集中显示确认一个清理一个最后再对照一遍。第五个坑是不重启就想确认干净。有些木马组件是注入到系统进程内存里的不重启内存中的恶意代码一直存在而且服务、驱动这类启动项只有重启才会验证是否真正删除成功。清理完持久化项后重启是一种“终极确认”不要怕麻烦。4.2 挖矿病毒排查速查表这里整理一份我在处置时反复对照的速查表适合打印出来贴在工位上。检查项重点位置/命令判断特征清理方法运行进程Process Explorer / tasklist高CPU、异常路径、异常进程名taskkill /f /pid PID /t外联连接netstat -ano矿池端口或未知IP防火墙出站阻断计划任务schtasks /query /fo LIST /v任务名伪装系统更新路径在临时目录schtasks /delete /tn 任务名 /f系统服务Get-CimInstance Win32_Service启动类型Automatic、路径异常sc stop 服务名; sc delete 服务名注册表启动项reg query Run、RunOnce、IFEO指向Temp/Public目录的exereg delete 对应键值WMI事件订阅Get-WmiObject root\subscription存在EventFilter/CommandLineEventConsumerRemove-WmiObject 删除启动文件夹shell:startup、shell:common startup异常快捷方式或脚本删除系统时间w32tm /query /statusWindows Time服务被禁用或时间偏差大配置NTP时间服务器地址并resync这张表里的每一项执行顺序建议先看进程和外联再看计划任务和服务最后检查注册表和WMI。这样能最快定位主进程和持久化入口缩短业务中断时间。4.3 事后复盘把入侵时间线拉出来防止下次再踩清完病毒之后我建议花半小时做一次复盘而不是直接撒手不管。复盘的核心是找出“攻击者是什么时候进来的、从哪里进来的”。打开事件查看器的安全日志按时间搜索4625和4624事件。4625是登录失败大量集中出现说明有人在对服务器做口令爆破接着找爆破成功后的第一个4624事件看登录类型和来源IP。登录类型为10表示远程交互式登录也就是通过RDP进来的如果配合了Web漏洞日志里可能还有IIS或者Tomcat产生的访问记录。PowerShell日志方面Windows PowerShell 操作日志中的4104事件记录了脚本块内容如果攻击者用PowerShell下载并执行木马这里会留下证据。把这些线索串成一条时间线什么时间点出现大量登录失败、什么时间点第一次登录成功、什么时间点出现新的计划任务/服务、什么时间点CPU开始飙高。有了时间线就能确定木马的初始投递入口再针对这个入口做专项修复。只清毒不补入口等于给攻击者留了扇后门过几天又会被同一批人打进来。如果你在内网有多台服务器还要考虑横向扩散的问题。检查內网其他机器是否也有可疑的登录来源特别是域控、备份服务器、文件服务器这类高价值目标。挖矿木马有时会利用弱口令在内网横向移动一台机器中毒整个网段都可能被扫。最后说一个我一直坚持的小经验清除完所有东西之后别急着把服务器切回业务先空跑半天到一天观察CPU曲线、网络连接和计划任务有没有异常波动。同时趁服务器状态干净的时候把系统快照或者镜像做一份作为后续处置的“干净基线”。以后再出问题直接恢复基线比从头排查快得多。这也是为什么我总说“清毒不算完加固和基线才是终点”。在自己的维护清单上把这一步加上服务器才能真正从矿主手里彻底抢回来。
返回列表