今天给大家分享一下应急响应之挖矿木马实战演练教程。
喜欢的朋友们,记得给我点赞支持和收藏一下,完整网络安全应急响应学习资料,请看文末扫描免费获取。
什么是挖矿木马
挖矿木马是一种恶意软件,它在未经用户许可的情况下,利用用户的计算资源来挖掘加密货币,从而为攻击者带来非法收益。这类软件通常通过多种手段传播,例如利用系统漏洞、弱密码爆破、伪装正常软件等方法感染目标设备。
挖矿木马的危害:
▶ 影响计算机性能:挖矿木马会占用大量的CPU资源,导致电脑运行缓慢,甚至出现卡顿现象 。
▶ 浪费资源:挖矿过程中会消耗大量的电力,加快硬件老化速度 。
▶ 安全风险:挖矿木马可能会使用户的计算机成为黑客的控制对象,从而窃取个人信息和金融数据,造成财产损失。
实战案例一
去年夏天的一个深夜,我手机突然弹出服务器监控告警:“CentOS 服务器 CPU 使用率持续 95% 以上,已超过阈值”。作为公司的安全应急响应工程师,我第一反应是 “大概率中了挖矿木马”—— 毕竟这类木马最典型的特征就是 “吞噬 CPU 资源,静默挖矿”。
登录服务器后,top 命令的输出果然印证了我的判断:一个名叫 “kworker” 的进程(后来发现是伪装名)霸占了 98% 的 CPU,进程 ID 恒定不变,手动 kill 后不到 10 秒又自动重启。那天我花了 3 小时,从 “定位木马” 到 “清除残留” 再到 “溯源攻击入口”,完整走了一遍应急响应流程,也摸清了这类木马的常见套路。
后来在团队培训时,我发现不少刚入行的网安同事,面对挖矿木马时要么 “只会 kill 进程,越杀越多”,要么 “找不到持久化后门,清理后复发”。其实挖矿木马应急是网安人的基础技能,核心在于 “按流程拆解,抓准关键节点”。这篇文章,我会以实战演练的形式,带大家从 0 到 1 掌握挖矿木马应急响应,所有操作均在模拟环境中进行,可放心复现。
一、演练环境搭建:模拟真实挖矿木马感染场景
在开始应急前,我们先搭建一个和真实环境一致的演练平台,避免直接在生产环境操作导致风险。
1. 基础环境准备
| 环境类型 | 配置详情 | 用途 |
|---|---|---|
| 服务器系统 | CentOS 7.9(最小化安装) | 模拟被感染的生产服务器,关闭防火墙和 SELinux(模拟部分企业的宽松配置) |
| 挖矿木马样本 | XMRig 6.14.1(开源门罗币挖矿程序,无恶意破坏代码) | 模拟真实挖矿木马,添加持久化脚本使其具备 “杀不死” 特性 |
| 监控工具 | Nagios Core 4.4.11 | 模拟生产环境的 CPU 告警,触发应急响应流程 |
| 分析工具 | ps、top、netstat、find、grep、chkconfig | 应急响应中常用的系统命令工具,无需额外安装 |
2. 植入挖矿木马(模拟攻击过程)
为了还原真实感染场景,我们通过 “伪装成系统服务 + 定时任务持久化” 的方式植入木马,步骤如下:
-
上传木马程序:
将 XMRig 挖矿程序(重命名为 “kworker”,伪装成 Linux 系统进程)上传到服务器
/usr/bin/目录,赋予执行权限:
chmod +x /usr/bin/kworker -
添加系统服务持久化:
在
/etc/systemd/system/目录下创建
kworker.service文件,内容如下(让木马随系统启动):
[Unit] Description=System Kworker Service(伪装成系统服务) After=network.target [Service] Type=simple ExecStart=/usr/bin/kworker -o pool.minexmr.com:443 -u 45h8jZkLxYj9wqf12s7aD3fG5hJ7kL9mN0pQ1rT2sU3vW4xY5z -p x(挖矿池地址和钱包地址) Restart=always(进程被杀死后自动重启) [Unit] WantedBy=multi-user.target -
添加定时任务持久化:
通过 crontab 添加定时任务,每 5 分钟检查一次木马进程,不存在则重启:
crontab -e # 添加以下内容 */5 * * * * pgrep -f kworker || /usr/bin/kworker & -
启动木马:
执行命令启动服务并刷新定时任务,模拟木马 “静默运行”:
systemctl daemon-reload systemctl start kworker systemctl enable kworker(设置开机自启)
此时监控工具会触发 CPU 告警,我们的应急响应流程正式开始。
二、应急响应全流程:从 “告警触发” 到 “彻底清除”(附实操命令)
挖矿木马应急响应的核心逻辑是 “先止血(降低影响),再溯源(找到入口),最后加固(防止复发)”,具体分为 6 个步骤,每个步骤都有明确的操作目标和命令。
步骤 1:发现与初步判断 —— 确认是否为挖矿木马
接到 CPU 告警后,第一步要快速判断 “高 CPU 占用是否由挖矿木马引起”,避免误判为 “正常业务峰值”。
实操命令与分析:
-
查看 CPU 占用 TOP 进程:
top -b -n 1(-b表示批量模式,-n 1表示只输出1次结果,便于查看)-
关键观察点:是否有 “无名进程”“伪装成系统进程的程序”(如本文中的 “kworker”,真实系统进程的 kworker 通常带有编号,如 kworker/0:0),且 CPU 占用率持续 90% 以上。
-
示例输出:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1234 root 20 0 100000 50000 10000 R 98.5 2.5 10:30.12 kworker
-
-
查看进程对应的可执行文件路径:
ls -l /proc/1234/exe(1234为木马进程PID,exe是进程对应的可执行文件软链接)- 关键观察点:正常系统进程的 exe 路径通常在
/usr/sbin/或/bin/下,若路径异常(如/tmp/、/var/tmp/或未知目录),大概率是木马。 - 示例输出:
lrwxrwxrwx 1 root root 0 8月 10 02:30 /proc/1234/exe -> /usr/bin/kworker(虽在 /usr/bin 下,但文件名伪装,需进一步验证)
- 关键观察点:正常系统进程的 exe 路径通常在
-
检查进程网络连接(判断是否连接挖矿池):
netstat -antp | grep 1234(-a显示所有连接,-n显示IP和端口,-t显示TCP连接,-p显示进程PID和名称)- 关键观察点:是否有连接到境外 IP(尤其是挖矿池常用的 IP 段,如门罗币池多为 172.xx.xx.xx、45.xx.xx.xx),且端口多为 443、8080 或自定义端口。
- 示例输出:
tcp 0 0 192.168.1.100:56789 45.123.45.67:443 ESTABLISHED 1234/kworker(45.123.45.67 为模拟挖矿池 IP)
通过以上 3 步,可 100% 确认:该进程为挖矿木马,需立即处置。
步骤 2:紧急处置 —— 先 “暂停挖矿”,降低业务影响
确认是挖矿木马后,第一步要 “快速停止挖矿进程”,避免 CPU 持续高占用影响业务。但需注意:直接 kill 进程会触发持久化机制(如我们之前设置的 systemd 重启和 crontab 定时任务),所以要先 “断持久化”,再 “杀进程”。
实操命令与分析:
-
停止并禁用系统服务持久化:
systemctl stop kworker(停止当前服务) systemctl disable kworker(禁止开机自启) rm -f /etc/systemd/system/kworker.service(删除服务配置文件) systemctl daemon-reload(刷新systemd配置)- 关键说明:若木马未通过 systemd 持久化,可能通过
/etc/rc.d/rc.local文件(需检查该文件是否有启动木马的命令,若有则注释掉)。
- 关键说明:若木马未通过 systemd 持久化,可能通过
-
清除定时任务持久化:
crontab -l > crontab_bak(先备份当前定时任务,避免误删正常任务) crontab -e(编辑定时任务,删除与木马相关的一行:*/5 * * * * pgrep -f kworker || /usr/bin/kworker &)- 补充检查:除了当前用户的 crontab,还要检查系统级定时任务目录
/etc/cron.d/、/etc/cron.hourly/,避免遗漏隐藏的定时任务(如/etc/cron.d/miner)。
- 补充检查:除了当前用户的 crontab,还要检查系统级定时任务目录
-
杀死木马进程(此时 kill 后不会重启):
kill -9 1234(-9表示强制杀死进程,避免进程捕获信号后自我保护) pgrep -f kworker(验证进程是否已被杀死,无输出则成功)
此时再用 top 命令查看,CPU 使用率会快速下降到正常水平(通常 5% 以下),紧急处置完成。
步骤 3:木马定位与全量排查 —— 找出所有关联文件
杀死进程只是 “治标”,必须找到木马的所有关联文件(如配置文件、日志、后门脚本)并删除,否则残留文件可能导致木马复发。
实操命令与分析:
-
根据木马文件名查找所有关联文件:
find / -name "kworker*" 2>/dev/null(/表示全目录搜索,2>/dev/null屏蔽权限不足的报错,避免干扰结果)-
常见隐藏路径:
/tmp/、/var/tmp/、/usr/local/bin/、/root/.ssh/(部分木马会在.ssh 目录留下后门密钥)。 -
示例输出:
/usr/bin/kworker(木马主程序) /var/tmp/kworker.conf(木马配置文件,包含挖矿池地址) /root/.kworker.log(木马运行日志)
-
-
检查异常用户(是否有攻击者创建的隐藏账号):
cat /etc/passwd | grep -v nologin(过滤掉无法登录的系统账号,查看是否有陌生账号) cat /etc/shadow | grep -v "!"(查看是否有可登录的陌生账号,若有则立即锁定:passwd -l 陌生账号名)- 关键说明:部分挖矿木马上传者会创建隐藏账号(如 “miner”“root123”),用于后续重新控制服务器,必须检查。
-
检查开机启动项(除了 systemd 和 crontab,是否有其他持久化方式):
chkconfig --list(查看系统服务开机启动状态,是否有陌生服务) ls -l /etc/rc.d/rc3.d/(查看3级别运行模式下的启动项,若有陌生服务则删除) -
删除所有关联文件:
rm -f /usr/bin/kworker /var/tmp/kworker.conf /root/.kworker.log(删除找到的所有木马文件,-f避免确认提示)
步骤 4:溯源分析 —— 找到木马是如何进来的
清除木马后,必须 “找到攻击入口”,否则攻击者可能通过同样的方式再次植入木马。挖矿木马的常见入侵路径有 3 种:SSH 弱口令、Web 漏洞(如文件上传、命令注入)、服务器未打补丁的漏洞(如 Log4j、Struts2)。
实操命令与分析:
-
排查 SSH 登录日志(判断是否为弱口令入侵):
cat /var/log/secure | grep "Accepted password" | grep -v "192.168.1.1"(192.168.1.1为管理员常用IP,过滤掉正常登录)- 关键观察点:是否有陌生 IP(尤其是境外 IP)的成功登录记录,若有则说明 SSH 弱口令被破解。
- 示例输出:
Aug 10 01:23:45 localhost sshd[6789]: Accepted password for root from 123.45.67.89 port 12345 ssh2(123.45.67.89 为陌生 IP,确认是攻击源)
-
排查 Web 日志(若服务器运行 Web 服务,判断是否为 Web 漏洞入侵):
# 以Nginx为例,日志路径通常为/var/log/nginx/access.log cat /var/log/nginx/access.log | grep -E "shell|upload|cmd|exec"(搜索包含webshell、文件上传、命令执行关键词的请求)- 关键观察点:是否有 “POST /upload.php?file=webshell.php”“GET /cmd?exec=whoami” 这类异常请求,若有则说明存在 Web 漏洞。
-
排查系统补丁(判断是否为未打补丁的漏洞入侵):
# 查看已安装的补丁(CentOS系统) yum list installed | grep "log4j"(检查Log4j漏洞补丁) yum list installed | grep "struts2"(检查Struts2漏洞补丁)- 若未安装对应补丁,且服务器开放了相关服务端口(如 8080),则大概率是通过该漏洞入侵。
本次演练中,我们通过 SSH 弱口令(root 账号密码为 123456)植入木马,因此溯源结果为 “SSH 弱口令导致攻击者登录服务器,植入挖矿木马并配置持久化”。
步骤 5:彻底清除验证 —— 确保无残留
清除并溯源后,需要验证 “木马是否彻底清除,无复发可能”,验证步骤如下:
-
重启服务器(触发所有开机启动项,检验是否有残留):
reboot -
重启后检查进程:
top -b -n 1 | grep -E "kworker|xmrig"(检查是否有木马进程) pgrep -f kworker(无输出则说明无进程残留) -
检查持久化配置:
systemctl list-units | grep kworker(无输出则说明服务已清除) crontab -l | grep kworker(无输出则说明定时任务已清除) find / -name "kworker*" 2>/dev/null(无输出则说明文件已清除) -
检查网络连接:
netstat -antp | grep -E "443|8080"(检查是否有连接到挖矿池的异常连接)
若以上检查均无异常,说明木马已彻底清除。
步骤 6:加固防范 —— 避免再次被入侵
应急响应的最终目标是 “防止类似事件再次发生”,针对本次 SSH 弱口令入侵 + 挖矿木马,加固措施如下:
-
修改 SSH 登录配置(杜绝弱口令和暴力破解):
vi /etc/ssh/sshd_config # 修改以下配置 PermitRootLogin no(禁止root账号直接登录) PasswordAuthentication no(禁用密码登录,改用SSH密钥登录) Port 2222(修改SSH默认端口22为2222,降低被扫描概率) # 重启SSH服务 systemctl restart sshd -
安装并配置入侵检测工具(如 fail2ban,防止暴力破解):
yum install -y fail2ban systemctl start fail2ban systemctl enable fail2ban # 配置SSH暴力破解防护 vi /etc/fail2ban/jail.d/ssh.conf [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] logpath = /var/log/secure maxretry = 3(3次失败登录后封禁IP,持续1小时) bantime = 3600 -
定期更新系统补丁:
yum update -y(CentOS系统,定期执行,修复已知漏洞) -
部署服务器安全监控(实时告警异常进程):
- 推荐工具:Nagios、Zabbix(监控 CPU、内存、网络连接)、ClamAV(Linux 杀毒软件,定期扫描恶意文件)。
三、关键技术点拆解:挖矿木马应急的 “避坑指南”
在多次实战中,我发现不少人会在 3 个关键节点 “踩坑”,导致木马清除不彻底或应急效率低下,这里专门拆解解决方案。
1. 坑 1:木马进程伪装成系统进程,无法识别
场景:木马进程名改为 “systemd”“sshd”“nginx”,top 命令中与正常进程混淆,无法区分。解决方案:通过 “进程路径 + MD5 校验” 双重验证:
# 1. 查看进程对应的可执行文件路径(正常systemd路径为/usr/lib/systemd/systemd)
ls -l /proc/进程PID/exe
# 2. 计算进程可执行文件的MD5值,与正常文件对比(正常文件MD5可从官方获取)
md5sum /usr/bin/可疑进程名
# 示例:若可疑进程为“sshd”,正常sshd的MD5为abc123,而木马sshd的MD5为def456,可确认是伪装
2. 坑 2:木马通过 “隐藏定时任务” 持久化,清除后复发
场景:定时任务不在crontab -l中显示,而是隐藏在/etc/cron.d/目录下的陌生文件(如/etc/cron.d/miner),清除 crontab 后仍会重启。解决方案:全目录搜索定时任务相关文件:
# 1. 搜索所有定时任务目录
find /etc/cron* -type f -mtime -7(-mtime -7表示查找7天内修改过的文件,大概率是木马添加的)
# 2. 查看可疑文件内容
cat /etc/cron.d/miner
# 3. 删除可疑文件并重启crond服务
rm -f /etc/cron.d/miner
systemctl restart crond
3. 坑 3:攻击者留下后门密钥,清除木马后仍能登录
场景:攻击者通过 SSH 登录后,在/root/.ssh/authorized_keys文件中添加自己的公钥,即使修改 root 密码,仍能通过密钥登录。解决方案:检查并清理 authorized_keys 文件:
# 1. 查看authorized_keys文件内容,是否有陌生公钥(正常公钥为管理员自己添加)
cat /root/.ssh/authorized_keys
# 2. 删除陌生公钥,保留自己的公钥
vi /root/.ssh/authorized_keys
# 3. 限制authorized_keys文件权限,防止被篡改
chmod 600 /root/.ssh/authorized_keys
chown root:root /root/.ssh/authorized_keys
全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取

