先给结论:不要急着判断谁对谁错,而是把“扫描器没报”和“日志里出现了可疑请求”当成两个待检验的解释,各自写出一个能被证伪的预测。反证问题的核心不是再扫一遍,而是问:如果解释A成立,我应该在哪个具体位置、哪个时间点看到什么;如果解释B成立,又该看到什么。两者预测不一致的地方,就是你要动手核对的地方。
典型场景是:一次网站安全检测显示某路径无可利用漏洞,但访问日志里同一路径反复出现带特殊参数的请求,且返回状态码异常。直觉会让人立刻下结论——“要么扫描漏报,要么日志是误报”。这两种都是解释,但都还没有证据。
把它写成两个可区分的解释:
两个解释都能解释“扫描无告警+日志有异常请求”这个现象,所以光看现象本身无法区分。下一步是让它们做出不同的预测。
反证问题的写法是“如果……那么我应该在……看到……”。对解释A,可以预测:如果检测确实没触达该路径,那么在检测运行的时间窗口内,该路径不应出现来自检测出口IP的请求记录。对解释B,可以预测:如果这些请求来自正常业务,那么它们应能对应到某个已知功能、已知来源或稳定的参数模式,而不是随机变形。
这两条预测指向不同的核对动作:前者去比对检测时间窗与访问日志的来源IP,后者去比对参数形态与业务功能。注意,这里用的是可核对的记录,不是“感觉像攻击”。
能真正区分解释的证据,通常要满足两个条件:来源独立、时间可对齐。可用的证据包括:
这里要提醒一个容易被忽略的点:请求量归零、抓取量下降这类现象,本身不能单独证明处理正确。它们还可能来自缓存命中、采集频率调整、上游限流等合理解释。反证问题要做的,是继续追问“如果是缓存命中,那么源站日志里应该看不到这批请求”,而不是把归零当成结论。
假设某后台登录路径在检测报告中标记为“无风险”,但日志显示该路径在凌晨有多次带超长参数的POST请求。可以这样构造反证:
核对后如果发现:检测记录确实只有GET,而日志里的POST参数无法对应任何已知字段——那么“覆盖不足”得到支持,下一步就该针对提交环节补充检测,而不是去改日志。反之,如果参数能一一对应到已知字段,说明更可能是误读,下一步应调整告警规则、减少噪声,而不是盲目加检测项。这个动作及其结果,直接决定后续是补覆盖还是降误报,两者方向相反。
一次反证只能解决一个矛盾。要让结论站得住,需要把“解释—预测—证据—结论”写成一条可复查的记录:时间窗口、来源IP、参数样本、对应业务功能。这样下次再出现同类矛盾时,不必从头争论,而是直接看上次哪条预测被推翻、哪条被支持。
需要强调的是,第三方估算流量、搜索引擎报告和站内统计的口径本就不同,任何单一指标都不足以还原搜索算法或攻击全貌。反证问题的价值,恰恰在于它逼你用多个独立来源去交叉验证,而不是让一个看起来权威的数字替你下判断。