应急响应实战笔记:一次挖矿病毒事件的完整处置过程
一、事件背景
某天下午,运维同学发现一台对外提供测试服务的 Linux 服务器 CPU 使用率长期维持在 300% 以上(多核),SSH 登录明显卡顿,且监控平台告警"出站流量异常"。初步判断疑似被植入挖矿程序,遂启动应急响应流程。
受影响资产:1 台 CentOS 7 测试服务器(公网 IP 暴露,SSH 使用弱口令)
事件等级:一般安全事件(未涉及核心业务与敏感数据)
处置目标:2 小时内完成抑制与根除,恢复业务,输出复盘报告
二、应急响应流程总览
应急响应遵循 PDCERF 模型:
-
准备(Preparation):工具、权限、联系人提前就位
-
检测(Detection):确认事件真实性
-
抑制(Containment):阻断扩散,保护现场
-
根除(Eradication):清除恶意程序与后门
-
恢复(Recovery):业务回归正常
-
复盘(Follow-up):总结改进
三、检测与研判
3.1 现场保护原则
先取证,后处置。 在动手杀进程之前,先保存关键证据,避免破坏现场:
# 保存进程快照 ps auxf > /tmp/ir_ps_$(date +%F_%H%M).txt # 保存网络连接 ss -antp > /tmp/ir_net_$(date +%F_%H%M).txt # 保存登录记录 last -a > /tmp/ir_last.txt
3.2 定位可疑进程
top -c # 按 CPU 排序,发现名为 kdevtmpfsi 的进程占用 300%+ ps -ef | grep kdevtmpfsi
发现两个可疑进程:kdevtmpfsi(挖矿主程序)和 kinsing(守护/下载进程),这是典型的 Kinsing 挖矿家族特征。
3.3 排查持久化机制
# 检查定时任务 crontab -l cat /etc/crontab ls -la /etc/cron.*/ # 检查 systemd 服务 systemctl list-unit-files | grep -iE "kinsing|kdev|miner" ls -la /etc/systemd/system/ # 检查启动项 cat /etc/rc.local
在 /var/spool/cron/root 中发现恶意定时任务,会定期从远程地址下载脚本并重启挖矿进程。
3.4 排查账号与登录痕迹
# 检查异常账号 awk -F: '$3==0{print $1}' /etc/passwd cat /etc/passwd | grep -v nologin # 检查 SSH 登录记录 grep "Accepted" /var/log/secure | awk '{print $1,$2,$3,$9,$11}' # 检查 SSH 公钥后门 cat ~/.ssh/authorized_keys
发现 authorized_keys 中被植入了陌生公钥,且 secure 日志显示存在大量来自境外 IP 的 SSH 爆破成功记录——入口基本确认为 SSH 弱口令爆破。
3.5 排查恶意文件
# 查找近期修改的文件 find / -mtime -3 -type f -name "*.sh" 2>/dev/null # 查找常见恶意路径 ls -la /tmp /var/tmp /dev/shm
在 /tmp 与 /var/tmp 下发现 kdevtmpfsi、kinsing 二进制文件及下载脚本。
四、抑制
原则:先隔离,再清除。避免攻击者察觉后触发破坏行为。
-
网络隔离:通过安全组/防火墙临时封禁该服务器除运维 IP 外的所有入站访问,切断攻击者回连。
-
封禁恶意 IOC:在边界防火墙上封禁挖矿矿池域名/IP 及下载源地址。
-
保留现场:对关键目录做打包备份,供后续分析:
tar czf /root/ir_evidence_$(date +%F).tar.gz /tmp/kdevtmpfsi /tmp/kinsing \ /var/spool/cron/root ~/.ssh/authorized_keys /var/log/secure
五、根除
5.1 终止恶意进程
# 先杀守护进程,再杀挖矿进程,防止被拉起 kill -9 <kinsing_pid> kill -9 <kdevtmpfsi_pid>
5.2 清除持久化
# 清除恶意定时任务 crontab -r # 确认无业务任务后执行,或手动编辑删除恶意行 # 删除恶意 systemd 服务(如有) systemctl disable --now <恶意服务名> rm -f /etc/systemd/system/<恶意服务名>.service # 清理 SSH 后门公钥 vi ~/.ssh/authorized_keys # 删除陌生公钥
5.3 删除恶意文件
rm -f /tmp/kdevtmpfsi /tmp/kinsing # 注意:部分变种会给文件加 chattr +i 属性,需先解锁 lsattr /tmp/kdevtmpfsi chattr -i /tmp/kdevtmpfsi && rm -f /tmp/kdevtmpfsi
5.4 加固账号
# 修改 root 及所有业务账号密码(强口令) passwd root # 禁用不必要的登录账号 usermod -L <可疑账号>
六、恢复
-
验证清除效果:观察 30 分钟以上,确认无进程被重新拉起、CPU 恢复正常、无异常外连。
-
恢复网络访问:按最小化原则放开安全组策略。
-
业务验证:确认测试服务功能正常。
-
加强监控:对该主机临时提高监控频率,关注异常进程与出站连接。
说明:若服务器承载核心业务或数据敏感,建议重装系统而非原地清除,彻底消除隐藏后门风险。本次为测试机,原地清除 + 加固即可。
七、加固与整改
| 风险项 | 整改措施 |
|---|---|
| SSH 弱口令 | 强制 12 位以上复杂口令,禁用 root 远程登录,改用密钥认证 |
| 公网暴露 SSH | 安全组限制源 IP,或通过堡垒机接入 |
| 无入侵检测 | 部署 HIDS/EDR,配置异常进程与 Cron 变更告警 |
| 无日志集中 | 接入 SIEM,保留登录与命令审计日志 ≥ 6 个月 |
| 补丁滞后 | 建立月度补丁更新机制 |
八、复盘总结
时间线:
-
T+0:监控告警,启动应急
-
T+15min:确认挖矿进程,完成现场取证
-
T+30min:网络隔离,封禁 IOC
-
T+60min:清除进程、持久化与后门
-
T+90min:业务恢复,监控验证
-
T+120min:输出事件报告
经验教训:
-
取证先行是应急响应的铁律,先保存再动手,否则事后无法溯源。
-
挖矿病毒往往"进程 + 定时任务 + 公钥后门"三件套齐全,清除时要逐项排查,漏一项就会复发。
-
本次入口是 SSH 弱口令,边界暴露面收敛是最具性价比的防护手段。
-
应急不是终点,整改闭环才是。
附:常用应急排查命令速查
# 进程与网络 ps auxf | sort -nrk 3 | head -20 ss -antp | grep ESTAB lsof -i :<port> # 持久化 crontab -l; ls -la /etc/cron.*/; systemctl list-unit-files cat /etc/rc.local; ls -la ~/.ssh/ # 账号与登录 awk -F: '$3==0' /etc/passwd last -a | head -20 grep -i "failed\|accepted" /var/log/secure | tail -50 # 文件排查 find / -mtime -7 -type f -perm -u+x 2>/dev/null | grep -vE "^/(proc|sys)"
- 点赞
- 收藏
- 关注作者
评论(0)