️九家输入法八家泄密,华为凭什么没事 十八个小时里,腾讯从「没风险」改口成「请不要公开」
2023 年 5 月 31 日,多伦多大学公民实验室的研究员把搜狗输入法的加密漏洞,发到了腾讯输入法团队的邮箱。
石沉大海。半个多月之后的 6 月 16 日,研究员改从腾讯安全应急响应中心的门户又提交了一次。
6 月 25 日,腾讯回了一条:感谢关注腾讯安全,此问题无风险或风险较低,期待你下一篇更精彩的报告。
十八个小时之后,同一个门户又发来第二条:抱歉,我上一条回复错了,我们正在处理这个漏洞,请不要公开,非常感谢你的报告。
研究员直接拿这句话当了报告标题。那篇报告就叫《"请不要公开":搜狗输入法加密漏洞使按键暴露于网络窃听》,2023 年 8 月 9 日发布,作者是 Jeffrey Knockel、Zoë Reichert 和 Mona Wang。
一封邮件晾了十六天没人理,走门户才换来一句"期待你下次更精彩",潜台词是没打算认真读,随手把你打发走。十八小时后改口求你别说出去,那是已经知道这个漏洞有多要命。中间发生了什么不用猜,终于有人肯去看一眼代码,然后发现完蛋了。
还有个细节挺荒诞。披露之后,研究员测出自己的邮箱域名 citizenlab.ca 在中国被墙污染了 DNS,连查 MX 记录都会被塞回一个乱七八糟的 A 记录。人家想告诉你漏洞在哪,邮件都递不进来。
搜狗自研的那套加密,栽在二十一年前的老攻击上
先说清楚你打的字为什么会离开你的手机。
云联想这个功能,要把你正在敲的内容传到服务器,那边算完再把更聪明的候选词送回来。这一步本身没啥好说的的,云端算力确实能出更准的词。
问题出在传的时候。搜狗没用 TLS,用的是自研的一套东西,名字起得很唬人,叫 EncryptWall。AES 走 CBC 模式,PKCS#7 填充,zlib 压一遍,AES 的密钥再用一个写死在代码里的 1024 位 RSA 公钥包起来。
CBC 加 PKCS#7 填充,这个组合有个成名已久的打法,叫 padding oracle 攻击:服务器对"填充不对"和"解密不对"的反应有细微差别,攻击者拿这点差别当尺子,一个字节一个字节把明文量出来。报告实测,每个字节最多 256 条消息就能还原。
这个攻击是哪年公开的?2002 年。TLS 那边哪年修好的?2003 年。
搜狗被抓包是 2023 年。二十一年前学术界就公开的东西,TLS 早在二十年前就填上的坑,一个四亿五千万月活的国民级软件,自己重新踩了一遍。
不是他们不知道有 TLS。是他们觉得自己搓的能比 TLS 好。
具体中招的是 Windows 13.4 和安卓 11.20 版本。iOS 11.21 躲过一劫,原因很简单,那个版本的 EncryptWall 请求全都走了 HTTPS。同一家公司同一个功能,iOS 上就知道该走 HTTPS,Windows 和安卓上就自己造轮子。
顺带说个更没边的。研究员还发现安卓版会顺手把你手机上装的所有 App 列表打包传走,报告说不知道这是要实现什么功能。
九家测了八家中招,一个一个拆开看
如果只有搜狗一家,那还能叫事故。2024 年 4 月 23 日的第二份报告把整个行业的裤子扒了。
那份报告叫《The Not-So-Silent Type》,编号 175,测了九家:百度、荣耀、华为、讯飞、OPPO、三星、腾讯、vivo、小米。
八家有严重漏洞。报告的原话是,至多十亿用户受影响。搜狗、百度、讯飞三家加起来占了国内第三方输入法市场九成五以上。
一家一家看,你会发现烂得各有各的花样。报告专门写明,找不到一个共同的库或者单一的实现缺陷来背这个锅。每一家都是自己独立地、认认真真地,把加密写砸了。
百度的 Windows 版,用的自研协议里有个写死在代码里的固定密钥,谁反编译一下谁就有。更绝的是它把 AES 从标准的 10 轮改成了 9 轮,自己给自己减了个配。安卓和 iOS 版用上了 Curve25519 密钥交换,听着现代多了,结果服务器公钥是固定的,而且初始向量和密钥反复重用,研究员实测超过二十四小时还在用同一把。
讯飞的安卓版最离谱。用的是 DES,ECB 模式,八字节密钥是拿时间戳算出来的:
k = b'%08u' % ((s % 0x5F5E100) ^ 0x1001111)而这个 s,明文写在 HTTP GET 的参数里。等于你把家门锁上,再把钥匙用胶布贴在门把手上,旁边还留张纸条写着"钥匙在这"。
三星键盘更省事,加密这一步直接跳过了。用明文 HTTP POST,protobuf 序列化,把你敲的东西原样发出去。
QQ 拼音呢,跟搜狗一模一样的漏洞,同一个爹生的。
凡是用了搜狗那套 API 的,包括腾讯自己两个,加上小米、OPPO、vivo 机器上预装的搜狗版,那个 padding oracle 攻击还得主动发探测包才能利用,算是烂得有底线的。其余那些,纯被动就能解,不需要中间人,不需要往网络里发一个字节,坐在你数据经过的路径上安静读包就行。
九家里唯一干净的是华为。报告的原话是,他们分析过的每一个版本,华为都用 TLS 来加密键击。
华为凭什么没事?没有什么内幕,就是它没去发明加密,用了现成的那个。这道题的正确答案免费公开摆了二十年,另外八家全都绕开它,各自跑去交了一份自己写的。
所以这压根不是什么"高级黑客攻破了国产加密"的故事。这是一屋子人集体不用现成的 TLS,那玩意免费,还被全世界攻防捶打了二十年,他们偏要各自回家搓一个更烂的出来。
公民实验室给了三条解释:怕西方的密码学标准里埋后门;这些输入法都是 2013 年前发布的,那会儿 TLS 生态确实还不成熟;英文密码学圈那句"永远别自己造加密"的常识,没能翻译进中文技术圈。
我的猜测是第三条最接近真相。前两条更像是台阶,报告自己就写了,讯飞和搜狗切到 TLS 的速度说明,改用标准 TLS 不见得是时间或资源的问题。
换成中文邮件,讯飞三天就动了
漏洞本身还不算最气人的,修复状态那一栏才是。
研究员先给讯飞发的是英文邮件,一个月没人理。后来把标题和一句话摘要换成简体中文,重发了一遍,三天就收到回复,漏洞很快也修好了。
同一个漏洞,同一批研究员,一个月和三天的差别,不在技术难度上,在有没有人愿意读那封邮件上。
三天。改加密这件事到底能有多快,讯飞替所有人试出来了。
以后谁再说改加密要排期、要评估、要时间,你就想想这三天。
而到 2024 年 4 月 1 日报告发出来的时候,其他几家的补丁还没打齐。最狠的是荣耀,一个漏洞都没修,它预装的那个百度输入法压根没有应用商店的更新通道,报告写得很直白,这台设备会一直暴露在被动解密攻击之下。
做得到,就是不做。
我把云联想关了,是不是就没事了
这是最该问的一句,而且答案基本是肯定的。公民实验室给高风险用户的建议就是这个:别用云端候选,换一个完全在本地跑的输入法。
这些输入法的云功能,一般是装完或者第一次用的时候弹个窗问你要不要开。你确实点了同意,这点得认。
问题在于那个弹窗问你的是什么。它问的是"要不要更聪明的候选词",没有任何一家在那一刻告诉你,这条通道走的是自研加密,烂到路过的人都能读。
你同意的是上传,不是同意裸奔。
法律那边其实早写好了。个人信息保护法第五十一条第三项,白纸黑字要求个人信息处理者"采取相应的加密、去标识化等安全技术措施",2021 年 11 月 1 日起施行。
条文里写了"加密"两个字,没写"加密得管用"。于是自研一个能被 2002 年的攻击打穿的玩意,也叫加密。红线画到这个份上,跟没画区别不大。
加密补上了,但那条云通道还在,而且已经在改你的浏览器主页
接下来这条通道,跟传键击的那条不是一回事。但它出自同一家公司,同一套云控能力。
2025 年 9 月 20 日,火绒安全发了份报告。搜狗输入法通过自家的 Shiply 云控模块向云端拉配置,结合地区、时间这些用户画像做精准推送。
推送下来的推广模块,第一件事是调 OpenMutexW 和 Process32NextW,查这台机器上有没有 360 或者火绒的进程。没有,才继续往下走。
然后它去改 Chrome 和 Edge 的 Preferences 和 Secure Preferences 文件,把默认搜索引擎换掉。旧版本只改搜索引擎,新版本连主页一起改。火绒的处理很直白:自家产品直接拦截查杀。
还有更下作的。它靠改注册表把 ShowInSettings 设成 0,让自己从系统通知设置里消失,你想关都找不到入口;再靠云控下发的配置,忽略你亲手关掉的通知开关。
搜狗的回应是,这是一项尚未正式发布的测试功能,测试配置异常导致外部可访问,已于第一时间修复。
2023 年,这家公司被证明连给键击加密都做不明白。2025 年,它拿同一套云控能力干的事是:先探测你装没装杀毒软件,再动手改你的浏览器。
这条通道随时能从云端下发新配置,还能挑着人推。你亲手关掉的那个开关,它说不认就不认。
而你敲的每一个字,每天都从这家公司的软件里存储过。
热门跟贴