服务器被挖矿木马盯上了一份算力劫持从检测到清除的实战指南【免费下载链接】xmrigRandomX, KawPow, CryptoNight and GhostRider unified CPU/GPU miner and RandomX benchmark项目地址: https://gitcode.com/GitHub_Trending/xm/xmrig挖矿木马也就是常说的算力劫持干的是一桩稳赚不赔的买卖偷偷租用你的 CPU、GPU 和带宽去给攻击者的矿池打工电费你来付、收益他拿走。它的入侵往往不留痕迹直到月底账单爆表或云平台发来 CPU 告警你才惊觉我的服务器到底在帮谁赚钱。这篇文章不打算给你堆概念而是带你完整走一遍处置流程先学会辨认被劫持的信号再用几条新命令把潜伏进程揪出来接着讲清楚如何连根清除、如何防止复发最后附上一张可以直接照做的行动速查表。怎么判断服务器真的被偷走算力了先别急着下结论服务器 CPU 高不等于被挖矿你的业务高峰期、别人的爬虫、失控的循环脚本都可能让负载飙升。挖矿木马和正常负载最大的区别在于行为模式它不挑业务时段7×24 小时稳定输出CPU 占用画出来是一条几乎不带波动的平线因为矿机最忌讳的就是算力中断。三个最容易暴露的破绽你可以按下面三个方向快速自检任何一个命中都值得深挖CPU 长跑选手进程一跑就是几天几夜重启前从未退出且占用稳定在 90% 以上。深夜悄悄外联机器在凌晨两三点持续与陌生 IP 建立长连接端口集中在 4444、14444、8888、7777 这类矿池常用号段。文件查无此人进程明明在运行可你在常规目录里找不到它的可执行文件或者文件名跟某个系统进程长得几乎一样。正规矿工长什么样先认个脸熟这里有个前提得说清楚xmrig 本身是开源的正规矿工程序很多爱好者会用它给自己挖矿。但正因为知名度高、性能好黑客也最爱直接拿它改装成木马。所以排查时不能见 xmrig 就杀而是要学会分辨正经矿工和偷渡矿工。上图是正规 xmrig 的正常运行画面界面顶部清楚显示版本号、依赖库、CPU 型号与线程数中间是矿池地址和算法下方持续滚动提交结果、算力、难度等日志。这套信息是可追溯的——你能从日志里看到它连了哪个矿池、用了什么算法。而恶意变种通常不敢这么光明正大它往往关掉日志、隐藏窗口把矿池地址写死在二进制里。为什么木马能绕过杀毒软件的眼睛你可能会纳闷杀毒软件天天更新病毒库怎么就是查不出这台机器上的矿因为现代挖矿木马早就进化出好几层易容术每一层都在针对传统的特征码扫描。改名换姓是最基础的一招。攻击者把xmrig重命名为svchost.exe、winlogon.exe、systemd-network之类再配上对应的伪装路径一眼扫过去确实很难起疑。加壳与二次打包是进阶手法矿工本体先用 UPX、VMProtect 之类的壳压缩再塞进一个自解压安装包里杀软每次扫到的都是不断变化的包装纸真正的内容藏在运行时的内存里。藏匿地点也很有讲究/tmp、/dev/shm、/var/tmp、%TEMP%这些临时目录天生就是三不管地带重启即清、无人问津木马偏偏就喜欢在里头生根发芽。Linux 下用 3 个命令揪出潜伏的挖矿进程排查 Linux 主机工具不在多在精。下面这套组合拳比老一套ps加netstat的组合直观得多命令在任何主流发行版上都能直接用。第一步htop 按 CPU 排序锁定长跑选手打开终端输入htop按一下F5切到树形视图再按F6选择按 CPU 占用排序。这时候全机器最卖力的进程会齐刷刷浮到最上面——如果第一名你根本不认识或者名字像系统进程但路径不对劲就先记下它的 PID。接着看它的真面目# 查看完整启动命令行cmdline 里每个参数以空字符分隔 tr \0 /proc/PID/cmdline # 查看可执行文件的真实路径 readlink -f /proc/PID/exe正规进程的启动参数通常简洁明了挖矿木马的命令行则常常带着--donate-level 0、--background、--url这类指向矿池的痕迹。readlink一步尤其关键它能穿透伪装——哪怕进程名写成sshdexe 指向的路径也会立刻露馅。第二步ss 加 lsof顺着网络连接摸到老巢ss是新一代 socket 查询工具输出比 netstat 干净还能直接显示进程归属# 查看所有 TCP/UDP 连接及其对应进程 ss -tunap # 单独过滤矿池常用端口 ss -tunap | grep -iE :4444|:14444|:8888|:7777找到可疑的外联后再用lsof顺着 PID 挖它打开了哪些文件、工作目录在哪lsof -p PID重点看cwd工作目录和txt可执行文件两栏。工作目录指向/tmp、/dev/shm的进程基本可以直接列为重点嫌疑人。第三步journalctl 翻旧账查清它是什么时候进来的journalctl不只管系统日志还能查具体服务的启动记录。先看有哪些身世不明的服务在开机自启systemctl list-unit-files --stateenabled # 查看某个可疑服务的详细日志 journalctl -u 可疑服务名 --since 3 days ago别忘了定时任务这条老路——crontab -l看当前用户的任务ls -la /etc/cron.d/ /etc/cron.hourly/看系统级定时目录一条每分钟拉取并执行某脚本的条目就是标准的持久化剧本。Windows 平台怎么查用 Sysinternals 一锤定音Windows 侧的排查思路相同但工具换一套。不推荐在目标机器上现场下载安装包可能正好撞上木马的监控优先用系统自带命令打头阵。先用 PowerShell 快速给进程按 CPU 排序找出异常大户Get-Process | Sort-Object CPU -Descending | Select-Object -First 15 # 想连命令行一起看用 CIM 查询更全面 Get-CimInstance Win32_Process | Select-Object ProcessId, Name, ExecutablePath, CommandLineExecutablePath是重点核对字段一个声称自己是系统服务的进程路径却指向用户临时目录这就很能说明问题了。随后上 Sysinternals 工具做深度确认Process Explorer打开后菜单栏勾选Verify Image Signatures所有带有效签名的进程会高亮。矿工木马几乎不可能拥有合法厂商签名无签名项立刻原形毕露。Autoruns一键列出所有开机启动项含注册表 Run 键、计划任务、服务、启动文件夹按发布者未验证排序可疑驻留项一目了然。数字签名核验单独验证某个可疑文件时用Get-AuthenticodeSignature -FilePath C:\路径\可疑文件.exe看StatusNotSigned或HashMismatch都说明文件来历存疑。挖矿木马是怎么赖着不走的清除要连根拔只杀进程不除持久化等于白干——重启之后它还会自己爬起来继续挖。挖矿木马的赖功通常体现在四类手段上定时任务crontab、计划任务、自启服务systemd、Windows 服务、登录钩子~/.bashrc、/etc/profile、注册表 Run 键、容器内挂载把矿工目录挂进镜像容器重建一次复活一次。清除七步走顺序别乱先取证再动手把ss -tunap的输出、进程命令行、可疑文件路径、持久化条目全部记录下来这是你后续溯源和加固的依据。停服务、停进程systemctl stop 服务名与systemctl disable 服务名成对执行Windows 侧用Stop-Process -Id PID -Force。删除可执行文件删之前用ls -la确认路径临时目录里的压缩包、脚本一并清掉。清除持久化项删掉定时任务条目、自启服务、.bashrc末尾追加的那几行。恢复被改的配置SSH 公钥、cron 文件、容器镜像标签凡是它碰过的都回到基线版本。换密码、换密钥既然它已经进来过你原来的凭据一律视为已泄露。复查过 24 小时再看一遍 CPU 曲线和进程列表确认没有第二梯队的备用木马。配置文件被动手脚和官方模板对一下就明白把机器上挖矿木马附带的config.json和官方仓库的配置模板逐项比对几个典型差异能帮你快速定性可疑配置项恶意变种常见取值说明donate-level0正规版本会强制保留最低捐赠比例配置写 0 多半是改过代码的定制版log-filenull 且后台运行、无控制台日志被彻底关闭作案不留痕backgroundtrue配合无日志使用让进程隐形cpu.max-threads-hint100 且绑定全部核心榨干机器所有算力不顾业务死活想拿官方模板做对照可以把仓库拉到本地看src/config.jsongit clone https://gitcode.com/GitHub_Trending/xm/xmrig上图是较新版本 xmrig 的运行画面可以看到算法、内存数据集、矿池难度等参数都清晰可查。对照的意义在于正规矿工的运行是透明的恶意变种的运行是见不得光的。容器与 K8s 环境里藏了矿怎么办裸机排查完别忘了容器这个重灾区。容器天然自带隔离外衣很多运维习惯性认为里面跑的东西风险可控攻击者恰恰利用这种麻痹心理。Docker 场景# 看容器资源占用CPU 异常的容器第一个被点名 docker stats # 拿到容器的宿主进程 PID直接进 /proc 看它到底在跑什么 docker inspect --format {{.State.Pid}} 容器名 cat /proc/PID/cmdline | tr \0 容器内看不到的东西在宿主机/proc里全都藏不住。另外检查有没有异常挂载——一个容器挂载了宿主机的根目录或 Docker Socket等于给自己留了通往宿主机的后门。K8s 场景# 先看节点再看 Pod逐层缩小范围 kubectl top nodes kubectl top pods -A # 按名字特征过滤可疑工作负载 kubectl get pods -A | grep -iE miner|xmr|workerK8s 里还有个特有的猫腻攻击者会以低优先级 DaemonSet 或裸 Pod 的方式投放矿工资源被抢占时它自愿被驱逐躲过自动扩缩容的注意力。排查时记得看看那些始终 Pending、却反复重建的工作负载。容器逃逸要重点防最危险的情况不是容器里挖矿而是容器逃逸后到宿主机上挖矿。一旦发现容器以特权模式运行、挂载了/proc或 Docker Socket且宿主机 CPU 异常就要按最坏情况处置立刻隔离节点、切断网络并按宿主机被攻陷的标准做全面排查。复盘一场真实的 SSH 爆破挖矿处置理论说再多不如看一场完整的实战。某云上业务主机某天深夜被安全平台标记为高 CPU 利用率值班同学的处置时间线如下时间动作依据22:10收到云平台 CPU 持续 95% 告警监控曲线呈 24 小时平线22:15htop按 CPU 排序发现名为systemd-network的陌生进程进程名与常见系统服务高度相似但 exe 指向/tmp/22:25ss -tunap确认该进程持续连接境外 IP 的 14444 端口矿池常用端口命中22:35journalctl回溯服务创建时间发现与爆破告警时间吻合入侵时间线对齐22:50停进程、删文件、清定时任务与自启服务按清除七步走执行23:10更换 SSH 密钥、关闭密码登录、封禁来源 IP 段入口收紧次日在 EDR 上配置CPU 长跑 矿池端口外联联动规则防复发复盘结论很朴素木马不可怕可怕的是你在它跑了一周之后才发现它。整个处置过程里最有价值的不是杀这个动作而是 22:15 那次精准定位——而这依赖的只是前面教的三条命令。加固三步走进不来、挖不动、留不住清除只是起点加固才是让木马不再回来的关键。按照进不来、挖不动、留不住三个目标逐项落实比任何单点措施都管用。进不来SSH 一律密钥登录并关闭密码认证对外暴露的端口做最小化收敛云安全组只放行业务必需端口Docker 容器禁用特权模式不挂载宿主敏感目录镜像只从可信仓库拉取。挖不动给关键进程加 CPU 资源限制systemd 的CPUQuota、容器的--cpus部署监控时盯住进程数突增 CPU 曲线走平 陌生端口外联这三个信号的组合而不是只看单一指标。留不住EDR 与云平台告警打通联动——云平台负责发现资源异常EDR 负责定位进程与文件两边规则互补CPU 超阈值触发深度扫描矿池端口外联直接阻断。这类联动规则越早配好下一场处置就越从容。落地行动清单阶段你要做的事关键命令 / 工具检测按 CPU 排序找异常进程、查可疑外联、翻启动项htop、ss -tunap、lsof、journalctl检测Windows 侧扫进程树与自启项Process Explorer、Autoruns、Get-Process清除停服务、删文件、清持久化、换凭据systemctl、crontab -e、Stop-Process加固关密码登录、限资源、配联动告警安全组、CPUQuota、EDR 规则复查24 小时后复核 CPU 曲线与进程列表htop、ss -tunap处置完成后的那个深夜当你再次打开htop看到 CPU 曲线终于跟着业务请求起起伏伏、而不是倔强地贴在天花板上时那种服务器终于物归原主的踏实感就是这场战斗最实在的回报。记住挖矿木马防不胜防但只要你掌握了看信号、抓进程、断持久、堵入口这套动作它在你机器上的生存空间就所剩无几了。【免费下载链接】xmrigRandomX, KawPow, CryptoNight and GhostRider unified CPU/GPU miner and RandomX benchmark项目地址: https://gitcode.com/GitHub_Trending/xm/xmrig创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考