Pine 萧箫 发自 凹非寺
量子位 | 公众号 QbitAI
换个SIM卡,就能解锁别人的手机?!
通过取卡针将卡托取出。卡槽内标有“SIM1”字符的一面为正面,Nano-SIM卡可放入此面对应的卡槽;卡槽内标有“NM”字符的一面为反面,Nano-SIM或NM Card可放入此面对应的卡槽。3、将卡放入对应的卡槽 卡芯片面朝上,。
并且整个解锁过程不超过两分钟。
一位外国小哥偶然间发现了谷歌Pixel手机上的这个漏洞:
能够直接绕过手机本身的指纹和密码保护,切换手机卡就能更改密码解锁屏幕。
严格来说,这个漏洞并非谷歌Pixel手机“独有”,而是Android系统中的一个bug,任何基于Android搭建的操作系统都可能受到影响。
例如有网友试了试开源安卓系统LineageOS(刷机党常用系统),就发现同样“中招了”:
还有网友在自己的Android12系统上试了下这种破解方式,“it works”!
不过这还不是最离谱的,更离谱的是这位小哥在向谷歌反馈之后,安全团队隔了近半年才修复这个漏洞。
在说小哥和谷歌关于这个漏洞的“拉锯战”之前,我们先回过头来看看这是个什么样的漏洞?
2分钟内就能破解手机锁屏
首先准备好取卡针,然后拿出手机,找到手机装卡那一侧,有一个小孔,将取卡针插入手机侧面小孔,轻轻按下,卡槽就会弹出,这时把卡槽取出,然后更换手机卡即可。目前市面上手机现在基本上都是一体机,后盖无法打开,卡槽设置。
小哥“贴心”地上传了以破坏者视角破解漏洞全过程的视频,整个过程花了不到两分钟。
话不多说,直接来看。
首先用错误的指纹和手机密码解锁手机,直至锁定。
然后用一张其他的SIM卡直接更换手机原来的SIM卡。
接下来再用错误的SIM卡密码(注意:这里的密码和手机密码不是一回事)锁定SIM卡。
SIM卡被锁定后,手机便会索要其PUK密码,在这SIM卡的原始包装上,如果丢失也可直接打电话向运营商查询。
请在关机状态下,使用配套的螺丝刀打开手表背部的SIM卡槽,安装、取出SIM卡。不可以在开机状态下安装、取出SIM卡。如果不小心在开机状态下安装SIM卡,请长按侧按键重新启动手表。安装SIM卡时请勿使用尖锐物体触碰卡槽内的金属。
PUK(Personal Identification NumberUnlock Key),SIM卡自带的PIN解锁码。
输入PUK密码后,直接重置新SIM的密码便能开锁,手机原有的密码和指纹都成功绕过。
bingo!
至于是如何发现这个漏洞以及为什么过了近半年才修复这个漏洞,也是个很有意思的过程。
以下是小哥的经历:
当时手机电量快耗尽关机了,他充上电重新启动后,手机要求提供SIM卡的PIN码,但却突然忘记了密码,在乱试一通之后“成功”把手机锁定。
要解开这个锁定便需要PUK密码,所幸他找到了原有包装并输入了PUK码。结果,重置SIM卡密码后,手机竟然直接解锁了!
发现这个大Bug之后,小哥向谷歌(Android VRP)提交了这个内部漏洞报告,也是从这时开始,小哥和谷歌的“拉锯战”开始了。
他仔细查看了Android和谷歌的设备安全奖励计划,发现自己最高可以获得10万美金的奖励,于是便申请了。
不过在报告提交一个月后,小哥收到了Android安全团队的一份邮件:
Android安全团队认为,这个问题另一位外部研究人员之前已经报告过了。
对此小哥认为,这份回邮的言外之意就是,最高十万美金的奖励他一分钱都拿不到。
时间又过了一个月,小哥收到安全团队的邮件,对方称漏洞还在修复中……
又又过了一个月,九月谷歌发布了新的补丁,但这个Bug依旧没有修复……
不过小哥也不是轻言放弃的人,他直接来到谷歌办公室,用谷歌Pixel手机演示了一下这个漏洞。
而后他给安全团队定了个漏洞修复期限:10月15日之前。而对方的回复也很干脆:10月份这个Bug修不好!
在拉扯一番后,小哥和谷歌建立了联系,能够实时得到漏洞修复的反馈。
谷歌方也确定了修复工作的具体时间:11月份进行,现在这个漏洞已于11月5日谷歌的安全更新中被解决。
小哥和谷歌的完整对话链接附在文末了,感兴趣的伙伴可以自行查看。(手动狗头)
1、找到苹果手机侧面的卡槽位置,如图所示 2、用小工具插入小孔内,如图所示 3、装卡的卡槽就会弹出来。如图所示。4、将手机卡对准卡槽的位置,装进去,如图所示 5、最后将卡槽重新插入手机内,如图所示 6、这样手机卡就。
究竟为什么会出现这样的漏洞?
现在,谷歌的安卓工程师们终于把这个漏洞给补上了。
然而让小哥惊讶的是,bug修复远不止他想象的“一行代码补丁”那么简单。
从提交的修改情况来看,光是要改动的文件数量,就达到12个:
所以这个漏洞究竟是怎么出现的?
这些操作被放在一个栈(stack)中。
正常解锁谷歌手机时,直接用PIN、指纹或密码都可以,但不能超过3次,否则就会被锁定。
但如果忘记密码,手机(在输入3次错误密码后)被强制锁定了,同时SIM PIN条目可见,它就会被放置在其他屏幕解锁操作之上,用来让你解除手机的锁定状态。
1、检查联系人设置进入联系人设置选项,查看是否勾选“SIM卡”联系人 Funtouch OS 3.0以下机型:进入联系人--点击左菜单键--更多--联系人显示,勾选“SIM卡”联系人。Funtouch OS 3.0-4.5机型:进入设置--联系人--。
△栈原理
这时候,如果使用SIM卡自带的PUK密码,就能通过一个叫“PUK重置组件”的模块调用.dismiss()函数,将手机锁定解除,并继续显示栈下面的其他屏幕解锁操作,在小哥的案例中是指纹锁屏。
△就是这个函数
这就导致它极容易受到竞态条件影响,一旦两个线程执行顺序出现一点儿误差,就可能导致屏幕解锁出现问题。
竞态条件即两个或者以上进程或者线程并发执行时,其最终的结果依赖于进程或者线程执行的精确时序。
关键来了,由于手机SIM卡状态是随时更新的(系统一直在监视SIM卡状态),因此如果SIM卡状态发生变化,系统也会更新当前的安全屏幕。
所以一旦“PUK重置组件”成功调用了.dismiss()函数,它就会在解锁PUK屏幕之前,直接先解锁了指纹锁屏!
根据谷歌公开的漏洞报告,它在Android 10到Android 13系统中都可能出现:
当然,也有网友测试发现,Android 11似乎不受影响,而是在Android 12中出现了。
还有网友发现三星手机也“逃过一劫”:
1、拿到iphone手机,可以看到iphone手机右侧有一圆形的小孔。把取卡器插入苹果手机右侧圆形的小孔中,用力的向里面按压,卡槽会自动弹出。2、取下苹果手机sim卡卡槽,放入sim卡,需注意,iphone手机sim卡为小卡,如果sim卡较大。
现在,安卓工程师们重构了.dismiss()函数,简单来说就是给它打个小小的补丁,让它只能解锁带有“SimPuk”标记的安全屏幕(也就是只能解除手机锁定屏幕)。
小哥本人对此没有异议,但也有网友认为,这不是这次漏洞的最优解:
永远不要假设任何bug都只有一种特殊情况。如果不解决代码的根本逻辑,灾难就一直存在。
你的安卓手机中出现了这个bug吗?
对话传送门:feed.bugs.xdavidhu.me
— 完 —
量子位 QbitAI · 头条号签约
关注我们,第一时间获知前沿科技动态