让梦想从这里开始

因为有了梦想,我们才能拥有奋斗的目标,而这些目标凝结成希望的萌芽,在汗水与泪水浇灌下,绽放成功之花。

安卓重大锁屏密码漏洞,国产手机有几个中招了?

发布日期:2022-11-21 12:16    点击次数:108

上周,一条新闻吸引了托尼注意。

只用一张 SIM 卡,1 分钟不到就能解锁你的安卓手机?

一个国外小哥发现,不要刷机,不要电脑连线折腾,也不要 999 的 AK 火麒麟,只需要一张自己准备的 SIM 卡 ,就可以解锁别人的手机。

要知道这就意味着,如果你的手机丢了被人捡到,那陌生人可以用它自己的随便一张 SIM 卡就破解你们锁屏,数据安全形同虚设。

而且这个 BUG 会影响到的设备除了谷歌自家的 Piexl 以外,还包括开源的 LineageOS。

刑啊老哥,这空手套白狼的办法,让我有了一丝丝犯罪的念头。。。

咳咳打住,咱们还是先来看看这哥们是咋操作的吧。

/因为手机没电而发现的 BUG

整件事情的起因非常简单,在小哥经过了长途跋涉的旅行之后,他的手机因为缺电而关机了,于是就顺理成章的充电重启。

恰巧他的手机开了 SIM 卡锁,每次重启手机或者插拔 SIM 卡后都需要验证。

需要输入自己设置的 PIN 码解锁,只有三次机会 ▼

更不巧的是,他忘了自己设置的 PIN 码,三次机会都浪费了。

这时候 SIM 卡就进入了一个" 安全锁定 " 模式,需要输入一个八位的 PUK 码才能解锁。

同时它还要求你重新设置这张 SIM 卡的 PIN 码。

而如果输入错了 10 次 PUK 码,那这张 SIM 卡就会销毁。

所以在小哥找到自己的 SIM 卡包装,输入 PUK 码,重置了新的 PIN 码之后,他终于成功的进入了自己手机的系统。

PUK 码一般写在 SIM 卡的包装卡套上

或者可以打电话或者向营业厅查询 ▼

进入了自己手机的系统。。。

发现问题了嘛,在整个过程中,他不需要输入自己手机锁屏密码,就可以解锁手机。

但是一般来说,手机在插拔 SIM 卡或者重启之后,都是要强制你手动输入一次密码才行的。

一张自己的 SIM 卡,这么简单就可以绕过别人手机的安全防线?托尼也找出了自己柜子底的 pixel 4a 试了试,按照小哥的教程一顿操作,结果真的打开了。。。

安卓的锁屏,就这???

此时已经输入了 PUK 码,重置 PIN 码中 ▼

/

谷歌的反应

按这 BUG 来说,那岂不是所有人的安卓设备都有安全性风险?

认识到这件事严重性的小哥也是第一时间把漏洞发给了 Google。

照到他自己的说法,这是他迄今为止最简单的一次报告了。。。一共就五个步骤,两分钟不到的时间就可以复现。

于是也顺便去查了一下谷歌的 " 赏金榜单 ",依据谷歌的说法,这种高危漏洞能拿到最高 10w 美元的奖励。

果然,比起一个大胆的想法。。。还是走正规路子来钱快。

但谷歌就不一样了,虽然收到这个堪称 " 十万火急 " 的 Bug ,但它的表现还是一如既往的风轻云淡。

开口就是 :" 你这个 Bug 以前有人已经汇报过了( 虽然我们还没修 ),我们不鼓励重复的 Bug 汇报 " ( 10W 美元别想了!)

除了态度以外,行动也在摆烂,小哥提交 Bug 三个月后,谷歌依旧没有修好这个问题,一直到 9 月的安全补丁更新,小哥发现自己的问题还是能触发。。。

期间他自己还跑到谷歌办公室去了一趟,当场给员工当场演示此 Bug ,但依旧没说好什么时候可以修复。。。