挖矿木马实战案例二
(1)事件概述.
接到某司客户应急响应请求:客户服务器和多台终端PC中了挖矿木马.【主机一直卡,CPU一直跑满的】
| 了解现状 | 了解发病时间 | 了解系统结构 | 了解网络结构 |
| 主机一直卡,CPU一直跑满 | 05:51 | Linux 系统 系统. | 外网 / 内网 |
| 主机一直卡,CPU一直跑满 | 06:30 | Linux 系统 系统. | 内网 |
| 主机一直卡,CPU一直跑满 | 06:57 | Linux 系统 系统. | 内网 |
(2)确认攻击的范围.(有多少主机被攻击了)
到客户现场发现有服务器和多台终端PC中了挖矿木马.【主机一直卡,CPU一直满的】
| 主机名 | IP | 感染的情况 | 传播手段 |
| 服务器 | 192.168.1.106 | CPU一直跑满 | 利用其他主机漏洞进行横向渗透. |
| 终端PC1 | 192.168.1.109 | CPU一直跑满 | 利用其他主机漏洞进行横向渗透. |
| 终端PC1 | 192.168.1.120 | CPU一直跑满 | 利用其他主机漏洞进行横向渗透. |
消除木马:
(1)查看 CPU 的运行情况,是否存在挖矿木马.
top # 查看 CPU 的运行情况.

