
核心要点(TL;DR)
- 发现挂马先隔离断网,保留现场取证再清理。
- 重点检查最近修改文件、异常进程和计划任务。
- 使用grep和find命令快速定位恶意代码。
- 清理后必须修复漏洞并加固,防止二次入侵。
网站被挂马是运维人员最头疼的安全事件之一,恶意代码不仅影响用户体验,还会导致搜索引擎降权、数据泄露甚至服务器被控。面对突如其来的告警,很多站长容易手忙脚乱,直接删除文件了事,结果漏洞未补,攻击者很快卷土重来。本文提供一套完整的应急响应流程,从隔离取证到清理加固,手把手教你彻底清除恶意代码,并给出可落地的检查清单和命令,帮助你在最短时间内恢复业务。
第一步:隔离与取证,保留现场
发现挂马后,第一反应不应该是删除文件,而是隔离服务器并保留证据。立即断开网络连接(或通过防火墙限制访问),防止恶意代码继续传播或数据外泄。同时备份关键数据:
# 备份网站目录和数据库
tar -czf /backup/webapp_$(date +%F).tar.gz /var/www/html
mysqldump -u root -p --all-databases > /backup/db_$(date +%F).sql
# 备份系统日志
cp -r /var/log /backup/logs_$(date +%F)取证内容包括:恶意文件样本、进程列表(ps aux)、网络连接(netstat -antp)、计划任务(crontab -l)、用户账号(cat /etc/passwd)等。如果条件允许,对磁盘做镜像备份,便于后续深度分析。
第二步:定位恶意代码,快速排查
挂马通常表现为页面被插入恶意脚本、跳转代码或隐藏的Webshell。使用以下命令快速定位:
- 查找最近修改的文件:
find /var/www/html -type f -mtime -7 -ls(7天内修改的文件) - 搜索恶意特征:
grep -r -l "eval(base64_decode" /var/www/html或grep -r -l "iframe src="#blocked"/var/www/html - 检查异常文件:
find /var/www/html -name "*.php" -exec grep -l "eval\|assert\|system\|passthru" {} \;
同时检查系统层面:
- 进程:
ps aux | grep -v grep | grep -E "(wget|curl|python|perl)"查看可疑进程 - 网络:
netstat -antp | grep ESTABLISHED查看异常外连 - 计划任务:
crontab -l和ls -la /etc/cron* - 用户:
awk -F: '==0 {print }' /etc/passwd检查特权用户
第三步:清除恶意代码与后门
确认恶意文件后,不要直接删除,先备份样本再清理。对于Webshell,可使用工具查杀:
# 使用ClamAV扫描
clamscan -r --remove /var/www/html
# 使用rkhunter检查rootkit
rkhunter --check --sk
# 使用Lynis进行系统审计
lynis audit system手动清理时,注意检查以下位置:
- 网站根目录及子目录中的异常文件(如随机命名.php)
- 上传目录中的可执行脚本
- .htaccess文件是否被篡改
- 数据库中的恶意代码(如wp_options表被插入script)
清理后,使用grep再次确认无残留:grep -r "eval(\|base64_decode" /var/www/html。
第四步:修复漏洞与安全加固
清除恶意代码只是治标,修复漏洞才能治本。常见入侵原因包括CMS漏洞、弱密码、文件上传漏洞等。务必:
- 更新所有软件到最新版本(CMS、插件、服务器组件)
- 修改所有账号密码(SSH、数据库、后台管理员)
- 删除可疑用户和计划任务
- 限制文件上传目录的执行权限(如Nginx中
location ~* /uploads/.*\.php$ { deny all; }) - 禁用危险PHP函数:
disable_functions = exec,passthru,shell_exec,system
在防护建议方面,可以考虑部署Web应用防火墙(WAF)来拦截恶意请求。例如AegisX提供针对Webshell上传、SQL注入等攻击的实时防护,并能对异常文件变更进行监控,帮助你在挂马初期及时发现。
第五步:监控与复盘,防止二次入侵
清理加固后,需持续监控一段时间,确保无残留后门。建议:
- 启用文件完整性监控(如AIDE),定期检查关键文件变化
- 分析访问日志,寻找攻击者留下的痕迹:
grep -i "eval\|base64" /var/log/nginx/access.log - 设置告警规则,对异常登录、异常进程进行实时通知
- 编写事件报告,记录入侵时间、漏洞点、处理过程,并更新安全基线
最后,建议定期进行安全扫描和渗透测试,将应急响应流程文档化,并组织演练,提升团队响应速度。
行动建议
网站被挂马后,冷静执行“隔离→取证→排查→清理→加固→监控”六步流程,切忌直接删文件。日常运维中,保持软件更新、使用强密码、部署WAF、定期备份,才能将风险降到最低。立即检查你的服务器,按照上述清单做一次安全体检吧。
常见问题(FAQ)
网站被挂马了,第一步应该做什么?
立即隔离服务器,断开网络连接,防止恶意代码进一步传播或数据泄露。同时备份当前系统状态和日志,为后续取证和分析保留现场。不要急于删除文件,以免破坏证据。
如何快速找到网站中的恶意代码?
使用find命令查找最近修改的文件,结合grep搜索常见恶意特征如eval、base64_decode等。检查网站根目录和上传目录,对比文件完整性,重点关注异常的新增或修改文件。
清理挂马后如何防止再次被黑?
修复导致入侵的漏洞(如更新CMS、插件),修改所有密码,删除可疑账号,加固服务器配置(如禁用危险函数),部署WAF,并定期进行安全扫描和日志监控。
查杀后门时有哪些常用工具?
可以使用ClamAV进行病毒扫描,使用rkhunter检查rootkit,使用Lynis进行系统审计。对于Webshell,可使用专门查杀工具如D盾、河马Webshell查杀,或手动搜索特征代码。
应急响应过程中需要保留哪些证据?
保留系统日志(如/var/log/secure、access_log)、恶意文件样本、进程列表、网络连接状态、计划任务列表、用户账号信息等。最好对磁盘进行镜像备份,以便后续深入分析。