只需要幾個(gè)常見的漏洞、一些GPU和一些時(shí)間。
安卓在數(shù)百萬設(shè)備上的全盤加密功能能夠輕易被暴力破解,這情況比人們之前的預(yù)期要糟糕的多。而且,已經(jīng)有工作代碼能證明這一點(diǎn)。
通常而言,如果有人拿到了你使用高通驍龍?zhí)幚砥鞯氖謾C(jī),就有可能通過一個(gè)很容易使用的Python腳本來破解其文件系統(tǒng)的內(nèi)容,而不需要知道密碼或PIN。
技術(shù)細(xì)節(jié)
安卓會通過一個(gè)隨機(jī)生成的128位設(shè)備加密密鑰 (Device Encryption Key, DEK) 來加密設(shè)備的文件系統(tǒng)。安卓使用用戶的PIN或者密碼來加密DEK,并將它存儲在設(shè)備加密過的文件系統(tǒng)上。從物理上來講,它也在設(shè)備的閃存芯片中。當(dāng)你輸入正確的PIN或密碼時(shí),設(shè)備可以解鎖DEK,并使用密鑰來解鎖文件系統(tǒng)。
不過,它也不像上面說的這么簡單:DEK實(shí)際上是使用用戶的PIN或密碼,外加一個(gè)被稱為KeyMaster Key Blob的加密數(shù)據(jù)塊來進(jìn)行加密的。這個(gè)數(shù)據(jù)塊包含一個(gè)由KeyMaster程序生成的2048位RSA密鑰,它運(yùn)行在設(shè)備處理器上的一個(gè)安全區(qū)域上。KeyMaster會創(chuàng)建RSA密鑰,將其存儲在數(shù)據(jù)塊中,并為安卓系統(tǒng)創(chuàng)建一份加密過的拷貝版本。
必須意識到,安卓系統(tǒng)和你的移動應(yīng)用運(yùn)行在處理器的非安全區(qū)域上。安卓沒有訪問KeyMaster的安全世界的權(quán)限,因此它無法知曉數(shù)據(jù)塊里的RSA密鑰。安卓只能獲得這個(gè)數(shù)據(jù)塊的加密版本,而只有KeyMaster能夠解密它。
當(dāng)你輸入PIN或密碼時(shí),安卓拿到加密過的數(shù)據(jù)塊,并將它和使用scrypt處理過的PIN或密碼一起,傳回運(yùn)行在處理器安全區(qū)域上的KeyMaster。KeyMaster將私密地使用處理器中帶有的私鑰來對數(shù)據(jù)塊進(jìn)行解密,獲得長RSA密鑰。然后,它將私密地使用scrypt處理過的PIN或密碼,外加長RSA密鑰,來制造一個(gè)RSA簽名,并將簽名發(fā)回給安卓。之后安卓使用一系列算法來處理這一簽名,并最終解密DEK,解鎖設(shè)備。
因此,全部流程都基于KeyMaster的數(shù)據(jù)塊。數(shù)據(jù)塊包含解密DEK所需的長RSA密鑰。安卓只擁有加密后的數(shù)據(jù)塊,而只有用戶才有PIN或密碼。此外,只有KeyMaster才能解密加密過的數(shù)據(jù)塊。
如果你能解密數(shù)據(jù)塊并提取其RSA密鑰,你就有走過了解密文件系統(tǒng)的大半部分流程:這時(shí)你就可以真的開始暴力破解PIN或密碼,來完成解鎖流程。理想情況下,你永遠(yuǎn)無法獲得解密后的數(shù)據(jù)塊。然而,總有例外。
漏洞
安卓定義了KeyMaster的工作方法,但將實(shí)現(xiàn)工作留給了硬件制造商。高通在其ARM適配的驍龍系統(tǒng)中提供了KeyMaster。驍龍是基于芯片的系統(tǒng),被數(shù)以百萬計(jì)的手機(jī)、平板和其它電子產(chǎn)品使用。KeyMaster運(yùn)行在處理器的TrustZone里,它是在多個(gè)ARM核心之間的一個(gè)獨(dú)立區(qū)域。操作系統(tǒng)在TrustZone之外運(yùn)行,而且,理想情況下,無法干預(yù)安全區(qū)。特定的功能,比如加密和指紋掃描,都運(yùn)行在被保護(hù)的TrustZone上。
安全研究人員Gal Beniamini一直在研究高通的TrustZone代碼,如今他發(fā)布了一份詳細(xì)報(bào)告,描述如何從設(shè)備KeyMaster中提取密鑰。
高通在TrustZone中運(yùn)行一個(gè)小內(nèi)核,它提供了所謂的QSEE功能:Qualcomm Secure Execution Enviromment,小應(yīng)用被允許在安卓之外,在QSEE上運(yùn)行。
高通的KeyMaster正是QSEE應(yīng)用。Beniamini詳細(xì)描述了如何通過利用某個(gè)安卓內(nèi)核安全漏洞,加載你自己的QSEE應(yīng)用,之后,在受保護(hù)的空間里,利用一個(gè)高通TrustZone內(nèi)核的提權(quán)漏洞,獲取整個(gè)QSEE空間的控制權(quán)。之后,你就可以偷窺KeyMaster并且提取解密后的數(shù)據(jù)塊。
使用這一數(shù)據(jù)塊,你就有可能通過暴力破解余下的密鑰:PIN或密碼,來解密文件系統(tǒng)。但如果沒有數(shù)據(jù)塊的RSA私鑰,這將完全不可能。
這一部分是安全漏洞,另一方面也是設(shè)計(jì)瑕疵:KeyMaster讓關(guān)鍵密鑰能夠被軟件使用,但軟件是在一個(gè)隔離的花園里運(yùn)行的,因此,黑客的人物應(yīng)該是越過隔離,并且拿到里邊的獎勵。惡意應(yīng)用可以通過攻擊安卓內(nèi)核掌握QSEE區(qū)域,來開始這一過程;或者,陷阱短信可以溜進(jìn)StageFright,并且切入TrustZone。
此外,F(xiàn)BI表示,有可能在一個(gè)TrustZone已經(jīng)被黑客控制的設(shè)備上刷入定制安卓固件,并且提取KeyMaster密鑰,并進(jìn)一步制造暴力破解并獲取整個(gè)系統(tǒng)權(quán)限的可能性。
“安卓在所有的設(shè)備之間都使用完全相同的全盤加密策略。該策略基于KeyMaster模塊,來將密鑰與設(shè)備的硬件綁定。我的研究表明,完全可以在高通的設(shè)備上繞過這一綁定過程。此外,該策略也有可能適用于其它SoC制造商的產(chǎn)品。”