(2)查看这个 挖矿木马的 文件路径在哪.(记下时间,等下查看日志有用)
find / -name xmrig # 文件名在 CPU 运行满的最后面.
find / -name 文件名


(3)进行 挖矿木马 分析.(使用 威胁情报 进行分析.)
上传 样本 进行分析,也可以根据里面的 域名 或者 IP地址 进行分析.
https://x.threatbook.com/ # 微步在线
https://www.virustotal.com/gui/ # VirusTotal(上传文件,检查木马)
https://ti.360.net/#/homepage # 360威胁平台
https://ti.nsfocus.com/ # 绿盟威胁情报平台
https://ti.dbappsecurity.com.cn/ # 安恒威胁情报平台

怎么 分析IP 地址呢!(可以查看网络连接找到IP地址的.)
其他所以排查方法:
(4)尝试关闭挖矿木马的进程.(一般都会再次运行起来.)
kill 5157 # 关闭这个进程.
kill 进程数
(5)进行删除 挖矿木马 程序.(上面已经查找出文件的位置了)

(6)排查 定时任务.
定时定点执行Linux程序或脚本.
crontab -e # 用来创建定时任务.
crontab -l # 查看有多少个任务.

定时保存的路径有以下几个.
vi /var/spool/cron/ # 目录里的任务以用户命名.


