- ```html
互联网漏洞 互联网漏洞
2017年,Equifax 因为一个 Apache Struts 2 的网漏远程代码执行漏洞,泄露了 1.47 亿人的互联敏感数据。事后复盘,网漏漏洞补丁其实在两个月前就发布了。互联没人去装。网漏就这么简单。互联一个 CVSS 评分 10.0 的网漏漏洞,在服务器上静静躺了两个月,互联然后炸了。网漏这件事说明了一个很反直觉的互联事实:绝大多数互联网漏洞,不是网漏被“攻破”的,而是互联被“忽略”的。
我们总把漏洞想象成某种高深的网漏东西——零日、内存越界、互联堆喷射、时序攻击。这些当然存在,但构成互联网日常威胁的,是另一类东西。SQL 注入。XSS。越权访问。文件上传过滤不严。这些漏洞的年龄比很多程序员都大,原理写在二十年前的教科书里,可它们依然年复一年地出现在各种系统里。为什么?因为写代码的人太忙了,因为安全测试总排在功能交付后面,因为“先上线再说”是一种几乎无法抵抗的惯性。
我见过一个电商后台,用户 ID 是自增的。修改 URL 里的数字,就能看到别人的订单。姓名、电话、收货地址,一览无余。这个漏洞的修复用不了一小时——加个权限校验就行。但它上线了两年。两年里没人发现,或者发现了但没人在意。直到某天一个普通用户手滑改了下地址栏,截图发到微博上。这不是技术问题,这是流程问题,甚至可以说是文化问题。
“安全不是产品,安全是过程。”——这句话被说烂了,但烂话往往是对的。
换个角度看,漏洞其实是一种“熵”。系统越复杂,组件越多,接口越杂,熵就越高。一个单体应用可能只有几个入口,微服务化之后变成几十个 API 网关、上百个内部调用。每个接口都是一个潜在的攻击面。你不可能把所有面都焊死,因为业务在变,需求在变,代码在变。今天修复的漏洞,明天可能因为一次重构又回来了。我见过一个团队,同一个 XSS 漏洞在半年内被修了三次,每次都是因为新来的前端把过滤逻辑删了——他以为那是冗余代码。
还有一种漏洞更隐蔽:逻辑漏洞。没有 payload,没有恶意字符,一切请求都“合法”。比如某平台优惠券可以无限领取,因为后端只校验了用户 ID 和券 ID 是否已存在,没校验领取次数。攻击者写个脚本循环调接口,一晚上薅走几十万。这种漏洞扫描器扫不出来,WAF 也拦不住。它考验的是开发者对业务的理解,而不是对代码的熟练度。可惜,业务逻辑往往是最容易被安全评审忽略的部分。
说回 Equifax。事后调查发现,那个被忽略的补丁只是问题的一部分。真正要命的是,他们的内部网络没有分段,攻击者从一个 Web 服务器横向移动到数据库,畅通无阻。一个漏洞不可怕,可怕的是漏洞之间的“连接”。就像一栋楼,窗户没关顶多进点蚊子,但如果每扇门都开着,那就是另一回事了。
我个人的判断是:互联网漏洞永远不会消失。不是因为技术不够好,而是因为人不够“坏”。写代码的人默认别人是善意的,设计架构的人默认边界是安全的。这种默认本身不是错,它是效率的来源。但安全需要一种“偏执”——假设每个输入都是恶意的,假设每个接口都会被滥用。这种偏执和快速迭代天然冲突。于是漏洞就在这两股力量的拉扯中,不断产生,不断被修补,再不断产生。循环往复,没有终点。
所以下次看到“某平台数据泄露”的新闻,别急着骂程序员菜。想想那个补丁发布后,有多少个“更重要”的需求插在了它前面。漏洞是结果,不是原因。
``` 顶: 834踩: 7






评论专区