安卓鎖屏不到2分鐘被破解: 僅需換一張SIM卡

換個SIM卡,就能解鎖別人的手機?!

並且整個解鎖過程不超過兩分鐘。

一位外國小哥偶然間發現了

谷歌Pixel手機

上的這個漏洞:

能夠直接繞過手機本身的指紋和密碼保護,切換手機卡就能更改密碼解鎖螢幕。

嚴格來說,這個漏洞並非谷歌Pixel手機“獨有”,而是Android系統中的一個bug,任何基於Android搭建的作業系統都可能受到影響。

例如有網友試了試開源安卓系統LineageOS(刷機黨常用系統),就發現同樣“中招了”。

還有網友在自己的Android12系統上試了下這種破解方式,“it works”!

安卓鎖屏不到2分鐘被破解: 僅需換一張SIM卡

不過這還不是最離譜的,更離譜的是這位小哥在向谷歌反饋之後,安全團隊隔了近半年才修復這個漏洞。

在說小哥和谷歌關於這個漏洞的“拉鋸戰”之前,我們先回過頭來看看這是個什麼樣的漏洞?

2分鐘內就能破解手機鎖屏

小哥“貼心”地上傳了以破壞者視角破解漏洞全過程的影片,整個過程花了不到兩分鐘。

話不多說,直接來看。

首先用錯誤的指紋和手機密碼解鎖手機,直至鎖定。

安卓鎖屏不到2分鐘被破解: 僅需換一張SIM卡

然後用一張其他的SIM卡直接更換手機原來的SIM卡。

安卓鎖屏不到2分鐘被破解: 僅需換一張SIM卡

接下來再用錯誤的SIM卡密碼(注意:這裡的密碼和手機密碼不是一回事)鎖定SIM卡。

安卓鎖屏不到2分鐘被破解: 僅需換一張SIM卡

SIM卡被鎖定後,手機便會索要其PUK密碼,在這SIM卡的原始包裝上,如果丟失也可直接打電話向運營商查詢。

PUK(Personal Identification NumberUnlock Key),SIM卡自帶的PIN解鎖碼。

安卓鎖屏不到2分鐘被破解: 僅需換一張SIM卡

輸入PUK密碼後,直接重置新SIM的密碼便能開鎖,手機原有的密碼和指紋都成功繞過。

bingo!

安卓鎖屏不到2分鐘被破解: 僅需換一張SIM卡

至於是如何發現這個漏洞以及為什麼過了近半年才修復這個漏洞,也是個很有意思的過程。

以下是小哥的經歷:

當時手機電量快耗盡關機了,他充上電重新啟動後,手機要求提供SIM卡的PIN碼,

但卻突然忘記了密碼,在亂試一通之後“成功”把手機鎖定。

要解開這個鎖定便需要PUK密碼,所幸他找到了原有包裝並輸入了PUK碼。結果,重置SIM卡密碼後,手機竟然直接解鎖了!

發現這個大Bug之後,小哥向谷歌(Android VRP)提交了這個內部漏洞報告,也是從這時開始,小哥和谷歌的“拉鋸戰”開始了。

他仔細查看了Android和谷歌的裝置安全獎勵計劃,發現自己最高可以獲得10萬美金的獎勵,於是便申請了。

不過在報告提交一個月後,小哥收到了Android安全團隊的一份郵件:

Android安全團隊認為,這個問題另一位外部研究人員之前已經報告過了。

對此小哥認為,這份回郵的言外之意就是,

最高十萬美金的獎勵他一分錢都拿不到。

時間又過了一個月,小哥收到安全團隊的郵件,對方稱漏洞還在修復中……

又又過了一個月,九月谷歌釋出了新的補丁,但這個Bug依舊沒有修復……

不過小哥也不是輕言放棄的人,他直接來到谷歌辦公室,用谷歌Pixel手機演示了一下這個漏洞。

而後他給安全團隊定了個漏洞修復期限:10月15日之前。而對方的回覆也很乾脆:10月份這個Bug修不好!

在拉扯一番後,小哥和谷歌建立了聯絡,能夠實時得到漏洞修復的反饋。

谷歌方也確定了修復工作的具體時間:11月份進行,現在這個漏洞已於11月5日谷歌的安全更新中被解決。

值得一提的是,關於提交漏洞的獎勵,小哥最終也拿到了7萬美金,不過谷歌對此還做出了一番解釋,用小哥的原話來說,就是:

儘管我的報告是重複的,但正是因為我的報告,他們才開始著手修復。正因為如此,他們決定破例一次,並獎勵給我70000美元。

小哥和谷歌的完整對話連結附在文末了,感興趣的夥伴可以自行檢視。(手動狗頭)

究竟為什麼會出現這樣的漏洞?

現在,谷歌的安卓工程師們終於把這個漏洞給補上了。

然而讓小哥驚訝的是,bug修復遠不止他想象的“一行程式碼補丁”那麼簡單。

從提交的修改情況來看,光是要改動的檔案數量,就達到12個:

安卓鎖屏不到2分鐘被破解: 僅需換一張SIM卡

所以這個漏洞究竟是怎麼出現的?

簡單來說,Android系統中有一個叫做“安全螢幕”(security screen)的概念,其中包含兩種東西,一種是PIN、指紋、密碼等各種直接解鎖密保的螢幕操作,另一種是SIM PIN和SIM PUK等各種解鎖手機鎖定狀態的操作。

這些操作被放在一個棧(stack)中。

正常解鎖谷歌手機時,直接用PIN、指紋或密碼都可以,但不能超過3次,否則就會被鎖定。

但如果忘記密碼,手機(在輸入3次錯誤密碼後)被強制鎖定了,同時SIM PIN條目可見,它就會被放置在其他螢幕解鎖操作之上,用來讓你解除手機的鎖定狀態。

安卓鎖屏不到2分鐘被破解: 僅需換一張SIM卡

△棧原理

這時候,如果使用SIM卡自帶的PUK密碼,就能透過一個叫“PUK重置元件”的模組呼叫。dismiss函式,將手機鎖定解除,並繼續顯示棧下面的其他螢幕解鎖操作,在小哥的案例中是指紋鎖屏。

這裡注意,。dismiss函式可不是一個“專人專用”的函式,它並不只會解除SIM卡的手機鎖定螢幕,連PIN、密碼和指紋之類的正常鎖屏也能解鎖……

這就導致它極容易受到競態條件影響,一旦兩個執行緒執行順序出現一點兒誤差,就可能導致螢幕解鎖出現問題。

競態條件即兩個或者以上程序或者執行緒併發執行時,其最終的結果依賴於程序或者執行緒執行的精確時序。

舉個栗子,如果在“PUK重置元件”的模組呼叫。dismiss函式之前,就有操作改變了當前的安全螢幕,那麼。dismiss函式就可能誤解鎖指紋鎖屏。

關鍵來了,由於手機SIM卡狀態是隨時更新的(系統一直在監視SIM卡狀態),因此如果SIM卡狀態發生變化,系統也會更新當前的安全螢幕。

所以一旦“PUK重置元件”成功呼叫了。dismiss函式,它就會在解鎖PUK螢幕之前,直接先解鎖了指紋鎖屏!

根據谷歌公開的漏洞報告,它在Android 10到Android 13系統中都可能出現: