当前位置:首页 > 投稿 > 正文

安卓系统遭遇重大风险(安卓系统怎么破解锁屏)

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


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


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


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



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


Schütz表示,他是在自己的Pixel 6 电池没电、输错 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月补丁的,运行 Android 10、11、12 、13 版本的手机都受到影响,这是一个无法想象的数量。


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


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


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


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


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


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



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


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


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


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


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



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


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


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


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



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


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


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


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


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