服务器被攻击后,第一反应是立即隔离受影响系统,断开网络连接防止横向扩散,然后按步骤排查:先检查系统进程、网络连接和用户账户,再分析系统日志、应用日志和安全工具记录,最后根据线索溯源攻击路径。整个过程必须冷静、快速、细致,任何遗漏都可能导致二次入侵。
一、立即响应与初步隔离
发现服务器异常时,首先通过本地控制台或带外管理口登录,避免使用可能被监控的远程连接。立即断开公网访问,但保留内部网络用于日志收集。在隔离环境下,创建当前系统快照或内存镜像,为后续取证保存原始状态。同时,启动应急预案,通知相关团队并记录所有操作时间线。
二、系统层面快速排查
检查异常进程:使用命令如
ps aux --sort=-%cpu
和
top
查看CPU和内存占用高的进程,注意陌生进程、伪装成系统服务的进程(例如将“sshd”伪装为“sshdd”)。结合
netstat -antp
或
ss -tulnp
查看异常网络连接,重点关注外连IP和非常用端口。
排查用户与权限:检查
/etc/passwd
和
/etc/shadow
中新增的账户、UID为0的非法root账户,以及
/etc/sudoers
中的权限变更。查看最近登录记录:
last -ai
和
lastb
,注意非常用地域的IP登录。同时检查计划任务
crontab -l
和系统服务
systemctl list-units --type=service
中的可疑项。
三、文件系统与恶意软件检测
重点检查系统目录的篡改:使用
rpm -Va
或
debsums
验证包完整性,查找被替换的二进制文件(如ls、ps)。扫描最近修改的文件:
find / -type f -mtime -3 -exec ls -la {} \;重点关注/tmp、/dev/shm等临时目录。使用ClamAV或手动分析可疑ELF文件,检查是否有挖矿程序、后门或勒索软件。
Rootkit检测:通过
chkrootkit
和
rkhunter
进行扫描,但需注意工具本身可能被绕过。交叉对比静态二进制与内存中进程,使用
ls -l /proc/[pid]/exe
查看进程真实路径。对于Web服务器,排查网站目录中的陌生PHP、JS文件,特别是图片上传目录下的webshell。
四、日志深度分析与关键线索提取
系统日志分析:集中查看
/var/log/auth.log
(Debian/Ubuntu)或
/var/log/secure
(RHEL/CentOS),筛选失败登录、sudo提权记录。通过
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr统计攻击源IP。检查
/var/log/syslog
中的服务异常、进程崩溃记录。
应用日志关联:Web服务器日志(如Nginx的access.log、error.log)中,搜索SQL注入、路径遍历等攻击特征:
grep -E "(union.*select|\.\./|eval\(\))" /var/log/nginx/access.log
。数据库日志中关注异常查询、批量数据导出操作。若使用容器,收集Docker日志
docker logs --since 24h [container_id]
和Kubernetes事件。
网络流量日志:利用防火墙、IDS/IPS记录,还原攻击时间线。分析Netflow数据包,定位C2服务器通信、数据外传连接。对于云服务器,启用云平台的操作审计日志(如API调用记录),追踪攻击者的账户活动。
五、溯源攻击路径与攻击者画像
根据日志IP线索,通过whois、威胁情报平台查询IP归属、历史恶意行为。但注意攻击者常使用代理或僵尸网络,需结合多个日志源交叉验证。分析攻击手法:如果是漏洞利用,查找对应CVE编号和利用代码特征;如果是凭据攻击,检查密码强度及泄露来源。
还原攻击时间线:从首次异常登录、漏洞利用、权限提升到持久化驻留,绘制完整攻击链。例如:攻击者通过弱密码爆破SSH→上传Webshell→利用脏牛漏洞提权→部署挖矿程序→添加SSH后门。使用时间线工具如
timeline.py
将文件修改、进程创建、网络连接事件可视化。
六、清除后门与恢复服务
在确定攻击范围后,彻底清除恶意文件:删除webshell、挖矿程序,修复被篡改的系统文件。关闭攻击者创建的账户、计划任务和启动项。修补漏洞:如果是Struts2反序列化漏洞,升级框架;如果是Redis未授权访问,添加认证并限制绑定IP。所有密码必须强制更新,尤其是数据库和SSH密钥。
恢复服务前,进行安全加固:最小化开放端口,配置防火墙白名单;启用SSH密钥登录并禁止root远程登录;部署文件完整性监控(如AIDE)和入侵检测系统(如OSSEC)。最后,从干净备份恢复数据,并监控恢复后服务器的异常行为至少一周。
七、总结:构建持续防护体系
单次应急处理不能根治安全问题,必须建立持续防护机制:定期漏洞扫描与渗透测试、集中式日志审计与实时告警、网络分段与零信任架构。同时,编写详细的攻击复盘报告,包括根本原因、处置过程、改进措施,并组织团队演练。服务器安全是动态过程,唯有将应急响应转化为预防能力,才能有效应对未来攻击。
