服务器被入侵后的第一原则是别急着重启、别急着删文件,先切断外网、保留现场,再按“止损排查重建加固”四步走。 重启会清掉内存里的进程、连接和临时文件,盲目删马又会破坏时间戳,后面想找入口就难了,下面这套流程,从发现异常到业务恢复,可以照着执行。
断网、留证、止损:前30分钟的动作顺序
隔离,但不是直接关机
先收窄攻击面,别一上来就 shutdown。
- 云主机:在控制台改安全组,只放行你当前办公IP的22/3389端口,其余全拒。
- 物理机:拔掉公网网线,保留内网管理口,或者在上联交换机做端口隔离。
- 保留带外通道:云主机的VNC、物理机的IPMI/BMC别一起关掉,否则你连不进去。
留证,内存和日志优先
入侵者最爱清理的就是 /var/log 和 ~/.bash_history,在动手清理之前,先把这些复制到外部介质或另一台机器:
/var/log/secure(CentOS系)或/var/log/auth.log(Debian/Ubuntu系)/var/log/messages、/var/log/syslog、Web的access/error日志- 当前进程、网络连接、登录会话的快照
命令示例:
ss -antp > /tmp/net.txt
ps auxf > /tmp/ps.txt
last -a > /tmp/last.txt
lsof -i > /tmp/lsof.txt
内存镜像对定位无文件木马很有价值,有条件的可以用LiME这类工具做一份,没条件至少把 /proc 下可疑进程的信息留存下来。
止损清单
- 改掉所有系统账号、数据库、后台管理、云账号的密码,开启MFA。
- 吊销服务器上留存的SSH密钥、云API密钥、CI/CD令牌。
- 停用来源不明的新增账号,锁定可疑的sudo权限。
- 关闭对外暴露的数据库端口、Redis、Docker API。
服务器被入侵怎么排查?顺着这七条线索找痕迹
别漫无目的地翻文件,攻击者落地后基本绕不开下面几类动作,逐条对照就行。
| 排查对象 | 常用命令 | 常见异常 |
|---|---|---|
| 进程 | ps auxf、top、ls -l /proc/PID/exe |
进程名伪装成 kworker、sshd 变种,路径在 /tmp、/dev/shm |
| 网络连接 | ss -antp、lsof -i |
陌生IP的ESTABLISHED连接、异常高位端口监听 |
| 账号 | awk -F: '$3==0{print $1}' /etc/passwd、last、lastb |
多出UID为0的账号、异地IP的成功登录 |
| 定时任务 | crontab -l、ls -l /etc/cron.、cat /etc/crontab |
指向 curl xxx | bash 的定时拉取 |
| 自启动 | systemctl list-unit-files --state=enabled、/etc/rc.local |
陌生service、被改写的启动脚本 |
| 文件 | find / -mtime -2 -type f 2>/dev/null、find / -perm -4000 -type f 2>/dev/null |
近期新增的可执行文件、异常的SUID程序 |
| 完整性 | rpm -Va(RHEL系)、debsums -c(Debian系) |
系统二进制被替换 |
再往下拆几层:
进程和网络要对起来看
看到一个吃CPU很高的进程,先别kill,执行 ls -l /proc/<PID>/exe 看真实文件路径,cat /proc/<PID>/cmdline 看启动参数,lsof -p <PID> 看它打开了哪些文件,如果exe指向的文件已经被删除(显示 (deleted)),基本可以判定是内存驻留型恶意程序。
登录记录要找“成功”的那条
爆破失败记录意义不大,重点是 Accepted password 和 Accepted publickey,把成功登录的IP和时间列出来,和你自己的操作对一遍,业内专家指出,很多入侵事件的入口就是一台暴露在公网、还在用弱口令的跳板机或测试机。
定时任务是重灾区
除了用户级 crontab -l,还要看 /etc/cron.d/、/etc/cron.hourly/、/var/spool/cron/,有些挖矿木马会把拉起脚本写进cron,删了主程序几分钟后又复活。
Web目录看落地文件
Web入侵通常会在站点目录留下webshell,按修改时间排序找近期新增的php/jsp/aspx文件,重点看 upload、cache、images 这类本不该有脚本的目录,同时翻access日志,找异常的长参数POST请求和少见User-Agent。
rootkit要单独查
lsmod 看有没有陌生内核模块,chkrootkit、rkhunter 可以做一轮基础扫描,行业共识认为,一旦确认系统级rootkit,最省时间的做法是重装而不是清理。
云服务器被入侵和物理机有什么区别?处置思路要分开
云上最大的优势是快照
怀疑被入侵,第一件事是在控制台给系统盘做一份快照或自定义镜像,再基于快照克隆一台隔离环境的机器做分析,原机可以保留现场,分析机随便折腾。
云厂商的审计数据别浪费
安全组变更记录、操作审计、VPC流日志、登录告警,这些在控制台都能查到,攻击者如果拿到了云账号权限,这些日志能帮你还原他改了什么。
物理机要盯带外和硬件
IPMI/BMC的登录日志、RAID卡日志、交换机端口镜像,是物理机独有的取证来源,另外物理机往往承载老业务,补丁滞后更严重。
什么情况必须重装
- 确认存在内核级rootkit
- 系统关键二进制被替换且无法确认替换范围
- 攻击者拿到过root且驻留时间超过数天
- 业务允许停机窗口
网站被挂马、挖矿、勒索:三类场景的优先级不同
网站服务器被挂马了怎么清理才彻底
挂马的处理顺序是:先下线页面或加WAF拦截,再定位入口,入口通常藏在三处:被上传的webshell、被篡改的模板文件、被利用的插件漏洞,只删表面代码不修入口,几天后还会再来一次,清理完要全站比对文件哈希,确认没有残留。
挖矿木马先看CPU和出站连接
特征是CPU长期跑满、风扇狂转、账单里带宽异常,处置时先阻断矿池域名和IP的出站,再按cron、systemd、启动脚本的顺序清驻留点。
勒索软件先断备份
发现文件被批量改名加密,第一反应是断开备份服务器的网络连接,防止备份也被加密,近年来的勒索攻击越来越多地先横向移动到备份系统,这一点比杀毒更关键。
服务器安全应急响应多少钱?自处置与外包怎么选
自己处置的隐性成本
看起来省了服务费,实际要投入安全工程师、运维、开发三方人力,业务停机的损失往往更大,如果团队里没人做过取证,还容易破坏证据、漏掉后门。
第三方服务的报价结构
市场报价通常按台数、按人天或按项目计,单台轻量排查从数千元起步,多台服务器加数据恢复的复杂case会到数万元,地域上也有差异,北京服务器入侵应急响应服务因为厂商集中,响应速度相对快,但上门服务一般另计差旅,选服务时重点看三件事:是否提供完整取证报告、是否包含加固建议、是否承诺复检。
恢复上线:重建比修复更省心
重装并重建基线
优先用干净镜像重装,再从配置管理或备份里恢复业务数据,恢复前确认备份本身没被污染,尤其是备份服务器和主机在同一内网的情况。
补丁、账号、边界三件事
- 补丁:操作系统、中间件、CMS插件全部升到当前稳定版。
- 账号:删除多余账号,SSH禁用密码登录,只留密钥。
- 边界:数据库不对公网开放,管理后台加IP白名单,能上WAF就上。
监控补齐
至少要有登录告警、异常进程告警、外联域名告警,据工信部发布的网络安全相关通报,相当一部分主机失陷与未及时修复的公开漏洞和弱口令有关,日常的补丁和口令管理比事后应急便宜得多。
Q&A:服务器被入侵排查与恢复的常见问题
服务器被入侵后一定要重装系统吗?
不一定,但满足以下任一条件就建议重装:确认有rootkit、系统二进制被替换、攻击者获得过root权限且驻留时间不明、无法完整枚举后门,业务简单、入口明确、仅限Web目录被写入的情况,彻底清理并复检后可以保留系统。
怎么确认后门已经清理干净了?
看三样东西:进程和网络连接里没有陌生项、cron和自启动项里没有陌生条目、文件完整性校验没有异常变更,再用 rkhunter、chkrootkit 扫一遍,观察48小时内的登录和出站连接记录,确认没有复活迹象。
从发现入侵到业务恢复一般要多久?
取决于是否重装和数据量,单台应用服务器重装加业务恢复,通常几小时内可以完成;涉及数据库取证、多台主机横向排查或勒索解密的情况,周期会拉长到数天,提前准备好干净的镜像和离线备份,能把恢复时间压缩一大截。