服务器被挂马后,如何溯源攻击来源?

服务器被挂马后,很多新手第一反应是直接重装或杀毒,但如果不查明攻击来源,同样的漏洞可能再次被利用。
下面按步骤讲清楚如何溯源攻击来源,每一步都配有命令和操作路径,跟着做就能找到蛛丝马迹。

准备工作:先备份再动手

溯源前必须做好两件事:

  • 立即备份关键文件:将 /etc/passwd/etc/shadow、web 站点目录、数据库导出备份到离线位置,防止后续操作破坏证据。
  • 保留现场不被覆盖:不要重启服务器,不要直接删除可疑文件,先拷贝一份到安全目录。例如:
cp -a /var/log /root/log_backup
cp -a /etc /root/etc_backup
  • 准备工具:通过 SSH 连接服务器,使用 root 或 sudo 权限操作。如果需要离线分析,也可以把日志和可疑文件下载到本地。

第一步:从日志中定位最早的可疑时间点

攻击者通常会留下痕迹,日志是最直接的突破口。

查看登录日志(CentOS/Debian 通用):

# 查看最近失败的 SSH 登录尝试
grep "Failed password" /var/log/auth.log
# 或者 /var/log/secure(CentOS 6/7)

检查 web 访问日志(以 Nginx 为例):

tail -n 5000 /var/log/nginx/access.log | grep -E "(\.php|eval|base64)"

将结果按 IP 排序,找出异常 IP 和访问时间:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

注意:重点关注 POST 请求或包含 evalbase64_decodesystem 等函数的 URL,这些往往是 webshell 的上传或执行点。

第二步:揪出可疑进程和文件

找到最早异常时间后,检查该时间点附近有哪些进程在运行,以及新增或修改过的文件。

查看当前可疑进程

ps aux | grep -E "(bash|python|perl|curl|wget)" | grep -v grep

如果发现 CPU 占用异常或名称奇怪的进程(如 kworker 伪装),记录 PID 后查看其父进程和打开文件:

lsof -p PID

查找最近修改的可疑文件

find / -type f -mtime -3 -name "*.php" | xargs -I {} ls -la {}
# 搜索包含危险函数的文件
grep -r "eval(" /var/www/html --include="*.php"

重点关注目录

  • /tmp/var/tmp/dev/shm:攻击者常在这些目录释放恶意文件。
  • 网站上传目录:/var/www/html/uploadswp-content/uploads
  • 系统计划任务文件:/etc/crontab/var/spool/cron/

第三步:检查历史命令和后门入口

查看所有用户的历史命令,特别是 root 用户的历史记录:

cat /root/.bash_history | tail -100
cat /home/*/.bash_history | tail -50

分析可疑操作:比如下载远程脚本、修改权限、删除日志等。
如果发现 wgetcurlchmod +x 的痕迹,基本可以确认入侵点。

检查后门常见位置

  • SSH 授权文件:~/.ssh/authorized_keys 中有无未知公钥。
  • 开机启动项:systemctl list-unit-files | grep enabled 对比业务服务。
  • 计划任务:crontab -lcat /etc/crontab,查找异常脚本。
  • 系统用户:cat /etc/passwd 查看有无非正常 UID 0 的用户。

避坑指南:这些事千万不要做

  1. 不要直接杀掉进程或删除文件:攻击者可能设置了定时重启脚本,你一删它又起来,甚至触发清除日志的命令。应该先 strace -p PID 跟踪行为,或者用 kill -STOP PID 暂停进程,再分析。
  2. 不要重启服务器:重启会清空 /proc 下的进程信息,也可能触发攻击者的自动清除脚本。
  3. 不要直接重装系统:除非你已完全溯源并备份了证据,否则无法排查漏洞根源,下次照样被黑。
  4. 不要只用杀毒软件:很多后门是免杀的,扫描不出来,人工分析更可靠。

效果验证:确保攻击源头已切断

完成以上步骤后,执行以下检查确认溯源结果:

  • 所有可疑进程已暂停并记录 PID,删除对应文件后重启服务,再次 ps aux 确认未复活。
  • 修改所有管理员密码(SSH、数据库、面板)、更新 SSH 端口。
  • 将备份的日志文件压包保存,以便后续分析或提交安全团队。
  • 再次扫描高危端口:netstat -tulpn | grep LISTEN,确认无未知监听。
  • 部署文件完整性监控(如 AIDE 或 Tripwire),预防再次被篡改。

如果你正在处理服务器被挂马后溯源攻击来源的场景,建议先按上述步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
掌握溯源方法,比单纯重装更扎实。

分享到:
上一篇
本地部署 DeepSeek,对话记录会被泄露吗?
下一篇
宝塔面板 PHP 版本过低,导致网站被攻击
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意