你的服务器CPU突然飙到100%,但 top 却看不到异常进程 —— 这可能不是性能问题,而是黑客已经控制了你的系统。
2024年12月,某金融公司的运维团队发现数据库服务器响应变慢,检查 top 命令显示 kworker 进程占用90% CPU,但进一步分析发现,该进程并非真正的内核线程,而是一个伪装成系统进程的挖矿木马。更可怕的是,黑客已经清理了一部分日志,使得传统排查手段失效。
今天,我们就以这个真实案例为背景,带你一步步完成 Linux 服务器入侵排查与溯源取证,涵盖:
- 如何发现异常?(日志、进程、网络分析)
- 如何定位攻击入口?(SSH爆破、Web漏洞、供应链攻击)
- 如何取证并修复?(清除后门、修复漏洞、加固系统)
一、入侵迹象:你的服务器可能已被控制的5个征兆
1. CPU/内存异常,但 top 看不到可疑进程
真实案例:某企业服务器 kworker 进程持续高负载,最终发现是内核级 rootkit 隐藏了挖矿程序。
排查方法:
- 使用静态编译的
busybox 替代系统命令(防止黑客替换 ps、top)。
- 检查
/proc 目录,查看异常进程的 exe 链接(如 /proc/1234/exe -> /tmp/.hidden/xmrig)。
2. 异常网络连接(外联矿池、C2服务器)
真实案例:黑客利用某国产路由器的漏洞,组建僵尸网络,持续对外发包。
排查方法:
netstat -antp 或 ss -tulnp (检查异常 ESTABLISHED连接)。
- 使用
tcpdump 抓包分析(如 tcpdump -i eth0 ‘host 1.2.3.4’)。
3. 日志被删除或篡改
真实案例:某电商服务器 /var/log/secure 被清空,但 journalctl 仍能查到残留 SSH 爆破记录。
排查方法:
- 检查
/var/log/ 下日志文件的修改时间(ls -alt /var/log/)。
- 使用
last、lastb 查看登录历史(即使 /var/log/wtmp 被删,部分数据仍可恢复)。
4. 新增可疑用户或SUID文件
真实案例:黑客创建 kernelsys 用户(UID=0),并赋予 /bin/bash SUID权限,实现持久化。
排查方法:
cat /etc/passwd (检查异常用户)。
find / -perm -4000 (查找所有 SUID文件)。
5. 计划任务或启动项被修改
真实案例:某企业服务器被植入 .x 扫描工具,并通过 /etc/rc.local 实现开机自启。
排查方法:
crontab -l (检查当前用户的定时任务)。
ls -al /etc/cron.* (检查系统级定时任务)。
二、入侵溯源:黑客是如何进来的?
1. SSH弱密码爆破(最常见入口)
真实案例:某公司使用 root:123456,黑客1秒破解,并横向渗透整个内网。
如何发现?
- 检查
/var/log/secure(grep “Failed password” /var/log/secure)。
- 使用
fail2ban 或 denyhosts 自动封禁爆破 IP。
2. Web应用漏洞(如Log4j、反序列化)
真实案例:某 Java 应用因未修复 Log4Shell 漏洞,被植入 Linux.DDoS.Flood.L 木马。
如何发现?
- 检查
/var/log/tomcat/catalina.out(异常 Java 栈轨迹)。
- 使用
rkhunter 扫描 Web 目录中的恶意文件。
3. 供应链攻击(恶意软件包、镜像污染)
真实案例:某企业因使用第三方 Yum 源,导致 systemd 被替换为后门版本。
如何发现?
rpm -Va (验证 RPM 包完整性)。
- 对比关键二进制文件的 MD5(如
md5sum /usr/bin/ps)。
三、完整取证流程(实战案例)
案例背景:
某云服务器 CPU 持续100%,top 显示 kworker 占用 90%,但无异常进程。
步骤1:使用可信工具排查
下载静态编译的 busybox:
wget https://busybox.net/downloads/binaries/1.35.0/busybox-x86_64 -O /tmp/busybox
chmod +x /tmp/busybox
检查进程:
/tmp/busybox ps aux | grep -v “\[“ # 过滤内核线程
发现异常:/usr/sbin/.sshd(非官方 SSH 守护进程)。
步骤2:分析网络连接
/tmp/busybox netstat -antp | grep ESTAB
发现:异常连接至 45.67.89.1:443(矿池地址)。
步骤3:定位恶意文件
ls -al /proc/$(pidof .sshd)/exe # 查看进程真实路径
结果:/usr/sbin/.sshd -> /lib/libudev.so(恶意动态库)。
步骤4:检查持久化手段
cat /etc/rc.local # 发现添加了 /lib/libudev.so &
ls -al /etc/cron.hourly/ # 发现 update.sh 脚本
结论:黑客通过 rc.local 和 cron 实现双重持久化。
步骤5:修复与加固
清除后门:
rm -f /lib/libudev.so /etc/cron.hourly/update.sh
sed -i ‘/libudev.so/d’ /etc/rc.local
修复漏洞:
- 更新所有软件包(
yum update)。
- 禁用 SSH 密码登录(
PasswordAuthentication no)。
加固系统:
- 安装
fail2ban 防爆破。
- 部署 SELinux 限制进程权限。
四、如何预防下一次入侵?
1. 基础防护
✅ 禁用 SSH 密码登录,改用密钥认证。
✅ 定期更新系统(yum update / apt upgrade)。
✅ 部署 HIDS(如 OSSEC、Wazuh)监控文件变更。
2. 高级防护
✅ 网络隔离:VLAN划分,限制 SSH 访问源 IP。
✅ 日志集中管理:使用 ELK Stack 收集 /var/log/*。
✅ 定期漏洞扫描:OpenVAS 或 Nessus 检测未修复漏洞。
3. 应急响应预案
备份:定期快照关键数据(rsync + tar)。
演练:每季度模拟一次入侵,测试响应速度。
五、总结
Linux 服务器被入侵后,快速发现、精准溯源、彻底清理是关键。
安全不是一次性的工作,而是持续的攻防对抗。通过这份指南,你可以:
- 识别隐藏进程、异常网络连接(即使黑客清理了日志)。
- 定位攻击入口(SSH 爆破、Web 漏洞、供应链攻击)。
- 彻底清除后门,并加固系统防止再次被入侵。
从今天开始,系统地检查你的服务器,别让黑客比你更了解它!如果你在排查过程中遇到复杂的日志分析或需要交流经验,欢迎到云栈社区的安全板块与其他安全从业者探讨。对于专业的安全取证和应急响应,保持持续学习至关重要。