换个 SIM 卡就能解锁别人手机?Android 系统漏洞曝光

2024-09-23
来源:网络整理

奥飞寺的松晓晓

量子比特 | 官方账号

换个SIM卡就能解锁别人的手机吗?!

整个解锁过程不超过两分钟。

一位外国小伙无意中发现了手机的这个漏洞:

可以直接绕过手机本身的指纹和密码保护,通过切换SIM卡来更改屏幕解锁密码。

严格来说,该漏洞并非谷歌手机“独有”,而是系统本身的BUG,任何基于该漏洞的操作系统都可能受到影响。

比如有网友试用了开源的系统(刷机族常用的系统),发现也很“中招”:

有网友在自己的系统上尝试了这种破解方法,“它”!

但这还不是最离谱的事情,更离谱的是,这个家伙向谷歌报告了漏洞之后,安全团队花了将近半年的时间才修复该漏洞。

在讲这个漏洞和之间的拉锯战之前,我们先来回顾一下,这是一个什么样的漏洞?

2 分钟内破解手机锁屏

该小伙“贴心”地上传了一段视频,以破坏者的角度,记录了破解漏洞的全过程,整个过程不到两分钟。

不用多说,让我们来看看。

首先,用错误的指纹和手机密码来解锁手机,直到手机被锁定。

然后直接用另一张 SIM 卡替换手机中原来的 SIM 卡。

接下来使用错误的SIM卡密码(注意:这里的密码和手机密码不一样)来锁定SIM卡。

SIM卡被锁后,手机会要求输入PUK密码,PUK密码在SIM卡原包装上,如丢失可直接致电运营商查询。

PUK(密钥),SIM卡自带的PIN解锁码。

输入PUK密码后,可以直接重置新SIM卡的密码来解锁手机,手机原有的密码和指纹就被成功绕过了。

!

至于这个漏洞是如何被发现的,以及为何花了近半年的时间才修复,也是一个很有意思的过程。

以下是我弟弟的经历:

当时,他的手机电量已接近耗尽并关机,充电重启后,手机提示输入SIM卡PIN码,但他突然忘记了密码,尝试了几次后,“成功”锁定了手机。

要解锁,他需要输入PUK码。幸运的是,他找到了原包装,输入了PUK码。结果,重置SIM卡密码后,手机直接解锁了!

在发现这个大bug之后,这家伙向(VRP)提交了这份内部漏洞报告,也是从这个时候,这家伙和之间的“拉锯战”开始了。

他仔细查看了谷歌的设备安全奖励计划,发现自己最高可以获得10万美元的奖励,于是便申请了。

然而,提交报告一个月后,这家伙收到了安全团队的一封电子邮件:

安全团队认为该问题此前已被另一位外部研究人员报告过。

这位年轻人以为这封回复邮件的暗示是,自己将拿不到最高10万美元的悬赏金中的一分钱。

一个月后,小伙子收到了安全团队的邮件,称该漏洞仍在修复中……

又过了一个月,9月份谷歌发布了新的补丁,但该漏洞仍未修复......

但这家伙并不是轻易放弃的人。他直接去了谷歌办公室,用谷歌手机演示了这个漏洞。

然后他给了安全团队一个修复漏洞的最后期限:10月15日之前。对方的回复也很直白:这个bug不可能在10月份修复!

安卓手机忘记密码怎么刷机_安卓忘记密码手机刷机教程_安卓忘记密码手机刷机有用吗

经过一番讨论,该小伙子与 建立了联系,并能够获得有关漏洞修复的实时反馈。

谷歌也确定了修复工作的具体时间:将在11月份进行。目前该漏洞已在11月5日谷歌的安全更新中得到解决。

值得一提的是,这家伙最终因为提交了漏洞获得了 7 万美元的奖励,不过谷歌也对此给出了解释,用这家伙的原话来说,是:

尽管我的报告是重复的,但正是由于我的报告,他们才开始着手修复,因此他们决定破例并奖励我美元。

文章最后附上了这位小伙子和谷歌的完整对话,有兴趣的可以自己去看看。

为什么会出现这样的漏洞呢?

现在,谷歌的工程师终于修补了这个漏洞。

然而,令他惊讶的是,这个错误修复远不止他想象的“一行代码补丁”。

从提交的修改来看,单是需要修改的文件就高达12个:

那么这个漏洞是怎么产生的呢?

简单来说,系统里有一个概念叫“安全屏幕”( ),这个屏幕包括两点,一是PIN、指纹、密码等直接解锁安全保护的屏幕操作,二是SIM PIN、SIM PUK等解锁手机锁定状态的各种操作。

这些操作都放在堆栈()中。

正常解锁手机时,可以直接使用PIN码、指纹或密码,但不能超过3次,否则会被锁定。

但是,如果您忘记了密码,并且手机被强制锁定(输入 3 次错误密码后),并且 SIM PIN 条目可见,则它将位于其他屏幕解锁操作之上,允许您解锁手机。

△堆叠原理

这时候如果你使用SIM卡自带的PUK密码,就可以通过一个叫“PUK重置组件”的模块调用.()函数来解锁手机,并继续在栈下面显示其他屏幕解锁操作。上图中那个家伙就是指纹锁屏。

△ 就是这个函数

请注意,.()函数并不是一个“特殊函数”,它不仅可以解锁SIM卡的手机锁屏,还可以解锁PIN、密码、指纹等普通锁屏……

这使得它极易受到竞争条件的影响,一旦两个线程的执行顺序出现一点错误,就可能导致屏幕解锁出现问题。

当两个或多个进程或线程同时执行时,就会出现竞争条件,最终结果取决于进程或线程执行的精确时间。

例如,如果在 PUK 重置组件模块调用 .() 函数之前某个操作改变了当前安全屏幕,则 .() 函数可能会误解指纹锁屏幕。

这里到了重点,由于手机SIM卡的状态是随时更新的(系统一直在监控SIM卡的状态),所以如果SIM卡的状态发生变化,系统也会更新当前的安全屏幕。

所以“PUK重置组件”一旦成功调用.()函数,就会在解锁PUK屏幕之前直接解锁指纹锁屏!

根据 公开的漏洞报告,它可能发生在 10 到 13 个系统上:

当然也有网友测试过,发现11好像没有受到影响,但是在12中却出现了。

有网友还发现,三星手机也“逃过一劫”:

现在, 工程师对 .() 函数进行了重构,简单来说就是给它打上一个小补丁,让它只能解锁标有“ ”的安全屏幕(也就是只能解锁手机的锁屏)。

该小伙本人对此并无异议,但有网友认为这并不是此漏洞的最佳解决方案:

永远不要假设任何错误都只有一个特殊情况。如果你不解决代码的底层逻辑,灾难就会一直存在。

你的 手机是否出现了这个 bug?

对话门户:

feed.bugs..me

参考链接:

[1]

[2]

- 超过-

MEET 2023 会议启动

邀您共商智能产业如何渡过周期

今年12月,智能未来大会将再次邀请智能科技产业、科研、投资等领域大咖嘉宾,共同探讨人工智能产业的突围之道。

欢迎智能科技企业莅临大会,分享突破,交流划时代变革,共襄盛举!点击链接或下图可查看大会详情:

分享