vi /etc/crontab # 调度管理维护任务.(排查里面有没有新的添加)

vi /etc/cron.d/ # 这个目录用来存放任何要执行的crontab文件或脚本
(排查有没有新的添加文件 再和运维核对 进行排查)

vi /etc/cron.hourly # 每小时执行一次
vi /etc/cron.daily # 每天执行一次
vi /etc/cron.weekly # 每周执行一次
vi /etc/cron.monthly # 每月执行一次
(7)如果还有,可以排查开机启动项.
其他所以排查方法:应急响应:Linux 入侵排查思路.
日志分析:(随便排查出系统存在的其他隐患)
先 Web 的日志(看看是不是上传了木马),系统的日志.(看看是不是被爆破了)
(1)排查 是否存在后门.(Web网站)
使用河马的扫描工具(扫描后门木马)
chmod +x hm # 添加权限
./hm scan /var/www/html
./hm scan 指定的扫描路径.


(2)根据 后门木马信息 和利用 挖矿木马 的时间,找到上传挖矿木马的后门.


(3)排查完进行删除所以木马文件.
日志存在:
(1)确定攻击时间.
就是后门的上传时间,在日志中找这个后门木马的文件名.(比如上面的:.bgxg.php)
(2)确定攻击特征.
文件上传.
(3)确定特征文件.
就是后门木马文件.

