一種防止冷啟動攻擊的u盤加密密鑰存放方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種Android系統(tǒng)的U盤加密密鑰存放方法,特別涉及一種防止冷啟 動攻擊的U盤加密密鑰內(nèi)存存放方法,屬于數(shù)據(jù)安全技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002] Android操作系統(tǒng)是目前智能設(shè)備上最主流的操作系統(tǒng)。而Android設(shè)備的安全 性問題也越來越嚴重。自Android3.0以來,Google為其添加了一些簡單的加密功能。自 Android4.0以來,Android系統(tǒng)可以對設(shè)備的整個分區(qū)進行加密,用戶可以選擇對設(shè)備的 整個存儲部件(例如用戶數(shù)據(jù)分區(qū),SD卡等)上的數(shù)據(jù)進行加密,從而防止繞過屏幕鎖的 針對性的攻擊,保護用戶的敏感信息。Android設(shè)備在加密這些數(shù)據(jù)時是使用AES加密算 法的。AES(AdvancedEncryptionStandard,高級加密標準)是目前對稱密鑰加密中最流 行的算法之一,其加密數(shù)據(jù)區(qū)塊長度固定為128比特,密鑰長度則可以是128,192或256比 特。
[0003] 在Android4. 0發(fā)布之后,存儲在Android設(shè)備中的數(shù)據(jù)將經(jīng)過AES加密,因此, 除非能強行破解屏幕鎖,否則司法部門和企業(yè)IT人員也無法獲取其中的數(shù)據(jù)。然而,如果 可以獲得AES的加密密鑰,通過拷貝存儲器上的數(shù)據(jù)并解壓縮,就可以得到用戶的個人數(shù) 據(jù)。Mueller等研宄人員通過"FROST"冷啟動攻擊,即一種通過冷凍手機并快速重啟手機并 從手機RAM中根據(jù)啟發(fā)式算法尋找AES加密密鑰的攻擊,便能從智能手機的RAM中提取出 磁盤加密密鑰。這種攻擊方法利用了RAM的剩磁效應(yīng),溫度越低,剩磁效應(yīng)越明顯。其攻擊 過程如圖1所示,首先,將手機的溫度降低到1-15度,然后打開后蓋,扣掉電池并迅速裝回 去,按住特殊按鍵進入Fastboot模式,然后刷入FROST恢復(fù)鏡像,然后重啟至Recovery模 式,就可以使用其工具尋找到AES加密密鑰,進而獲得手機中用戶數(shù)據(jù)。
[0004] 普通的Android內(nèi)核使用AES加密U盤的方式為,首先在RAM中申請一段空閑空 間,將AES加密算法信息結(jié)構(gòu)體存放在里頭,然后將密鑰和加密初始向量寫入到信息結(jié)構(gòu) 體中,然后調(diào)用內(nèi)核中的加密API對U盤中的數(shù)據(jù)進行加密,加密完成后將信息結(jié)構(gòu)體空間 釋放。由于申請到的加密算法信息結(jié)構(gòu)體的空間在內(nèi)存中位置是隨機的,因此遍歷整個RAM 即可找到AES加密密鑰,其流程圖如圖2。
[0005] 針對這種攻擊方式,JohannesGotzfried等人提出了一種完全使用CPU內(nèi)部寄存 器進行AES加密的方式(ARMORED)以避免被上述冷啟動攻擊破解。ARMORED是在ARM上運 行AES加密算法而不涉及RAM。在智能手機的整個運行過程中,密鑰,密鑰調(diào)度和AES的所 有中間值被完全單獨存儲在CPU多媒體寄存器組NEON中。然而,為了避免將中間值(特別 是輪密鑰)存儲在內(nèi)存中,經(jīng)常要為新的輸入模塊重新計算AES的中間值。因此其加密效 率有所降低。同時,此加密算法不能被中斷,否則可能會產(chǎn)生副作用(如上下文切換的導(dǎo)致 寄存器中內(nèi)容被移動到RAM中),導(dǎo)致算法失效,冷啟動攻擊即可獲得加密密鑰。
[0006] 綜上可知,現(xiàn)有的Android系統(tǒng)的AES加密算法實現(xiàn)不能完全不被冷啟動攻擊所 破解。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明的目的是為解決上述缺陷,提出一種防止冷啟動攻擊的U盤加密密鑰內(nèi)存 存放方法。
[0008] 任何在手機中運行的進程,都需要使用手機的內(nèi)存RAM,即使是完全使用CPU內(nèi)部 寄存器進行數(shù)據(jù)加密的方法和冷啟動攻擊本身。完全使用CPU內(nèi)部寄存器進行數(shù)據(jù)加密方 法也需要將需要加密的數(shù)據(jù)和加密后的數(shù)據(jù)等存放在內(nèi)存中,冷啟動攻擊本身也需要一定 的內(nèi)存,更普遍的,這兩個程序都是運行在Android系統(tǒng)中的,而Android系統(tǒng)本身也需要 使用RAM。因此,對于冷啟動攻擊,如果將加密算法的加密密鑰存放在冷啟動攻擊及其上下 文執(zhí)行環(huán)境所需要使用的那段內(nèi)存中,當冷啟動攻擊將要執(zhí)行時,便將原來的加密算法的 密鑰覆蓋,冷啟動攻擊便無法找到密鑰。
[0009] 因此,首先需要找到冷啟動攻擊必須使用的物理內(nèi)存,使之加載時覆蓋加密密鑰。 在冷啟動攻擊中,該Android可加載內(nèi)核模塊運行時需要申請一段內(nèi)存空間,而此內(nèi)存空 間是由內(nèi)核分配的,其物理位置不固定,因此無法將加密密鑰保存在冷啟動攻擊進程需要 的內(nèi)存RAM中。
[0010] 在安裝有Android系統(tǒng)的設(shè)備中,有若干種不同的啟動模式,正常模式進入我們 常見的系統(tǒng),Recovery模式進入恢復(fù)模式。而冷破解的方法便是通過Recovery模式進行破 解的。無論是正常啟動還是Recovery模式啟動,首先需要啟動的是Bootloader。Android在 啟動時,在設(shè)備加電之后,首先從NorFlash開始運行,將自身代碼搬到CPU內(nèi)部的RAM中, 然后初始化各種硬件,然后將Boot分區(qū)中或者Recovery分區(qū)中的鏡像解包,將Linux內(nèi)核 解壓縮到內(nèi)存中,并且把需要傳遞的內(nèi)核參數(shù)拷貝到RAM的固定位置。然后跳到RAM中的 內(nèi)核處去啟動Linux內(nèi)核。
[0011] 從上述Android系統(tǒng)的初級啟動階段可以看到,在Android系統(tǒng)啟動時,將會把 內(nèi)核解壓到RAM中固定位置,然而,內(nèi)核代碼是一直貯存在內(nèi)存中的,如果在運行時修改, 極有可能導(dǎo)致系統(tǒng)崩潰。同時也可看到,啟動時,Bootloader將會把啟動命令行參數(shù)拷貝 到RAM中固定的位置,而這個命令行參數(shù)在內(nèi)核啟動之后便不再使用,因此可以考慮將加 密密鑰保存在RAM中存放命令行參數(shù)的位置。這樣,在每次系統(tǒng)啟動時,包括正常模式或者 Recovery模式,加密算法的密鑰將會被命令行參數(shù)覆蓋,而冷啟動攻擊是需要重新啟動進 入Recovery模式的,因此其無法得到加密密鑰。
[0012] 本發(fā)明是通過以下技術(shù)方案實現(xiàn)的:
[0013] 一種防止冷啟動攻擊的U盤加密密鑰內(nèi)存存放方法,包括以下步驟:
[0014]A?獲得Android設(shè)備的對應(yīng)內(nèi)核源代碼;
[0015] B.修改內(nèi)核源代碼中加密算法的密鑰空間申請及釋放內(nèi)存代碼并重新編譯;
[0016]C?提取Android設(shè)備啟動分區(qū)鏡像并解包;
[0017]D?重新打包boot,img啟動分區(qū)鏡像;
[0018]E?將新的boot,img啟動分區(qū)鏡像刷入所述Android設(shè)備啟動分區(qū)中;
[0019]F.重新啟動所述Android設(shè)備。
[0020] 在所述B中,密鑰申請及釋放的源代碼位于/crypto/api.c文件中。原源代碼 中,使用kzallocO函數(shù)申請內(nèi)存,得到的內(nèi)存位置為隨機的;需要將其修改為將固定物理 內(nèi)存映射到虛擬內(nèi)存作為密鑰保存位置。而Bootloader把命令行參數(shù)拷貝到RAM中的位 置固定,這個固定位置為系統(tǒng)RAM的首地址加上0x100。所以首先要使用pfn_to_page() 函數(shù)將物理地址轉(zhuǎn)換為內(nèi)存頁號,然后使用kmap()函數(shù)將上述頁號映射到虛擬地址上,賦 值給AES加密的結(jié)構(gòu)體。在釋放內(nèi)存的代碼中,需要將原釋放源代碼進行修改,否則會由 于kmap()得到的內(nèi)存無法釋放而導(dǎo)致系統(tǒng)崩潰。然后對源代碼進行編譯,得到arch/arm/ boot/zImage內(nèi)核鏡像。
[0021] 所述E中,將修改后的Android設(shè)備啟動分區(qū)鏡像刷入Android設(shè)備啟動分區(qū)中, 設(shè)備啟動時將使用新的啟動分區(qū)鏡像啟動,在使用加密算法時將會把密鑰結(jié)構(gòu)存放在固定 的物理內(nèi)存中,如果被執(zhí)行冷啟動攻擊,在Recovery模式啟動時將會把密鑰信息覆蓋,使 得冷啟動攻擊失敗。
[0022] 因此,一種防止冷啟動攻擊的U盤加密密鑰內(nèi)存存放方法,其Android內(nèi)核AES加 密算法的流程如圖3,首先,加密程序申請加密算法信息結(jié)構(gòu)體