服务器中毒了怎么处理:先隔离取证,再清理加固
服务器中毒后最忌讳两件事:一是马上删掉可疑文件,二是直接格式化重装。
前者会破坏排查线索,后者在没找到入侵入口前,重装后大概率再次被攻破。
正确顺序是:先隔离控制影响面,再取证定位入口,然后清理加固,最后验证并决定是否需要重装。
第一步:断网隔离,但保留远程操作通道
发现异常后先把服务器从公网暴露面撤下来,而不是立刻关机。
关机可能丢失内存中的进程信息和网络连接状态。
- 在云控制台安全组里,只保留你自己的 IP 访问 SSH 端口,其余入方向全部拒绝。
- 如果中毒表现是大量对外发包或扫描,先在控制台限制出方向流量,避免服务器被当作攻击跳板导致 IP 被封。
- 不要急着改 root 密码,先取证。改密码会让攻击者察觉并触发清理痕迹。
如果服务器已经无法正常 SSH 登录,用云厂商控制台的 VNC 或救援模式进入系统,操作方式同上。
第二步:保留现场并定位可疑进程
登录后先记录当前状态,把关键输出保存到本地一份,避免后续清理破坏证据:
# 记录进程、网络连接、登录历史
top -b -n 1 > /tmp/snap_top.txt
ss -antp > /tmp/snap_ss.txt
ps auxf > /tmp/snap_ps.txt
last -a > /tmp/snap_last.txt
重点看三类异常:
- CPU 或网络占用异常高的进程:在
top里按P和M排序,记下 PID 和启动命令。伪装成kworker、sshd、[kthreadd]之类名字的进程要特别警惕。 - 可疑网络连接:
ss -antp里出现你不认识的对外连接,尤其是连向陌生 IP 的 4444、6667、3333 这类常见反弹端口。 - 进程路径异常:用
ls -l /proc/看进程真实可执行文件路径。如果显示/exe (deleted)或位于/tmp、/dev/shm、/var/tmp下,基本可以判定有问题。
第三步:查自启动和持久化入口
挖矿木马和后门通常会在多个位置留持久化,只杀进程没用。
按下面清单逐个检查:
crontab -l
ls -la /etc/cron.d /etc/cron.daily /var/spool/cron/
systemctl list-unit-files --state=enabled
ls -la /etc/rc.local /etc/init.d/
cat /root/.ssh/authorized_keys
authorized_keys 里出现你不认识的公钥,说明攻击者留了免密登录后门,必须删除。
另外检查 /etc/passwd 里是否多了 UID 为 0 的账户:
awk -F: '$3==0 {print $1}' /etc/passwd
除了 root 之外的任何账户都不应该拥有 UID 0。
第四步:清理、修补入口、改口令
确认恶意文件后,先停止对应服务和进程,再删除文件,然后清掉所有持久化项。
清理时注意:
- 删除前把可疑文件复制到
/tmp/evidence备份,方便事后分析。 - 检查
/etc/ld.so.preload,挖矿木马常通过它劫持系统命令。 - 用
find / -mtime -3 -type f -name "*.sh"找出最近几天新增的可疑脚本。
清理完必须堵住入口,否则等于白做:
- 修改 root 和所有业务账户密码,使用强口令。
- 禁用密码登录,改用密钥认证:在
/etc/ssh/sshd_config中设置PasswordAuthentication no,然后systemctl restart sshd。 - 检查应用漏洞。Web 服务被入侵多半是因为 CMS 插件过旧、上传目录可执行脚本或存在弱口令后台。
- 检查 Redis、MySQL、Docker API 等服务的暴露端口,这些是高频入侵入口。
第五步:验证是否清理干净
清理后不要立刻解除隔离。
观察一段时间,确认:
top和ss -antp不再出现陌生进程和连接。crontab -l、systemctl list-unit-files没有新增可疑项。- 用
rpm -Va(CentOS)或debsums(Debian/Ubuntu)校验系统文件是否被篡改。 - 检查 Web 目录下是否还有 webshell 残留,可搜索
eval(、base64_decode、assert(等特征。
如果发现系统命令被替换、多个位置有后门、或无法确定入侵时间点,建议直接重装系统。
重装前先备份业务数据,但只恢复网站文件和数据库,不要恢复整个系统盘,否则后门会一起回来。
几个容易踩的坑
- 只杀进程不改入口,几分钟后木马会重新拉起。
- 只改 root 密码,忽略应用账户和数据库账户。
- 用
kill -9杀掉可疑进程后没有检查它的父进程和启动脚本。 - 清理完就放开安全组,结果被同一漏洞二次攻破。
服务器中毒处理的核心是找到入口并堵住它,清理文件只是其中一环。
把隔离、取证、清理、加固、验证这五步走完,再决定是继续使用还是重装,才能避免反复中招。