新大陆漏洞
去年十月,陆漏一个做安全研究的陆漏朋友给我发来一条消息:“你刷短视频的时候,有没有觉得推荐越来越准了?陆漏”我当时没当回事。他接着说:“不是陆漏那种‘猜你喜欢’的准,是陆漏它好像知道你在想什么——你还没想清楚,它已经把答案推过来了。陆漏”
这句话让我后背发凉。陆漏后来他给我看了些东西,陆漏我才意识到问题不在算法本身。陆漏
一个被忽略的陆漏入口
几乎所有App都在用同一个底层框架做用户行为采集——从滑动速度、停留时长,陆漏到手指按压屏幕的陆漏力度。这些数据被打包上传,陆漏喂给推荐模型。陆漏问题出在打包环节。陆漏
某头部短视频平台的技术文档里,有一行不起眼的注释:“event_batch_upload 默认关闭压缩校验”。翻译成人话就是:上传数据时,系统不检查数据包是否被篡改。这个设计原本是为了降低延迟——校验会多花几十毫秒。但代价是,中间人可以在数据包里塞东西。
我朋友演示了一遍。他在自己手机上装了个代理,拦截App的上行数据,往里面插入伪造的“用户行为”。比如,他根本没看过某类视频,但数据包里多了一条“连续观看同类内容47分钟”的记录。第二天,他的推荐流里塞满了那类视频。再往后,连搜索框的默认提示都变了。
不是漏洞的漏洞
这算漏洞吗?从代码层面看,它符合设计规范。压缩校验本来就是可选项,关掉不影响功能。但从安全角度看,一个不验证数据完整性的上传通道,等于把用户画像的画笔交给了任何人。
更麻烦的是,这类“设计缺陷”在快速迭代的互联网产品里遍地都是。开发团队忙着加功能,安全审计往往排在发版之后。我见过一个电商App的埋点系统,连用户ID都没加密,直接明文写在URL参数里。抓包工具一开,谁买了什么、看了多久,一览无余。
这些不是传统意义上的“漏洞”——没有缓冲区溢出,没有SQL注入,没有远程代码执行。它们更像是一扇没装锁的后门,门就开在闹市区,但没人觉得需要锁。
谁在利用它
我朋友后来做了一组实验。他在几个主流平台上注册了新账号,用代理工具注入特定行为数据。两周后,这些账号的推荐流出现了明显偏移。一个原本只刷科技内容的账号,被“喂”成了母婴用品重度用户。另一个账号的广告标签里,多出了“高消费意愿”“对价格不敏感”等标记。
“如果我是黑产,”他说,“我会批量注册账号,注入虚假行为,把推荐模型往某个方向带。等模型学会了,再用真实账号去收割流量。成本极低,效果极好。”
这不是科幻。2022年,某海外社交平台就发生过类似事件——攻击者通过伪造用户互动数据,让特定内容在推荐流里获得了远超正常的曝光。平台花了三个月才定位到问题,因为日志里那些请求看起来“完全正常”。
没人修的原因
我问过一个在大厂做推荐系统的工程师,为什么不加校验。他苦笑:“加校验要改客户端、改服务端、改数据管道,全链路动一遍。排期排到明年。而且产品经理会问——这能提升DAU吗?不能?那先放着。”
安全团队提过,但优先级不够。一个“可能被利用”的设计缺陷,在OKR面前没有说服力。直到有人真的利用了它,才会变成“事故”。
我后来自己抓了几个App的包。大部分都有类似问题——不是没有加密,而是加密了但密钥硬编码在客户端里。反编译一下就能拿到。这跟不加密有什么区别?
普通用户能做什么
说实话,做不了太多。你没法要求每个App都做端到端校验。但有几件事可以留意:如果推荐流突然变得“太懂你”,而你最近没做什么特别的操作,可能不是算法变聪明了。如果某个账号的推荐内容画风突变,检查一下有没有安装来路不明的插件或代理工具。
我朋友最后说了句话,我记到现在:“以前的安全问题是你家窗户没关。现在的安全问题是你家窗户关着,但玻璃是单向的——外面能看见里面,里面看不见外面。”
新大陆不缺漏洞。缺的是愿意回头看一眼的人。
(责任编辑:知识)














