维护漏洞

去年冬天,维护漏洞某市政务系统的维护漏洞一次常规升级后,登录页面开始随机崩溃。维护漏洞运维团队查了三天,维护漏洞最后发现问题出在一个2019年就标记为“低危”的维护漏洞旧接口上——它一直没被关掉,也没人记得它还在跑。维护漏洞这个接口原本只用于内部测试,维护漏洞但某次配置迁移时被意外暴露到公网。维护漏洞攻击者没费什么力气,维护漏洞就拿到了管理员令牌。维护漏洞

漏洞这东西,维护漏洞修不修,维护漏洞很多时候不取决于它本身多严重,维护漏洞而取决于有没有人记得它。维护漏洞我见过太多团队把漏洞扫描报告当成绩单看:高危的维护漏洞连夜修,中危的排期修,低危的——直接归档。可现实是,低危漏洞往往活得更久。它们藏在系统角落,像旧房子墙里的白蚁,平时听不见动静,等发现的时候房梁已经空了。

有个做电商的朋友跟我聊过他们的一次事故。一个优惠券接口的参数校验写得马虎,只能领一次的逻辑在前端做,后端没管。这个漏洞在测试环境跑了两年,没人当回事,因为正常用户根本不会去改请求参数。后来有人写了个脚本,批量领券再低价转卖,一晚上刷走了七十多万。事后复盘,安全团队说这个漏洞在扫描器里一直是“信息级”,连低危都算不上。可就是它,把季度利润啃掉了一大块。

维护漏洞和修漏洞是两件事。修是技术动作,打补丁、改配置、加验证。维护是管理动作,你得知道系统里有哪些漏洞,谁负责,什么时候修,不修的理由是什么。很多团队只有“修”的流程,没有“维护”的机制。漏洞库越积越大,修复率越来越低,最后干脆不看了。这跟家里杂物间一个道理——刚开始还会整理,东西一多就关上门眼不见为净。

我见过一个做得不错的例子。某银行的安全团队把漏洞分了四类:正在被利用的、可被利用的、理论可利用的、基本没戏的。第四类他们不修,但每季度复核一次,确认“基本没戏”的前提没变。比如一个需要物理接触服务器才能触发的漏洞,只要机房管控没松动,就可以先放着。但他们会把不修的理由写清楚,谁批的,什么时候到期。这套东西不复杂,但让漏洞从“永远修不完的清单”变成了“有账期的债务”。

还有一个容易被忽略的点:漏洞会“复活”。你修了一个SQL注入,半年后有人加了个新功能,用了同样的拼接写法,漏洞又回来了。代码在变,人员在换,架构在调,昨天修好的东西今天可能因为一次合并请求就前功尽弃。所以维护漏洞不是一次性工程,它更像值班——得有人盯着,得有回归测试,得把安全校验写进代码评审的检查项里。

说回开头那个政务系统。后来他们做了两件事:一是把所有对外暴露的接口列了清单,每个季度核对一次;二是给每个漏洞加了“过期提醒”,低危漏洞超过一年没修就自动升级优先级。第二件事听起来有点粗暴,但管用。因为大多数漏洞被遗忘,不是因为判断失误,而是因为没人再去看它一眼。

漏洞不会自己消失。你不维护它,它就维护你——用你意想不到的方式。