|
```html 凌晨三点十七分,漏洞更新手机屏幕在床头柜上炸开一道白光。漏洞更新我摸过来一看,漏洞更新是漏洞更新安全圈的老张发来的截图——某政务系统后台的登录页面,用户名框里填着 老张说的漏洞更新“补”,就是漏洞更新打补丁。可这个补丁包有多大呢?漏洞更新他后来告诉我,整整 2.3MB 的漏洞更新修复代码,覆盖了从身份验证到日志记录的漏洞更新十一个模块。而最初引发这一切的,不过是一个没做参数化查询的 SQL 语句。一个引号,一个分号,一条注释符,就能把整个系统的大门卸下来。 这事让我想起去年某电商平台的优惠券漏洞。凌晨两点,有人发现可以在不付款的情况下无限领满减券,消息在几个羊毛群里传了不到二十分钟,服务器就被挤爆了。第二天官方发公告说“已修复”,但修复的不是漏洞本身,是那个领券接口的并发限制。真正的逻辑缺陷——优惠券状态在订单未完成时就被标记为“已使用”——拖了三个月才改。那三个月里,黄牛用脚本每天薅走几十万。 你看,漏洞更新这件事,从来不是技术问题那么简单。它更像一场和影子赛跑的游戏。攻击者永远在找那条最短路径,而防御者得把所有可能的路径都堵上。成本不对等,时间不对等,连信息都不对等。一个漏洞从被发现到被利用,可能只需要几分钟;从被利用到被修复,却要走完“上报-评估-排期-开发-测试-灰度-全量”这一长串流程。中间任何一个环节卡住,补丁就永远在路上。 我见过最离谱的一次,某开源组件爆出反序列化漏洞,CVSS 评分 9.8。官方当天就发了新版本。可三个月后我做资产测绘,发现互联网上还有四万多台机器跑着旧版本。问了一个运维朋友,他说:“知道有漏洞,但那个组件嵌在核心业务里,升级要停服六小时,老板不批。” 你看,补丁就在那里,但“更新”这个动作,被业务连续性、被 KPI、被预算卡得死死的。 更麻烦的是,有些漏洞根本没法“更新”。比如逻辑漏洞——你写了一段代码,判断用户是不是 VIP,条件是 我自己的习惯是,每次看到“漏洞已修复”的公告,都会多问一句:修复的是根因还是症状?是加了 WAF 规则拦截攻击流量,还是真的把那段不安全的代码重写了?前者叫缓解,后者才叫更新。可现实中,太多团队选了前者。因为快,因为不影响业务,因为明天还要上线新功能。 上个月,老张那个政务系统的漏洞终于补上了。补丁说明里写着一行小字:“修复了身份验证绕过问题。” 没提 SQL 注入,没提那个挂了一年多的 漏洞不会消失。它们只是换了个地方,换了个形式,等着下一次更新。而我们要做的,是在下一次凌晨三点十七分的消息弹出来之前,先把该打的补丁打上。哪怕那个补丁有 2.3MB,哪怕要停服六小时。 ``` |
