是的你沒聽錯,最近有個國外的小哥給別人的手機換了一張SIM卡,2分鐘就解鎖了安卓系統(tǒng)的鎖屏。
小哥最先是在谷歌Pixel手機上發(fā)現(xiàn)這個BUG的,這個BUG的原理是切換手機SIM卡然后直接繞過手機本身的指紋解鎖和密碼保護。
而且這個BUG并不是谷歌Pixel手機才有的,其他安卓手機上也會有,例如有網(wǎng)友試了試開源安卓系統(tǒng) LineageOS,就發(fā)現(xiàn)同樣問題:
還有網(wǎng)友在自己的 Android12 系統(tǒng)上試了下這種破解方式:
具體的破解方式如下:
首先用錯誤的指紋或手機密碼解鎖手機,直到鎖定手,也就是故意輸錯3次密碼讓手機鎖住。
然后找一張新的SIM卡,替換換原理手機上的SIM卡。
接下來再用錯誤的 SIM 卡密碼(注意:這里的密碼是SIM卡密碼)鎖定 SIM 卡。
SIM 卡被鎖定后,手機便會索要其 PUK 密碼,PUK密碼一般在這 SIM 卡的原始包裝上,在卡套的背面會有一個圖層,刮開就可以看到密碼,如果丟失也可直接打電話向運營商查詢。
PUK碼又叫做SIM卡自帶的PIN解鎖碼,假如PIN密碼忘記了,可以用PUK碼解鎖。
輸入 PUK 密碼后,直接重置新 SIM 的密碼便能開鎖,手機原有的密碼和指紋都成功繞過。
那么這個漏洞是如何發(fā)現(xiàn)的呢?
據(jù)說當時小哥的手機電量快沒了關(guān)機了,他充上電后重新啟動,手機要求輸入SIM卡的PIN碼,但是他忘記了這個卡的PIN密碼,就亂輸入了幾個密碼導(dǎo)致把SIM卡鎖定了。
如果解開這個SIM卡就要輸入PUK密碼,他找到原來的卡套包裝后輸入了PUK碼。結(jié)果,重置SIM卡密碼后,手機竟然自動解鎖了。
小哥發(fā)現(xiàn)這個BUG之后立馬向谷歌提交了這個內(nèi)部報告,因為谷歌是有一個叫做設(shè)備安全獎勵計劃的,如果第一個提交BUG給谷歌的人最高可以獲得 10 萬美金的獎勵。
不過在報告提交一個月后,小哥收到了 Android 安全團隊的一份郵件內(nèi)容大概是:這個問題另一位外部研究人員之前已經(jīng)報告過了。
也就是說這位小哥拿不到10萬美金了。
但是據(jù)說這個小哥向谷歌反饋這個BUG之后,谷歌的安全團隊半年才修好這個漏洞,因為修復(fù)這個漏洞并沒有那么簡單,從提交的修改情況來看,光是要改動的文件數(shù)量,就達到 12 個:
這個漏洞究竟是怎么出現(xiàn)的?
簡單來說,Android 系統(tǒng)中有一個叫做“安全屏幕”的東西,其中包含兩種東西:
一種是 PIN、指紋、密碼等各種直接解鎖密保的屏幕操作。
另一種是 SIM PIN 和 SIM PUK 等各種解鎖手機鎖定狀態(tài)的操作。
這些操作被放在一個棧(stack)中。
正常解鎖谷歌安卓手機時,直接用 PIN、指紋或密碼都可以,但不能超過 3 次,否則就會被鎖定。
但如果忘記密碼,手機(在輸入 3 次錯誤密碼后)被強制鎖定了,同時 SIM PIN 條目可見,它就會被放置在其他屏幕解鎖操作之上,用來讓你解除手機的鎖定狀態(tài)。
棧的原理
這時候,如果使用 SIM 卡自帶的 PUK 密碼,就能通過一個叫“PUK 重置組件”的模塊調(diào)用.dismiss() 函數(shù),將手機鎖定解除,并繼續(xù)顯示棧下面的其他屏幕解鎖操作,在小哥的案例中是指紋鎖屏。
就是這個函數(shù)
這里注意,.dismiss() 函數(shù)可不是一個“專人專用”的函數(shù),它不僅會解除 SIM 卡的手機鎖定屏幕,連 PIN、密碼和指紋之類的正常鎖屏也能解鎖……
這就導(dǎo)致它極容易受到競態(tài)條件影響,一旦兩個線程執(zhí)行順序出現(xiàn)一點兒誤差,就可能導(dǎo)致屏幕解鎖出現(xiàn)問題,也就是說這個BUG并不是必現(xiàn)的,有可能同樣的環(huán)境下你測試的時候沒有這個漏洞。
舉個例子,如果在“PUK 重置組件”的模塊調(diào)用.dismiss () 函數(shù)之前,就有操作改變了當前的安全屏幕,那么.dismiss () 函數(shù)就可能誤解鎖指紋鎖屏。
關(guān)鍵地方在于,由于手機 SIM 卡狀態(tài)是隨時更新的(系統(tǒng)一直在監(jiān)視 SIM 卡狀態(tài)),因此如果 SIM 卡狀態(tài)發(fā)生變化,系統(tǒng)也會更新當前的安全屏幕。
所以一旦“PUK 重置組件”成功調(diào)用了.dismiss () 函數(shù),它就會在解鎖 PUK 屏幕之前,直接先解鎖了指紋鎖屏!
根據(jù)谷歌公開的漏洞報告,它在 Android 10 到 Android 13 系統(tǒng)中都可能出現(xiàn):
也有網(wǎng)友測試發(fā)現(xiàn),Android 11 似乎不受影響,而是在 Android 12 中出現(xiàn)了。
還有網(wǎng)友發(fā)現(xiàn)三星手機沒有這個問題:
也就是說并不是所有的安卓系統(tǒng)都會出現(xiàn),可能在某個版本上或者機型上才會出現(xiàn)這個BUG。
現(xiàn)在,谷歌的工程師們重構(gòu)了.dismiss () 函數(shù),給它打了個小補丁,讓它只能解鎖帶有“SimPuk”標記的安全屏幕(也就是只能解除手機鎖定屏幕)。
不過有網(wǎng)友認為,這不是這次漏洞的最優(yōu)解,因為這不算徹底解決了這個問題。
試試你的安卓手機中出現(xiàn)了這個 bug 嗎?