结论的适用范围应当由“证据能覆盖到哪一层”决定,而不是由缺口大小决定。若缺的是被感染文件的完整清单,但已有日志能证明某路径在特定时间窗口被写入异常代码,那么可以下“该路径在该窗口内存在木马行为”的结论,不能下“全站已清理干净”的结论。前者是局部判定,后者需要全量文件与访问链证据支撑。
常见情况是:网站木马检测工具报告了若干可疑文件,而访问日志、错误日志或文件修改记录的数量与之不匹配。有人据此认为工具误报,也有人认为日志被清理过。两种解释都成立,但指向的处理方式完全不同。
区分这两种解释,靠的不是缺口有多大,而是缺口的位置是否可预测。覆盖范围有限时,缺失集中在特定目录、扩展名或时间区间;证据被破坏时,缺失往往出现在与已确认异常直接相关的那一段记录上。
把结论分成三层,表达方式随之不同。第一层是单点确认:某个文件、某个路径、某个时间点的行为已被证据直接支持。第二层是范围推断:在已检查范围内未发现其他异常。第三层是全站判定:所有可执行路径与入口均已被覆盖。
统计缺口无法补齐时,通常只能停留在第一层或第二层。此时可用的表述是“在已检查的目录与时间窗口内”“就已获取的日志而言”。这不是免责话术,而是把结论绑定到具体证据边界上,让下一步动作有明确前提。
假设某站发现一个可疑PHP文件,修改时间为两周前,但可用访问日志只有最近三天。此时不能推断“两周前没有被访问”,也不能推断“攻击只发生在三天内”。能确认的是:该文件在三天窗口内是否有外部请求,以及请求来源是否异常。
如果三天日志中该文件被外部IP直接请求,则可把结论限定为“该文件在最近三天内被外部访问”,并据此优先检查同目录、同时间段的写入记录。如果三天内无请求,结论只能是“在可见日志范围内未观察到访问”,下一步应转向文件系统时间戳、备份差异和同目录其他文件的比对,而不是宣布安全。
以下证据可以帮助判断缺口来自覆盖不足还是记录被破坏:
这些证据不要求全部具备。只要能排除其中一种解释,结论的适用范围就能收窄到可表述的程度。
写结论前,先列出“已覆盖对象”和“未覆盖对象”两份清单。已覆盖对象包括实际扫描的目录、实际读取的日志区间、实际比对的备份版本。未覆盖对象包括权限不足的路径、已轮转删除的日志、未纳入比对的备份。
然后做一次动作:把结论中的绝对表述替换为边界表述,并注明该边界对应的下一步验证动作。例如把“未发现其他木马”改为“在已扫描的/var/www/html及其子目录、最近三天的访问日志范围内,未发现其他可疑文件;未覆盖的/tmp上传目录需单独检查”。这样处理后,下一步是明确的目录检查,而不是重复全站扫描。
这个动作的结果会直接影响后续判断:如果补充检查未覆盖目录后仍无发现,结论可以从“已检查范围内”升级为“全部可执行路径范围内”;如果补充检查发现新异常,则原结论的适用范围需要回退到单点确认,并重新评估日志缺口是否与新增异常相关。适用范围不是一次写死的,它随证据覆盖面的变化而调整。