确定异常开始时间,不能只看你打开检测工具的那一刻,而要找出“最早可被独立证据支撑的异常出现时间”。对网站被挂马检测工具给出的告警来说,工具扫描时间、页面首次被篡改时间、搜索引擎首次抓到异常的时间、服务器日志里攻击者首次成功写入的时间,往往是四个不同时刻。第一次处理这个问题,正确的起点是先建立一条时间证据链,再判断哪个时间最接近真实起点。
很多人看到检测工具弹出“发现恶意代码”,就把当天日期记成异常开始时间。这个做法只在一种条件下成立:你恰好在那次扫描前几分钟完成上一次扫描,且两次扫描之间没有空档。否则,告警时间只代表“检测动作发生的时刻”,可能比真实入侵晚几天甚至几个月。
原因在于,挂马检测工具通常按固定周期抓取页面或比对特征。如果页面在两次扫描之间被写入恶意脚本,那么最早只能在下一次扫描时暴露。工具没有报,不等于当时没有异常;工具报了,也不等于异常从那一刻才开始。
判断时优先找“能互相印证的两个独立来源”。例如,某文件 mtime 是 3 月 2 日 02:14,而访问日志显示 02:13 有一个陌生 IP 向该文件所在目录上传了脚本,这两条证据就能把起点锁定在很窄的区间内。只有单一 mtime,没有日志或备份对照,只能给出“不晚于该时刻”的结论。
可执行步骤:先找最近一次确认正常的备份或历史版本,再找最早出现异常的记录,两者之间就是异常发生的候选区间。
wp-content 一类可写目录的请求。适用条件是日志保留完整、备份可读。如果日志已被轮转删除,或备份本身也已感染,就只能退回到文件时间与外部快照,结论要相应放宽,写成“异常不晚于某日,具体起点无法确认”。
网站被挂马检测工具的强项是发现特征,不是还原时间。不同工具的扫描频率、抓取范围和判定规则不同,同一站点可能一个工具报、另一个不报。遇到告警时,可以这样核对:
stat 看时间、用 grep 搜可疑特征,再与工具结果比对。如果只靠工具时间下结论,很容易把清理范围定得太小:以为只需删掉当天新增的文件,实际遗留了更早植入的后门。反过来,把起点无限往前推,也会让日志排查失去重点。
当你已经确定一个“有证据支撑的最早异常时间”,下一步不是立刻全站重装,而是以该时间为界,列出此后所有被修改的文件、新增的管理员账号、变更过的定时任务和外部连接,逐项确认是否属于正常运维。这个清单会直接决定清理范围,也能帮你判断是否需要从更早的干净备份恢复。