服务器CPU突然100%别慌手把手教你用top、ps、lsof揪出Linux挖矿木马凌晨三点服务器监控突然告警——CPU使用率飙升至100%。这种场景对于运维人员来说就像医生遇到急诊病人需要快速诊断病因并采取急救措施。本文将带你走进真实的服务器应急响应现场用最实用的工具组合快速定位问题根源。1. 紧急响应第一时间的正确操作当CPU使用率异常飙升时慌乱中很容易做出错误决策。正确的第一步不是立即杀死进程或重启服务器而是保持现场完整就像保护犯罪现场一样重要。关键操作顺序立即记录当前时间戳date %Y-%m-%d %H:%M:%S禁用命令历史记录unset HISTFILE或export HISTFILE/dev/null创建临时工作目录mkdir -p /tmp/forensics cd $_注意不要使用kill -9强制终止任何进程这可能导致攻击者设置的守护进程立即启动新的恶意进程。遇到命令被替换的情况时比如ps或netstat显示异常可以这样快速验证# 检查命令文件大小是否异常 ls -lh /bin/ps /bin/netstat /bin/ls # 使用busybox获取原始命令输出 busybox top2. 进程排查从表象到根源2.1 快速定位异常进程top命令虽然直观但在高级攻击场景下可能被干扰。更可靠的组合是# 按CPU排序显示完整命令 ps -eo pid,user,pcpu,pmem,cmd --sort-pcpu | head -n 10 # 检查进程树关系 pstree -pan 可疑PID典型挖矿进程特征名称伪装成kworker、java等系统进程CPU占用持续90%以上存在异常子进程链2.2 深度进程取证发现可疑进程后需要进一步取证# 查看进程打开的文件 ls -l /proc/PID/fd # 检查进程内存映射 cat /proc/PID/maps | grep heap # 提取进程可执行文件 cp /proc/PID/exe /tmp/forensics/malware.bin对于注入型恶意进程可以使用gdb进行内存取证gdb -p PID -batch -ex dump memory /tmp/forensics/mem.dump 0x00007f8c3a2e5000 0x00007f8c3a4e5000 strings -n 8 /tmp/forensics/mem.dump | grep http\|wget\|curl3. 网络取证追踪C2服务器连接恶意程序通常会连接外部C2服务器。使用现代Linux系统推荐的替代方案# 查看所有TCP连接 ss -tulnp # 检查进程网络活动 nsenter -t PID -n netstat -ant # 持续监控异常外连 tcpdump -i eth0 tcp and (port 3333 or port 5555 or port 7777) -w /tmp/forensics/packet.pcap挖矿木马常见特征连接矿池常用端口3333、4444、5555、7777域名包含pool、mine、xmr等关键词使用TLS加密通信逃避检测4. 文件系统痕迹分析4.1 定位恶意文件通过lsof结合时间筛选# 查找最近修改的可执行文件 find /usr/bin /usr/sbin -type f -mtime -3 -exec ls -lh {} \; # 检查/tmp和/dev/shm ls -la /tmp /dev/shm | grep -E \.(so|ko|dat)$4.2 隐藏启动项排查定时任务检查# 检查所有用户的crontab for user in $(cut -f1 -d: /etc/passwd); do echo $user ; crontab -u $user -l; done # 查找异常的系统定时任务 ls -la /etc/cron*/* /var/spool/cron/*系统服务检查# 列出所有systemd服务 systemctl list-units --typeservice --staterunning # 检查服务文件修改时间 find /lib/systemd/system /etc/systemd/system -type f -mtime -75. 事后加固与防护建议确认清除恶意程序后需要立即进行安全加固关键命令校验# 使用rpm验证系统命令完整性 rpm -Va | grep ^..5SSH防护升级# 禁用密码认证 sed -i s/#PasswordAuthentication yes/PasswordAuthentication no/ /etc/ssh/sshd_config # 安装fail2ban apt-get install -y fail2ban || yum install -y fail2ban系统监控增强# 安装监控agent curl -L https://github.com/netdata/netdata/releases/latest/download/netdata-kickstart.sh | bash # 设置实时进程监控 echo * * * * * root /usr/bin/ps -eo pid,user,pcpu,cmd --sort-pcpu | head -n 5 /var/log/process_mon.log /etc/cron.d/process_mon在最近一次应急响应中我们发现攻击者通过弱密码爆破入侵后在/dev/shm下放置了经过混淆的挖矿程序并修改了/etc/ld.so.preload实现进程隐藏。通过对比正常系统的文件哈希值最终定位到了被篡改的系统库文件。