1. 挖矿木马排查实战:从异常卡顿到Rootkit清除全记录
那天下午我正在写代码,突然发现笔记本风扇狂转,敲个命令都要卡三秒。top显示有个叫"kthreadd"的进程吃了200%的CPU——这明显不对劲,Linux内核线程怎么可能出现在用户进程列表里?一场持续36小时的挖矿木马歼灭战就此打响...
2. 异常现象与初步排查
2.1 那些容易被忽视的入侵征兆
- CPU/GPU异常负载:持续高占用且无对应业务进程(我的案例中kthreadd伪装成内核线程)
- 可疑网络连接:通过
netstat -tulnp发现异常外联IP(当时查到连接了俄罗斯某IP的3333端口) - 隐藏进程:
ps auxf显示的进程树与top不一致(后来发现是rootkit作祟) - 计划任务异常:
crontab -l显示有每分钟下载脚本的恶意任务
关键技巧:用
cat /proc/[pid]/exe查看进程真实路径,伪装进程会暴露在/proc文件系统中
2.2 第一响应操作清单
- 立即断网:拔网线/禁用网卡防止数据外泄
- 取证保存:
sudo sysdig -w trace.scap # 全系统调用记录 sudo tcpdump -i any -w packets.pcap # 网络流量抓包 - 进程冻结:
kill -STOP [pid]暂停可疑进程(不要直接kill避免触发自毁机制)
3. 深度分析:动态链接器劫持技术剖析
3.1 LD_PRELOAD攻击原理
攻击者通过注入恶意动态库实现:
// 恶意libmalicious.so示例 int rand() { return 0; // 固定返回值破坏加密操作 }通过LD_PRELOAD=./libmalicious.so优先加载恶意库,劫持libc等关键函数调用。
3.2 检测方法进阶
- 校验动态依赖:
ldd /usr/bin/sshd # 检查是否有异常库依赖 - 对比二进制文件:
rpm -Vf /bin/ls # 验证系统文件完整性 - 静态分析:
strings /tmp/.X11-unix/.rsync/c | grep 'minerd' # 查找挖矿特征字符串
4. Rootkit检测与清除实战
4.1 常见Rootkit类型对比
| 类型 | 隐藏手法 | 检测工具 |
|---|---|---|
| 内核模块型 | 劫持系统调用表 | chkrootkit, rkhunter |
| 文件替换型 | 替换ls/ps等系统工具 | tripwire, aide |
| 内存注入型 | 直接修改进程内存 | Volatility |
| 固件级 | 植入BIOS/UEFI | CHIPSEC |
4.2 我的清除步骤实录
- BusyBox救急环境:
wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64 chmod +x busybox-x86_64 ./busybox-x86_64 ash # 进入干净shell环境 - 关键目录扫描:
find / -name "*.so" -mtime -7 # 查找7天内修改的so文件 find / -name "*.config" -size -100k # 查找小体积配置文件 - 定时任务清理:
rm -rf /var/spool/cron/* rm -rf /etc/cron.*/*
5. 防御体系建设方案
5.1 实时监控系统搭建
# 使用auditd监控关键文件 sudo auditctl -w /etc/passwd -p wa -k user_changes sudo auditctl -w /usr/bin -p a -k binary_changes5.2 最小化防御配置
# Fail2Ban配置示例 [sshd] enabled = true maxretry = 3 bantime = 1h5.3 应急响应工具包
- 检测工具:Lynis, rkhunter, chkrootkit
- 分析工具:strace, sysdig, Volatility
- 恢复工具:BusyBox静态编译版, 干净系统镜像
6. 疑难问题排查实录
6.1 典型错误与解决方案
问题1:fork: Cannot allocate memory但free显示有剩余内存
原因:恶意进程占满进程号空间
解决:echo 4194303 > /proc/sys/kernel/pid_max临时扩大PID范围
问题2:rm -rf无法删除某些文件
原因:文件被设置为不可变属性
解决:chattr -i /path/to/file移除immutable属性
6.2 网络隔离后取证技巧
# 创建隔离网络环境 sudo iptables -A OUTPUT -d 192.168.1.100 -j ACCEPT sudo iptables -A OUTPUT -j DROP # 使用socat转发流量 socat -v TCP-LISTEN:8080,fork TCP:analysis-pc:807. 企业级防护建议
7.1 安全基线配置
- SSH加固:
PermitRootLogin no PasswordAuthentication no AllowUsers sysadmin - 内核参数调优:
sysctl -w kernel.kptr_restrict=2 sysctl -w kernel.dmesg_restrict=1
7.2 入侵检测规则示例
# Suricata规则示例 alert tcp any any -> any 3333 (msg:"Possible Miner Connection"; content:"Stratum"; depth:8; sid:1000001; rev:1;)这次排查让我深刻认识到,安全防护不是安装个杀毒软件就完事的持续性对抗。现在我的每台服务器都配置了:
- 每日自动执行的lynis审计
- 关键目录的inotify实时监控
- 网络流量的Suricata深度检测
- 每周更新的rkhunter扫描
最关键的收获是:任何异常现象都值得深究——那次CPU负载报警如果被当成"系统正常波动"忽略,可能至今还在为黑客免费挖矿。