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