文章总结: 文档记录了2026年5月15日openEuler服务器遭遇kinsing挖矿病毒的完整应急响应过程。通过监控告警发现CPU占用99%后,运维人员立即断网隔离并保存现场证据,分析出病毒通过SSH弱密码暴力破解入侵,创建了定时任务和系统服务。文章详细展示了进程分析、网络连接追踪、恶意文件清除等实操步骤,并提供了修改SSH密码、安装防火墙等安全加固建议。 综合评分: 87 文章分类: 应急响应,恶意软件,安全运营,实战经验,安全意识
服务器CPU突然飙到99%?老运维手把手教你排查挖矿病毒,看这篇就够了!
原创
刘军军 刘军军
运维星火燎原
2026年6月13日 00:00 山西
在小说阅读器读本章
去阅读
🚨 背景
时间:2026年5月15日环境:openEuler 22.03 LTS 服务器(生产环境)发现者:运维值班工程师影响范围:单台Web服务器
一、发现异常(09:15)
1.1 监控告警触发
# 收到Prometheus告警邮件:CPU使用率持续超过95%
Subject: [ALERT] High CPU Usage on web01 (98%)
# 登录服务器查看
[root@web01 ~]# top
top-09:16:23 up 2 days, 14:32, 1 user, load average: 32.56, 31.89, 30.23
Tasks: 345 total, 5 running, 340 sleeping, 0 stopped, 0 zombie
%Cpu(s): 99.8 us, 0.2 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8169348 total, 123456 free, 6890124 used, 1155768 buff/cache
KiB Swap: 4194300 total, 12348 free, 4181952 used.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3289 root 20 0 12.3g 1.2g 164 R 99.9 15.6 89:43.16 kinsing
3290 root 20 0 8.2g 898.4m 156 R 99.9 11.3 89:39.22 kinsing
3291 root 20 0 7.8g 856.2m 148 R 99.9 10.8 89:35.45 kinsing
3292 root 20 0 7.4g 812.1m 144 R 99.9 10.3 89:31.12 kinsing
1.2 初步判断
| 异常现象 | 判断结论 |
| — | — |
| 多个kinsing进程占用99% CPU | 可疑进程,可能是挖矿病毒 |
| 系统负载高达32+ | 资源被恶意消耗 |
| Swap分区几乎耗尽 | 内存资源紧张 |
| 进程名kinsing | 已知的挖矿木马名称 |
二、应急响应(09:18)
2.1 隔离网络
# 立即断网,防止病毒传播
[root@web01 ~]# ifdown ens33
# 或使用iptables阻断出站连接
[root@web01 ~]# iptables -A OUTPUT -j DROP
# 通知运维团队
[root@web01 ~]# echo "web01疑似感染挖矿病毒,已断网隔离" | mail -s "紧急告警" [email protected]
2.2 保护现场
# 保存当前进程快照
[root@web01 ~]# ps aux > /tmp/ps_before.txt
[root@web01 ~]# top -bn1 > /tmp/top_before.txt
# 保存网络连接状态
[root@web01 ~]# netstat -antp > /tmp/netstat_before.txt
[root@web01 ~]# ss -antp > /tmp/ss_before.txt
# 保存系统日志
[root@web01 ~]# cp /var/log/messages /tmp/messages_backup
[root@web01 ~]# cp /var/log/secure /tmp/secure_backup
[root@web01 ~]# cp /var/log/cron /tmp/cron_backup
三、深入分析(09:25)
3.1 分析可疑进程
# 查看kinsing进程详细信息
[root@web01 ~]# ps aux | grep kinsing
root 328999.9 15.6 130058201289448 ? R 07:46 89:43 /tmp/kinsing -c
root 329099.9 11.3 8734264920868 ? R 07:46 89:39 /tmp/kinsing -c
root 329199.9 10.8 8237056876544 ? R 07:46 89:35 /tmp/kinsing -c
# 查看进程启动路径
[root@web01 ~]# ls -la /tmp/kinsing
-rwxr-xr-x1 root root 8523776 Mar 1507:46 /tmp/kinsing
# 检查文件类型
[root@web01 ~]# file /tmp/kinsing
/tmp/kinsing: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, stripped
# 检查文件哈希值
[root@web01 ~]# md5sum /tmp/kinsing
a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 /tmp/kinsing
[root@web01 ~]# sha256sum /tmp/kinsing
0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef /tmp/kinsing
3.2 分析网络连接
# 查看kinsing进程的网络连接
[root@web01 ~]# netstat -antp | grep kinsing
tcp 0 0192.168.1.100:45678 45.33.32.156:80 ESTABLISHED 3289/kinsing
tcp 0 0192.168.1.100:54321 104.238.153.171:443 ESTABLISHED 3290/kinsing
tcp 0 0192.168.1.100:33456 172.67.135.9:443 ESTABLISHED 3291/kinsing
# 查询这些IP地址归属
# 45.33.32.156 -> 美国DigitalOcean(已知矿池IP)
# 104.238.153.171 -> 美国Cloudflare(矿池代理)
# 172.67.135.9 -> 美国Cloudflare(矿池代理)
3.3 分析进程树
# 查看进程启动关系
[root@web01 ~]# pstree -p | grep kinsing
init(1)───systemd(1001)───kinsing(3289)───kinsing(3290)───kinsing(3291)───kinsing(3292)
# 查看父进程
[root@web01 ~]# ps -ef | grep kinsing | head -1
root 3289 19907:46 ? 01:30:12 /tmp/kinsing -c
# 父进程是init(PID 1),说明是通过系统服务或定时任务启动
3.4 检查定时任务
# 检查系统定时任务
[root@web01 ~]# crontab -l
* * * * * /tmp/kinsing -c > /dev/null 2>&1
# 检查系统级定时任务
[root@web01 ~]# ls -la /etc/cron.*
-rw-r--r-- 1 root root 0 Mar 1507:45 /etc/cron.d/kinsing
-rw-r--r-- 1 root root 64 Mar 1507:45 /etc/cron.daily/kinsing
-rw-r--r-- 1 root root 64 Mar 1507:45 /etc/cron.hourly/kinsing
-rw-r--r-- 1 root root 64 Mar 1507:45 /etc/cron.weekly/kinsing
# 查看恶意定时任务内容
[root@web01 ~]# cat /etc/cron.d/kinsing
* * * * * root /tmp/kinsing -c > /dev/null 2>&1
3.5 检查系统服务
# 检查可疑系统服务
[root@web01 ~]# ls -la /etc/systemd/system/
-rw-r--r-- 1 root root 123 Mar 1507:45 kinsing.service
# 查看服务内容
[root@web01 ~]# cat /etc/systemd/system/kinsing.service
[Unit]
Description=Kinsing Service
[Service]
ExecStart=/tmp/kinsing -c
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
# 检查服务状态
[root@web01 ~]# systemctl list-unit-files | grep kinsing
kinsing.service enabled
3.6 检查SSH密钥和登录记录
# 检查SSH密钥是否被篡改
[root@web01 ~]# ls -la /root/.ssh/
-rw-r--r-- 1 root root 409 Mar 1507:45 authorized_keys
# 检查新增的SSH密钥
[root@web01 ~]# cat /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDA... miner@attackerserver
# 检查登录失败记录
[root@web01 ~]# grep "Failed password" /var/log/secure | tail -20
Mar 1507:30:01 web01 sshd[1234]: Failed password for root from 203.0.113.50 port 12345 ssh2
Mar 1507:30:05 web01 sshd[1235]: Failed password for root from 203.0.113.50 port 12346 ssh2
...
# 检查成功登录记录
[root@web01 ~]# grep "Accepted password" /var/log/secure | tail -5
Mar 1507:35:22 web01 sshd[2048]: Accepted password for root from 203.0.113.50 port 45678 ssh2
3.7 分析入侵时间线
# 查看系统日志中的可疑活动
[root@web01 ~]# grep -E "Mar 15 07:3[0-9]" /var/log/messages
Mar 1507:35:22 web01 systemd: Started Session 123 of user root.
Mar 1507:36:15 web01 crond[567]: (root) RELOAD (/var/spool/cron/root)
Mar 1507:36:20 web01 systemd[1]: Started Kinsing Service.
Mar 1507:36:25 web01 kernel: [12345.678901] Out of memory: Kill process 1234 (nginx) score 123 or sacrifice child
四、定位入侵入口(10:00)
4.1 分析攻击链
攻击时间线:
1. 07:30 - 攻击者开始暴力破解SSH密码
2. 07:35 - 暴力破解成功,获得root权限
3. 07:36 - 创建定时任务和系统服务
4. 07:36 - 下载并执行挖矿程序
5. 07:45 - 系统负载急剧上升
6. 09:15 - 监控告警触发
4.2 确认入侵方式
| 入口类型 | 证据 | 结论 |
| — | — | — |
| SSH暴力破解 | /var/log/secure中有大量失败尝试后成功登录 | ✅ 确认 |
| 弱密码 | root密码为默认密码”admin” | ✅ 确认 |
| 横向传播 | 暂未发现其他服务器感染 | ❌ 未确认 |
五、清除病毒(10:30)
5.1 停止挖矿进程
# 尝试正常终止进程
[root@web01 ~]# killall -SIGTERM kinsing
# 如果无效,强制终止
[root@web01 ~]# killall -9 kinsing
# 验证进程是否已停止
[root@web01 ~]# ps aux | grep kinsing || echo "kinsing进程已清除"
kinsing进程已清除
5.2 删除恶意文件
# 删除挖矿程序
[root@web01 ~]# rm -f /tmp/kinsing
# 删除定时任务
[root@web01 ~]# rm -f /etc/cron.d/kinsing
[root@web01 ~]# rm -f /etc/cron.daily/kinsing
[root@web01 ~]# rm -f /etc/cron.hourly/kinsing
[root@web01 ~]# rm -f /etc/cron.weekly/kinsing
# 删除用户定时任务
[root@web01 ~]# crontab -r
# 删除系统服务
[root@web01 ~]# rm -f /etc/systemd/system/kinsing.service
[root@web01 ~]# systemctl daemon-reload
5.3 清除SSH后门
# 备份并清理authorized_keys
[root@web01 ~]# cp /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bak
[root@web01 ~]# echo "" > /root/.ssh/authorized_keys
# 添加合法的SSH密钥
[root@web01 ~]# echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... [email protected]" >> /root/.ssh/authorized_keys
# 重启SSH服务
[root@web01 ~]# systemctl restart sshd
5.4 修改密码
# 修改root密码(使用强密码)
[root@web01 ~]# passwd root
Changing password for user root.
New password: 输入强密码(至少12位,包含大小写字母、数字、特殊字符)
Retype new password: 确认密码
passwd: all authentication tokens updated successfully.
5.5 恢复网络
# 恢复网络连接(先确认安全后)
[root@web01 ~]# iptables -F OUTPUT
[root@web01 ~]# ifup ens33
# 验证网络
[root@web01 ~]# ping -c 3 8.8.8.8
六、系统加固(11:00)
6.1 关闭不必要的服务
# 查看运行中的服务
[root@web01 ~]# systemctl list-unit-files --type=service | grep enabled
# 关闭不必要的服务
[root@web01 ~]# systemctl disable bluetooth
[root@web01 ~]# systemctl disable cups
[root@web01 ~]# systemctl disable postfix
6.2 配置防火墙
# 配置firewalld
[root@web01 ~]# systemctl enable firewalld
[root@web01 ~]# systemctl start firewalld
# 允许必要的端口
[root@web01 ~]# firewall-cmd --add-service=ssh --permanent
[root@web01 ~]# firewall-cmd --add-service=http --permanent
[root@web01 ~]# firewall-cmd --add-service=https --permanent
[root@web01 ~]# firewall-cmd --reload
6.3 SSH安全加固
# 修改SSH配置
[root@web01 ~]# cat >> /etc/ssh/sshd_config << 'EOF'
# 禁止密码登录(使用密钥认证)
PasswordAuthentication no
# 禁止root远程登录
PermitRootLogin no
# 限制登录用户
AllowUsers ops admin
# 修改SSH端口
Port 2222
# 限制认证尝试次数
MaxAuthTries 3
# 启用公钥认证
PubkeyAuthentication yes
EOF
# 重启SSH服务
[root@web01 ~]# systemctl restart sshd
6.4 安装安全工具
# 安装fail2ban防止暴力破解
[root@web01 ~]# dnf install -y fail2ban
[root@web01 ~]# systemctl enable fail2ban
[root@web01 ~]# systemctl start fail2ban
# 配置fail2ban
[root@web01 ~]# cat > /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled =true
port =ssh
filter = sshd
logpath = /var/log/secure
maxretry =3
bantime =3600
EOF
[root@web01 ~]# systemctl restart fail2ban
七、事后分析与报告(14:00)
7.1 入侵原因分析
| 原因 | 说明 | | — | — | | 弱密码 | root密码为默认值”admin”,极易被暴力破解 | | 开放SSH端口 | 22端口对公网开放,无访问限制 | | 未启用密钥认证 | 仅依赖密码认证 | | 未部署入侵检测 | 无fail2ban等防护措施 |
7.2 损失评估
| 类型 | 损失 | | — | — | | CPU资源 | 约2小时满负荷挖矿,影响业务服务 | | 内存/Swap | 大量内存被占用,导致部分服务OOM | | 网络带宽 | 持续向外连接矿池 | | 业务影响 | Web服务响应变慢,部分请求超时 |
7.3 改进措施
| 措施 | 负责人 | 完成时间 | | — | — | — | | 全服务器密码审计 | 运维组 | 3月16日 | | 部署fail2ban | 运维组 | 3月17日 | | 启用密钥认证 | 运维组 | 3月18日 | | 配置防火墙规则 | 网络组 | 3月19日 | | 部署EDR安全软件 | 安全组 | 3月25日 |
7.4 安全通告
【安全通告】关于web01服务器挖矿病毒入侵事件
一、事件概述
2024年3月15日09:15,监控系统告警显示web01服务器CPU使用率异常(98%),经排查确认感染挖矿病毒(kinsing)。
二、影响范围
- 受影响服务器:web01(192.168.1.100)
- 影响时间:约2小时(07:36-09:30)
- 业务影响:Web服务响应延迟增加
三、入侵原因
- SSH暴力破解成功(弱密码"admin")
- 未启用密钥认证
- 未部署入侵检测系统
四、处置措施
1. 已清除挖矿程序和相关定时任务
2. 已修改root密码为强密码
3. 已加固SSH配置(禁止密码登录、禁止root登录)
4. 已部署fail2ban防止暴力破解
5. 已配置防火墙规则
五、后续改进计划
1. 全服务器密码审计和更新
2. 统一启用SSH密钥认证
3. 部署企业级EDR安全软件
4. 加强安全监控和告警
六、责任人
- 发现人:张三(运维工程师)
- 处置人:李四(安全工程师)
- 审核人:王五(技术总监)
【运维部】
2024年3月15日
八、命令速查
8.1 应急响应命令
| 命令 | 作用 |
| — | — |
| top | 查看CPU和进程状态 |
| ps aux | 查看所有进程 |
| netstat -antp | 查看网络连接 |
| ifdown eth0 | 断开网络 |
| killall -9 <进程名> | 强制终止进程 |
8.2 取证分析命令
| 命令 | 作用 |
| — | — |
| file <文件> | 查看文件类型 |
| md5sum <文件> | 计算文件哈希 |
| pstree -p | 查看进程树 |
| grep "Accepted password" /var/log/secure | 查看成功登录记录 |
| crontab -l | 查看定时任务 |
8.3 清理命令
| 命令 | 作用 |
| — | — |
| rm -f /tmp/kinsing | 删除挖矿程序 |
| rm -f /etc/cron.d/kinsing | 删除定时任务 |
| systemctl disable kinsing | 禁用恶意服务 |
| crontab -r | 删除用户定时任务 |
| passwd root | 修改root密码 |
九、预防措施
9.1 密码安全
- 使用至少12位的强密码(包含大小写字母、数字、特殊字符)
- 定期更换密码(建议90天)
- 禁止使用默认密码或弱密码
9.2 SSH安全
- 禁用密码登录,仅使用密钥认证
- 禁止root用户远程登录
- 修改SSH默认端口(如2222)
- 限制允许登录的用户列表
9.3 防火墙配置
- 仅开放必要的端口
- 限制SSH访问来源IP
- 配置出站规则,禁止访问已知恶意IP
9.4 监控告警
- 配置CPU使用率告警(阈值建议>80%)
- 配置异常进程检测
- 配置网络流量异常告警
- 定期检查系统日志
9.5 安全审计
- 定期检查定时任务
- 定期检查系统服务
- 定期检查SSH密钥
- 定期更新系统补丁
十、总结
本次挖矿病毒入侵事件的主要原因是弱密码和缺乏安全防护措施。通过及时发现和快速响应,成功清除了病毒并加固了系统。后续需要从密码管理、访问控制、安全监控三个方面加强安全防护,防止类似事件再次发生。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:运维星火燎原 刘军军 刘军军《服务器CPU突然飙到99%?老运维手把手教你排查挖矿病毒,看这篇就够了!》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论