用挂马检测工具排查时,问题优先级不应按“哪个告警看起来最吓人”来排,而应按证据强度排:已经确认被篡改的文件和已定位的恶意跳转排第一,只有异常特征但尚未复现的线索排第二,与挂马无关的性能或配置告警排最后。第一次接触这个问题,起点是先做一次全量扫描并保存原始结果,下一步是把结果分成“已确认、待验证、可忽略”三类,再决定先处理哪一个。
很多人第一次用挂马检测工具,会默认“红色告警最多”“风险评分最高”的页面就是最该先修的。这个判断方式容易出错,原因是工具输出的告警来源不同:有的来自文件特征比对,能直接指向被改动的代码;有的来自行为启发式判断,只是“像”恶意代码;还有的来自外链黑名单或访问日志统计,只能说明存在可疑流量,不能说明服务器上真的存在后门。
把这三类混在一起排序,结果往往是先花时间处理一堆误报,真正被植入的webshell却留在原地。所以优先级的第一步不是排序,而是分类。
可以按下面的标准给每条结果打标签,标签决定顺序,而不是分数决定顺序。
eval($_POST[...])这类结构。这类问题直接排第一,先隔离文件、保留副本,再清理。判断依据是“能不能指出具体被改动的对象”。能指出文件和改动内容的,优先级最高;只能指出现象的,优先级最低。
假设你刚跑完一次扫描,拿到一份结果列表,可以这样安排:
这个顺序的适用条件是:你手上有可比的干净版本或备份。如果没有备份,无法做文件比对,就只能依赖代码特征判断,此时“待验证”的比例会明显上升,处理速度也会变慢。判断结果是:能复现的改动优先修,不能复现的线索先记录、后核实。
挂马检测工具常同时展示站内统计、搜索引擎报告和第三方估算流量。这三者口径不同:站内统计记录的是服务器实际收到的请求,搜索引擎报告反映的是抓取和索引状态,第三方估算基于抽样和外推。把它们放在一起比“哪个数字大”没有意义,也不能用某一个指标反推搜索算法的判断。
更稳妥的做法是:把站内日志作为“发生了什么”的证据,把搜索引擎报告作为“外部看到了什么”的参考,两者出现矛盾时,以能对应到具体文件和时间点的记录为准。这样排序时就不会被一个孤立的数字带偏。
现在就可以做一件事:把最近一次扫描结果导出,按上面的三档标准逐条打标签,只保留“已确认”和“待验证”两类,形成一份不超过二十条的清单。清单排好后,从第一条开始处理,每处理完一条就复扫一次,确认该条告警确实消失,再动下一条。