安卓重大鎖屏密碼漏洞,國產手機有幾個中招了?_風聞
差评-差评官方账号-2022-11-19 09:40
本文原創於微信公眾號:差評 作者:託尼
上週,一條新聞吸引了託尼注意。
只用一張 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 。。。
圖片、資料來源:
Accidental $70k Google Pixel Lock Screen Bypasshttps://cs.android.com/android/_/android/platform/frameworks/base/+/18b88655a4d3d70733a9d12f740b6790f9061eaa:packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java;l=280;drc=a9143bf7bdf0b9c8bd5535485aee802ad0ad54be;bpv=0;bpt=0
Pixel 6 Full Lockscreen Bypass POC —— David Schütz
https://news.ycombinator.com/item?id=33544883