佳宁健康网

您现在的位置是:主页 > 热点资讯 >

热点资讯

安卓系统遭遇重大风险,两分钟可轻松破解锁屏

2023-05-20热点资讯admin 745
这时候,如果使用SIM卡自带的PUK密码,就能通过一个叫“PUK重置组件”的模块调用.dismiss()函数,将手机锁定解除,并继续显示栈下面的其他屏幕解锁操作,在小哥的案例中是指纹锁屏。

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

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

一次偶然的机会,国外网络安全研究员DavidSchütz发现了一种极为简单的绕过安卓手机的锁屏的方法,任何拿到手机的用户都可以解开手机。

整个过程只需要简单的五个步骤,大概两分钟的时间。

安卓系统遭遇重大风险,两分钟可轻松破解锁屏

虽然谷歌针对这个问题已经发布了Android更新,而在更新之前,这个锁屏漏洞持续存在超过五个月的时间。

Schütz表示,他是在自己的Pixel6电池没电、输错3次PIN并使用PUK(个人解锁密钥)代码恢复锁定的SIM卡后,发现了这个漏洞。

令他惊讶的是,在解锁SIM卡并选择新的PIN码后,设备并没有要求输入锁屏密码,而只是要求进行指纹扫描。

出于安全原因,Android设备在重新启动时总是要求输入锁屏密码或图案,因此直接进行指纹解锁不正常。

Schütz继续进行试验,当他尝试在不重启设备的情况下重现漏洞时,他认为也可以绕过指纹提示,直接进入主屏幕。

总的来说,对于该漏洞的利用主要有以下五个步骤。

1、提供三次错误指纹以禁用锁定设备上的生物特征认证;

安卓系统遭遇重大风险,两分钟可轻松破解锁屏

2、将设备中的SIM卡与设置了PIN码的攻击者控制的SIM卡热交换;

安卓系统遭遇重大风险,两分钟可轻松破解锁屏

3、提示输入错误的SIM卡密码三次,锁定SIM卡;

安卓系统遭遇重大风险,两分钟可轻松破解锁屏

4、设备提示用户输入SIM的个人解锁密钥(PUK)码,这是一个唯一的8位数字,用于解锁SIM卡;

安卓系统遭遇重大风险,两分钟可轻松破解锁屏

5、为攻击者控制的SIM输入新的PIN码。

该安全漏洞的影响十分广泛,几乎所有未更新2022年11月补丁的,运行Android10、11、12、13版本的手机都受到影响,这是一个无法想象的数量。

虽然这个漏洞利用需要对拿到对方的手机,但是这依旧会产生巨大的影响,尤其是对于那些虐待他人、接受调查、手机丢失的用户来说,影响十分严重。

2022年6月,Schütz向谷歌报告了这一安全漏洞,编号CVEIDCVE-2022-20465,但是直到2022年11月7日,谷歌才正式对外公布了该漏洞的修复补丁。

另外,因为这个安全漏洞,Schütz获得了谷歌的7万美元的高额奖励。

现在,谷歌的安卓工程师们终于把这个漏洞给补上了。

然而让人惊讶的是,bug修复远不止他想象的“一行代码补丁”那么简单。

从提交的修改情况来看,光是要改动的文件数量,就达到12个:

所以这个漏洞究竟是怎么出现的?

简单来说,Android系统中有一个叫做“安全屏幕”(securityscreen)的概念,其中包含两种东西,一种是PIN、指纹、密码等各种直接解锁密保的屏幕操作,另一种是SIMPIN和SIMPUK等各种解锁手机锁定状态的操作。

这些操作被放在一个栈(stack)中。

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

但如果忘记密码,手机(在输入3次错误密码后)被强制锁定了,同时SIMPIN条目可见,它就会被放置在其他屏幕解锁操作之上,用来让你解除手机的锁定状态。

这时候,如果使用SIM卡自带的PUK密码,就能通过一个叫“PUK重置组件”的模块调用.dismiss()函数,将手机锁定解除,并继续显示栈下面的其他屏幕解锁操作,在小哥的案例中是指纹锁屏。

这里注意,.dismiss()函数可不是一个“专人专用”的函数,它并不只会解除SIM卡的手机锁定屏幕,连PIN、密码和指纹之类的正常锁屏也能解锁……

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

举个栗子,如果在“PUK重置组件”的模块调用.dismiss()函数之前,就有操作改变了当前的安全屏幕,那么.dismiss()函数就可能误解锁指纹锁屏。

关键来了,由于手机SIM卡状态是随时更新的(系统一直在监视SIM卡状态),因此如果SIM卡状态发生变化,系统也会更新当前的安全屏幕。

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

根据谷歌公开的漏洞报告,它在Android10到Android13系统中都可能出现。

现在,安卓工程师们重构了.dismiss()函数,简单来说就是给它打个小小的补丁,让它只能解锁带有“SimPuk”标记的安全屏幕(也就是只能解除手机锁定屏幕)。

永远不要假设任何bug都只有一种特殊情况。如果不解决代码的根本逻辑,灾难就一直存在。