(4)确定攻击者IP

(5)攻击复现.
在日志中 找到木马的路径,进行测试就行.
日志不存在:
(1)黑盒测试.(对 Web 网站进行渗透测试.)
(2)查看系统服务是否存在弱口令(Redis,ssh等)
漏洞修复:
(1)对黑客的入侵点进行修复,如果渗透测试的结果还有别的安全隐患,也进行修复.
(2)部署Web安全设备(IPS),杀毒软件,流量监控设备.
(3)定期给主机打补丁.
总结:挖矿木马应急是网安人的 “基本功”,没有理由不会
回顾整个实战演练流程,挖矿木马应急响应的核心并不复杂:“按流程拆解,抓准‘进程 - 持久化 - 溯源’三个关键节点,用系统命令工具就能完成 80% 的操作”。但为什么还有很多网安人 “不会”?本质是 “缺乏实战演练”—— 平时只学理论,遇到真实告警时手忙脚乱,找不到关键文件。
作为网安人,我们必须清楚:挖矿木马是企业服务器最常见的安全事件之一,也是应急响应的 “入门题”。掌握它,不仅能应对日常告警,更能培养 “从现象到本质” 的分析思维 —— 比如从 “CPU 高占用” 联想到 “挖矿木马”,从 “木马持久化” 联想到 “系统服务、定时任务”,这些思维在应对更复杂的应急事件(如勒索病毒、APT 攻击)时同样适用。
最后,建议大家按本文的演练环境,亲手操作一遍 “植入 - 应急 - 清除” 的全流程 —— 只有动手做过,才能在真实告警发生时,做到 “5 分钟判断,30 分钟清除,2 小时溯源”,真正成为合格的应急响应工程师。
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取




被折叠的 条评论
为什么被折叠?