最后忍无可忍的小哥给谷歌下了 " 最后通牒 "。

你再不修,我就准备在 10 月 15 号公布这个问题辣!

从这句话开始,谷歌的态度突然变了,不但改口说可以给小哥 7w 美元的奖励( 虽然你不是第一个发现的人,但是感谢有你我们才开始修理这个 Bug ),也开始积极沟通修 Bug 的时间。

最后,终于在 11 月 5 日的安全更新中这个问题得到了修复,漏洞编号 CVE-2022-20465。

我们的手机,大抵可能应该也许是更加安全了。

/BUG 从哪里来?

手机看上去是告一段落了,那这 Bug 到底是个咋回事呢?

托尼自己也不是非常专业的程序员,在看了小哥总结 + 谷歌修改的 AOSP 源码之后,

试着稍微那么理解了一下下,抛砖引玉将给大家看看,感觉讲的不太好的差友,也欢迎在评论区补充。

这次谷歌改动的地方还挺多的 ▼

简单来说就是在安卓上有个叫做 " 安全屏幕 " 的概念,它包括了我们的锁屏密码,我们的指纹数据或者是面部数据,也包括今天的 " 罪魁祸首 " —— SIM 卡 PIN 码以及 SIM 卡的 PUK 码。

这些安全屏幕呢,是实时更新,覆盖显示,就像下图一样,虽然我的手机锁屏了,但是在插入加了锁的 SIM 卡之后,SIM 卡 PIN 码锁就覆盖了手机的密码锁。

反应有点慢,中间剪了一段加速 ▼

而当一个 " 安全屏幕 " 完成了它的历史使命之后就要被销毁,就比如说我们输入密码解锁屏幕,输入 SIM 卡的 PIN 码解锁手机 SIM 卡锁。

负责销毁它的函数,叫做 getKeyguardSecurityCallback ( ) .dismiss ( ) 函数( 下面简称 dismiss ( ) )

但是到这问题出现了,.dismiss ( ) 它虽然负责销毁安全屏幕,可是它不负责消除哪一个安全屏幕。

也就是说不论是锁屏,还是 PUK 锁,碰上哪个就会清理掉哪个。。。

而偏偏这个安全屏幕会处在一个 " 实时更新 " 的状态 —— 因为手机会时不时检测 SIM 卡的状态。

所以在我们通过 PUK 锁重置完 SIM 卡 PIN 码之后,本来要销毁 PIN 码锁这个安全屏幕的 .dismiss ( ) 函数可能就会先撞上 " 指纹锁屏 " 或者 " 密码锁屏 " 这个安全屏幕,然后把它先行销毁。

啪,我们的手机就解锁了。

这就这次漏洞的成因,而安卓后续的 Bug 修改方式呢则是很简单,准备给 .dismiss ( ) 函数增加 " 认识能力 "。

让它在销毁安全屏幕之前能认出来销毁的是谁,省的乱杀无辜。

/面对 BUG,其它手机表现怎么样?

海外的故事告一段落了,Bug 得到了修改,我们的设备会更加的安全,发现问题的小哥也收获了收入。

不过托尼感觉比起听原生安卓的故事,大家可能更关心我们手上的系统表现的怎么样。

正巧今年新出的这几台手机我在柜子里吃灰,于是呢就给各位差友简单测试了一波。

手机的系统都展示在这里了,基本都是基于 安卓 /AOSP 12 开发的。

都是刚拿出来直接测的,没有更新最新补丁 ▼

按照小哥的方法,托尼一顿操作猛如虎的测试下来,结果有点出乎意料。

除了用原生系统的 Pixel,每一台手机都守住了自己的 " 安全底线 " ,均在这个问题面前幸存了下来。

可能。。。因为大家都是自己重写了锁屏吧。

所以,这个 Bug 虽然听起来挺离谱和危险,但是其实对咱们应该影响不大。

但还是希望谷歌未来上上心吧,这么简单的漏洞,还能活到 2022 。。。