游戏服务端被植入恶意程序,排查的核心思路是先隔离、再取证,按“特征定位→进程深挖→持久化清查→清理加固”四步走,多数入侵都能在2小时内完成定性。
游戏服务器被入侵怎么排查?先从异常特征入手
服务器被植入恶意程序后,最直观的异常往往藏在系统负载和网络连接里,游戏服务端通常有固定的资源占用基线,当你发现CPU、内存或带宽出现异常波动,先别急着重启,按下面步骤观察记录。
第一步,用 top 或 htop 查看实时进程列表。
重点关注CPU占用率持续超过100%的进程,但别只看进程名,很多恶意程序会伪装成 mysqld、crond 甚至 kworker,名字看着正常,实际是复制品,执行 top -c 查看完整命令行,留意带有 -o、-p、-a 这类可疑参数的进程,或者路径异常的程序,/tmp/、/var/tmp/、/dev/shm/ 这些不该有可执行文件的目录。
第二步,检查网络连接。
用 ss -antp 或 netstat -antp 查看当前所有TCP连接,恶意程序通常需要与外部C2(控制端)通信,特征就是大量指向非业务端口的境外IP连接,或者持续的短连接重试,游戏服务端正常只会监听业务端口(如8000-9000区间)和SSH端口,如果发现监听在高端口的未知进程,基本可以判定有问题。
第三步,快速判断异常带宽。
在服务器上执行 iftop 或 nload 观察实时流量,如果看到某个连接持续上传大量数据,但业务侧又没有对应的玩家请求,大概率是数据外泄或挖矿矿池通信,挖矿程序的明显特征是长时间维持固定的上传带宽,且目标IP多为海外矿池。
游戏服务端被植入恶意程序如何处理?深挖进程与文件痕迹
定位到可疑进程后,别急着重启或直接 kill -9,直接杀掉进程会丢失内存中的关键证据,恶意程序可能还会从持久化配置中重新拉起,正确的做法是先把进程信息完整抄录下来。
通过 /proc 目录确认进程真实身份。
每个运行中的进程都会在 /proc/<PID>/ 下暴露自己的行为信息,按顺序执行这三条命令:
ls -l /proc/<PID>/exe
:查看可执行文件的真实路径,如果指向已删除的文件,末尾会显示
(deleted),这是恶意程序最典型的特征。cat /proc/<PID>/cmdline:查看完整的启动参数,和ps输出做对比,排查是否有隐藏参数。ls -l /proc/<PID>/cwd:查看进程的工作目录,很多恶意脚本习惯从临时目录运行。
对于已删除的恶意文件,可以直接从 /proc/<PID>/exe 把样本拷出来留档:cp /proc/<PID>/exe /tmp/malware_sample.bin。
顺着进程查文件会话。
用 lsof -p <PID> 列出进程打开的所有文件,重点关注写入型文件句柄,恶意程序会在运行过程中释放配置文件、矿工程序或日志,同时用 ls -l /proc/<PID>/fd 检查文件描述符,如果出现大量socket连接,说明这个进程正在与外部大量通信。
深挖启动关联文件。
多数恶意程序自带一个母体脚本,运行后会释放子进程,查看进程的父进程ID(PPID),用 ps -ef | grep <PPID> 反查是谁拉起了这个进程,常见套路是:cron 定时任务 → 执行 shell 脚本 → 下载恶意程序 → 运行挖矿或后门进程,顺着这个链条往下挖,才能找到根因。
服务端被留后门的排查步骤:持久化与隐藏入口
杀进程只是治标,找出并清除持久化机制才算真正完成排查,恶意程序植入后,通常会通过以下方式保证重启后还能存活。
定时任务排查(最常见入口)。
检查以下所有位置的cron配置:
/var/spool/cron/和/etc/crontab/etc/cron.d/目录下的所有文件/etc/cron.hourly/、/etc/cron.daily/等周期执行目录
某游戏运维团队曾遇到过恶意程序把挖矿任务写在 /etc/cron.d/ 下名为 syslog 的文件里,内容是一串base64编码的下载指令,排查时可以执行 crontab -l 查看当前用户的任务,但root用户的cron任务不一定包含在里,直接 cat /etc/crontab 和 ls /etc/cron.d/ 更稳妥。
启动项与服务排查。
执行 systemctl list-unit-files --type=service --state=enabled 列出所有开机自启的服务,恶意程序常伪装成 dbus-launch

