大量漏洞
2023年秋天,大量漏洞安全研究员David在审计某款流行的大量漏洞智能门锁时,发现了一个让他后背发凉的大量漏洞事实:这款宣称“银行级加密”的设备,其固件里硬编码了一个万能密码。大量漏洞任何攻击者只要拆开外壳,大量漏洞用一根USB线连上调试接口,大量漏洞就能在十秒内获得最高权限。大量漏洞更离谱的大量漏洞是,这个密码在官方论坛的大量漏洞某个角落已经被用户无意间贴出来过三次,而厂商的大量漏洞回应是——“用户操作不当”。
这不是大量漏洞孤例。过去两年,大量漏洞我跟踪了三十多起公开披露的大量漏洞严重漏洞事件,从智能家居到企业级防火墙,大量漏洞从医疗设备到汽车充电桩。大量漏洞一个清晰的模式浮现出来:绝大多数漏洞并非源于高深的技术对抗,而是源于开发流程中某个被忽略的、近乎愚蠢的细节。
比如去年某知名路由器品牌被爆出的后门。攻击者可以绕过所有认证,直接以root身份执行任意命令。根因是什么?开发团队在调试版本中留了一个“测试接口”,发布正式固件时忘了删。这个接口的代码注释写着“TODO: remove before release”。它在那里躺了整整四年,跨越了十七个固件版本。
你可能会想,大公司总该靠谱些吧。恰恰相反。2024年初,某云计算巨头的一个内部API被曝存在权限提升漏洞。一个普通的只读账号,通过构造特定的请求头,就能获得整个组织的管理员权限。漏洞的根源是开发人员把权限校验逻辑写在了前端,后端只检查了“是否登录”,没检查“能做什么”。这种错误在安全圈叫“客户端信任”,属于入门级反面教材。但它出现在一家市值万亿美元的公司的核心服务里,持续了至少八个月。
为什么这些低级错误能活这么久?我观察到的答案很直接:现代软件太复杂了。一个中型Web应用可能依赖上千个第三方库,每个库又有自己的依赖。代码审查?多数团队连自己写的代码都审不过来。自动化扫描工具?它们只能发现已知模式的漏洞,对逻辑缺陷几乎无能为力。安全团队?在大多数公司里,安全团队的人数不到开发团队的百分之一,而且往往在项目上线前一周才被拉进来“看一眼”。
更麻烦的是,漏洞的“保质期”越来越短。以前一个漏洞从披露到被利用,平均有几十天窗口期。现在?根据我追踪的数据,从PoC公开到大规模扫描攻击,最快的一次只隔了四小时。攻击者也在自动化,他们用爬虫监控GitHub上的commit、监控安全邮件列表、监控厂商的补丁发布。你刚修好,人家已经写好了利用脚本。
我见过最荒诞的案例来自一家做儿童智能手表的公司。他们的App存在一个越权漏洞:登录后修改请求中的用户ID,就能查看任意其他孩子的实时位置和历史轨迹。发现者是个十四岁的初中生,他本来只是想看看自己手表的定位为什么不准。厂商的第一次回应是“不予修复,因为利用需要一定的技术能力”。直到事情在社交媒体上炸开,他们才连夜发了补丁。
这些事让我得出一个不太讨喜的结论:我们正在为过去二十年“快速迭代、先上线再修”的开发文化还债。每一行赶工写出的代码,每一个“暂时先这样”的配置,每一句“这个以后再说”的注释,都在某个角落埋下了一颗种子。有些种子永远不会发芽,但只要有足够多的种子,总有一些会破土而出。
安全行业有个老笑话:世界上只有两种公司——知道自己被黑了的,和不知道自己被黑了的。现在这个笑话要更新一下了:还有第三种——知道自己有漏洞,但觉得“没那么严重”的。而攻击者最喜欢的就是第三种。