被入侵过两次之后,整理了一份排查清单。慌乱的时候最怕无从下手,有个顺序至少不会漏。
第一步:保护现场
先别急着删东西。切断可疑的外连,但保留文件用于分析:
mkdir -p /root/quarantine
cp -a /可疑路径 /root/quarantine/
如果是明显的 webshell,改权限让它无法执行(chmod 000),而不是直接 rm——删了可能触发后门的自愈机制,反而更难查。
第二步:看进程
ps aux --sort=-%cpu | head -20
ls -l /proc/*/exe 2>/dev/null | grep -v "(deleted)"
重点看:路径奇怪(/tmp、/dev/shm)、名字模仿系统进程(sshd1、kworker)、CPU 占用异常、外连地址陌生。
ss -tunp | grep ESTAB
看有没有连到不认识的 IP,尤其是非常见端口的。
第三步:查自启
后门一定要能“复活”,所以几乎都藏在自启里:
crontab -l
ls -la /etc/cron.*/ /var/spool/cron/
cat /etc/rc.local
systemctl list-unit-files --state=enabled
ls -la ~/.ssh/authorized_keys # 有没有陌生的公钥
.ssh/authorized_keys 是最容易被忽略的——攻击者加一个公钥,就能一直免密登录,你改密码也没用。
第四步:找文件
# 最近修改的文件
find /www /var/www -type f -mtime -7 -ls 2>/dev/null | head -50
# 上传目录里的可执行文件(正常不该有)
find /www -path "*/uploads/*" \( -name "*.php" -o -name "*.phtml" -o -name "*.phar" \)
# 常见后门特征
grep -rl --include="*.php" -E "eval\(|assert\(|base64_decode\(|gzinflate\(" /www 2>/dev/null
第五步:查账号
awk -F: '$3 >= 1000 && $3 < 65534 {print $1, $3, $7}' /etc/passwd
grep -i "uid=0" /etc/passwd
last -20
grep "Failed password" /var/log/secure | tail -30
应用层的账号也要查:WordPress 用户表、数据库用户表,看有没有新增的、权限异常的。
第六步:查内容
站点被入侵最常见的结果是被塞了垃圾页面做 SEO。查隐藏内容:
SELECT ID, post_title, post_status FROM wp_posts
WHERE post_content LIKE '%display:none%'
OR post_content LIKE '%left:-%'
OR post_content LIKE '%<iframe%';
还要查 wp_options 里的 siteurl 有没有被改、.htaccess 有没有被插入跳转规则。
第七步:清理与加固
顺序:清自启 → 删异常账号 → 删后门文件 → 改所有密码(后台、数据库、SSH、面板)→ 升级所有组件 → 加防护规则。
如果入侵程度不确定,最省时间的做法是重装系统、从备份恢复。花两天排查一个可能有残留的系统,不如花四小时重装。
之后的习惯
- 每周看一次插件/主题更新
- 数据库账号只给需要的权限,不用 root
- 备份异地保存,且验证过能恢复
- 后台禁用文件编辑,上传目录禁执行 PHP
- 服务器上不跑用不到的服务
- THE END -
最后修改:2024年2月10日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://mi-blog.cn/archives/680
共有 0 条评论