、apport 这类迷惑性名称,同时检查 /etc/rc.local、/etc/rc.d/ 目录下的脚本,以及 ~/.bashrc、~/.profile 中是否有附加的后门内容。
SSH后门与账户痕迹。
查看 ~/.ssh/authorized_keys 文件,这是攻击者留下持久化后门最直接的方式,重点检查是否存在异常公钥,尤其是执行了 chmod 700 ~/.ssh 和 chmod 600 authorized_keys 后仍然存在的多余密钥,再检查 /etc/passwd 文件中uid=0的账户是否只有一个root,以及 /etc/shadow 中是否有异常账户被设置了密码,据统计,相当一部分入侵都依赖SSH密钥后门进行二次进入,这一步不能跳过。
动态链接库劫持排查。
用 ldd 查看业务进程的依赖库,ldd /usr/local/game/server,检查输出中是否有可疑路径的 .so 文件,攻击者通过修改 LD_PRELOAD 环境变量或替换系统库来劫持敏感函数调用,实现隐藏进程或记录密码,排查时执行 cat /etc/ld.so.preload,正常情况下该文件是空的,如果被写入内容,基本可断定存在rootkit。
内存中的隐藏进程检测。
部分高级rootkit会内核级隐藏进程,ps 命令完全看不到痕迹,行业共识认为,面对这类情况,常规排查手段已失效,需要借助 chkrootkit 或 rkhunter 这类工具做二次扫描,更彻底的做法是重启到单用户模式进行离线检查,此时恶意程序还未被加载,可疑文件更容易暴露。
恶意程序清理与安全加固方案
清理阶段要遵循“先备份、后删除、再验证”的顺序,别急着恢复业务。
备份证据并隔离文件。 把可疑样本、cron配置、shell历史压缩打包,记录排查时间、发现过程的完整信息,之后先通过防火墙或安全组限制恶意程序的对外连接,再终止进程,最后删除对应文件和定时任务,行业日志显示,多数攻击依赖外连下载恶意代码,切断外联能有效降低二次感染风险。
恶意程序清理完成后,重点做以下加固:
- 禁用root远程登录:编辑
/etc/ssh/sshd_config,将PermitRootLogin设为no,改用普通用户配合sudo管理。 - 修改所有密码与密钥

:包括服务器密码、数据库密码、游戏后台密码,攻击者可能已经监听并记录过这些凭据。
- 更新系统与业务依赖:
yum update或apt update && apt upgrade,修复已知漏洞,已知被攻击的游戏服务端多数存在插件漏洞、Redis未授权访问、面板弱口令等问题。 - 配置异常告警:部署简单的文件完整性监控工具,
AIDE或Tripwire,对/usr/bin、/usr/local/game等关键目录做基线快照,后续有改动能第一时间收到通知。 - 调整数据库开放策略:将MySQL、Redis、MongoDB等组件绑定在内网IP,禁止暴露公网,并使用复杂密码。
- 用
sysdig或auditd监控敏感系统调用:execve、connect操作,异常行为会留下审计日志,下次排查时间能大幅缩短。
清理加固后,持续观察24小时以上,确认恶意程序没有复活迹象再恢复全量业务,多数暴力破解和漏洞攻击是自动化的,不会因为你清了一次就善罢甘休,后续的监控策略必须跟上。
游戏服务端被植入恶意程序常见问答
问:服务器被注入挖矿后门,直接删除文件后进程仍然反复出现,问题出在哪里?
答:说明还有守护进程没被发现,通常存在于计划任务或服务自启动项里,重点检查 /etc/cron.d/、/etc/rc.local 以及各用户的 ~/.bashrc,顺着进程的父进程ID逐层向上排查,直到找到最早启动入口。
问:清理完恶意程序后,为什么业务服务器还会出现卡顿现象?
答:排查清理时是否误删了业务依赖的动态库文件,以及是否缺失关键系统环境变量,多数操作完成后需要重启一次正常业务验证依赖完整性,恶性事件后的业务回退可以优先恢复最近一次正常备份。
问:恶意程序样本应该如何处理,是直接删除还是留存备用?
答:对原始恶意程序做不定时备份抢救措施,将样本打包上传到内部威胁分析沙箱或指定病毒分析平台,便于评估攻击链路并同步情报,若未及时留存原始恶意样本,后续追溯排查会比较被动,据国家互联网应急中心公开通报,及时提交恶意样本有助于安全机构掌握新型攻击家族特征并提升整体防护水平。