一種嵌入式分區(qū)映像安全認(rèn)證及內(nèi)核可信引導(dǎo)方法及其設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于嵌入式系統(tǒng)安全領(lǐng)域,尤其涉及一種嵌入式分區(qū)映像安全認(rèn)證及內(nèi)核可信引導(dǎo)方法及其設(shè)備。
【背景技術(shù)】
[0002]嵌入式系統(tǒng)應(yīng)用開(kāi)發(fā)不同于PC機(jī),其開(kāi)發(fā)過(guò)程同時(shí)涉及軟硬件,需要將硬件平臺(tái)的設(shè)計(jì)、操作系統(tǒng)以及上層應(yīng)用開(kāi)發(fā)綜合考慮。由于應(yīng)用和成本約束,嵌入式系統(tǒng)的硬件平臺(tái)需根據(jù)應(yīng)用量身定制,通常所用的PMU、存儲(chǔ)器、外圍設(shè)備等有多種選擇余地,而且軟件調(diào)試技術(shù)特殊,使得嵌入式平臺(tái)的操作系統(tǒng)多樣化并且差異化比較大,但是各種嵌入式操作系統(tǒng)從上電到系統(tǒng)啟動(dòng)完成的整個(gè)過(guò)程即嵌入式系統(tǒng)的引導(dǎo)和啟動(dòng)過(guò)程基本是一致的,差別主要是體現(xiàn)在各個(gè)系統(tǒng)在這一系列過(guò)程中的具體操作,比如對(duì)某一硬件的初始化流程、對(duì)文件系統(tǒng)的操作方式等,而系統(tǒng)的裝載、執(zhí)行過(guò)程再無(wú)大的差別。對(duì)于嵌入式操作系統(tǒng)來(lái)說(shuō),如圖-1,其啟動(dòng)過(guò)程大致可以劃分成三個(gè)階段,即系統(tǒng)引導(dǎo)過(guò)程、操作系統(tǒng)內(nèi)核啟動(dòng)過(guò)程、文件系統(tǒng)加載過(guò)程。
[0003]嵌入式系統(tǒng)的引導(dǎo)程序通常稱(chēng)為Bootloader,類(lèi)似于PC系統(tǒng)上的B1S。嵌入式系統(tǒng)的Bootloader—般由兩部分構(gòu)成:第一部分是片上(SOC)及板級(jí)系統(tǒng)(BSP)初始化代碼,主要功能是通過(guò)設(shè)置MCU功能寄存器初始化各硬件單元初始工作模式,如設(shè)置時(shí)鐘、存儲(chǔ)器訪問(wèn)時(shí)序、中斷控制寄存器等,完成內(nèi)存映射,初始化MMU/MPU,初始化系統(tǒng)中斷向量表等;第二部分是加載嵌入式操作系統(tǒng)內(nèi)核程序,其功能是將操作系統(tǒng)內(nèi)核映像從只讀存儲(chǔ)器裝載或拷貝到系統(tǒng)RAM中,并跳轉(zhuǎn)到內(nèi)核映像入口處繼續(xù)執(zhí)行然后將系統(tǒng)控制權(quán)交給操作系統(tǒng)。嵌入式操作系統(tǒng)是嵌入式系統(tǒng)加電運(yùn)行后的資源管理(包括硬件及軟件資源)及調(diào)度平臺(tái),負(fù)責(zé)嵌入式實(shí)時(shí)任務(wù)的管理。如圖-1基于以上兩部的引導(dǎo)和執(zhí)行,完成了系統(tǒng)引導(dǎo)及系統(tǒng)內(nèi)核加載運(yùn)行(注:嵌入式操作系統(tǒng)執(zhí)行環(huán)境的初始化代碼主要由硬件抽象層HAL代碼、設(shè)備驅(qū)動(dòng)程序初始化代碼和操作系統(tǒng)執(zhí)行初始化代碼三部分構(gòu)成)。操作系統(tǒng)加載運(yùn)行后,將啟動(dòng)文件系統(tǒng)加載,文件系統(tǒng)存儲(chǔ)了系統(tǒng)配置文件、系統(tǒng)程序、用戶應(yīng)用程序和必需的驅(qū)動(dòng)程序,文件系統(tǒng)和操作系統(tǒng)緊密相連,對(duì)文件系統(tǒng)的操作和管理都由操作系統(tǒng)來(lái)完成。如圖-2所示,嵌入式系統(tǒng)引導(dǎo)啟動(dòng)是一個(gè)線性的過(guò)程,在這個(gè)過(guò)程中Bootloader扮演極其重要的角色,操作系統(tǒng)以及后面的應(yīng)用程序都由他裝載并獲得執(zhí)行。在加載操作系統(tǒng)內(nèi)核時(shí)有兩個(gè)必要條件,包括:操作系統(tǒng)內(nèi)核入口地址;操作系統(tǒng)內(nèi)核初始化參數(shù)。操作系統(tǒng)內(nèi)核入口地址由Bootloader在裝載內(nèi)核映像文件時(shí)根據(jù)映像文件的描述信息查找到其入口位置并記錄該位置相對(duì)起始的偏移量,然后在合適的時(shí)機(jī)直接跳轉(zhuǎn)到內(nèi)核入口處開(kāi)始執(zhí)行內(nèi)核程序。Bootloader根據(jù)系統(tǒng)的啟動(dòng)模式加載與模式相匹配的環(huán)境配置文件,然后生成內(nèi)核執(zhí)行時(shí)所需要的初始化參數(shù),在引導(dǎo)內(nèi)核啟動(dòng)時(shí)傳給操作系統(tǒng)內(nèi)核。目前嵌入系統(tǒng)所使用的Bootloader不是由芯片廠商提供的就是使用開(kāi)源的項(xiàng)目,正是由于Bootloader的開(kāi)放性使得其很容易被有針對(duì)性地分析研宄,也即如果沒(méi)有安全機(jī)制的嵌入,則嵌入式系統(tǒng)或應(yīng)用程序極有可能存在被惡意篡改、安裝后門(mén)等風(fēng)險(xiǎn),給用戶的利益和安全帶來(lái)極大危害。為了盡量避免這種安全風(fēng)險(xiǎn),目前各大廠商為了獲得獨(dú)有的系統(tǒng)價(jià)值、系統(tǒng)的穩(wěn)定運(yùn)行、用戶信息安全等,采取的主要措施是對(duì)系統(tǒng)Bootloader加鎖。加鎖的Bootloader僅能引導(dǎo)原廠提供的固件,對(duì)任何第三方固件都不予識(shí)別,加鎖后的Bootloader雖然第三方不能更改Bootloader的行為,但是仍可以對(duì)系統(tǒng)的啟動(dòng)過(guò)程進(jìn)行監(jiān)聽(tīng)分析,然后繞過(guò)Bootloader威脅系統(tǒng)安全。
[0004]Android系統(tǒng)作為當(dāng)前較為流行和普及的系統(tǒng),其內(nèi)含有的嵌入式系統(tǒng)啟動(dòng)的一般次序?yàn)?系統(tǒng)上電;Bootloader引導(dǎo);Linux內(nèi)核啟動(dòng);Init初始化系統(tǒng)服務(wù)等。1、系統(tǒng)上電。Android系統(tǒng)的應(yīng)用處理器上電復(fù)位后,將PC指針指向復(fù)位時(shí)的零地址(即啟動(dòng)地址),從該地址讀出啟動(dòng)程序的可執(zhí)行代碼直接運(yùn)行或者將可執(zhí)行代碼與數(shù)據(jù)載入CPU內(nèi)置的RAM中再運(yùn)行。2.Bootloader引導(dǎo)。上電初始,DMA默認(rèn)設(shè)置將存儲(chǔ)在NAND flash中第一頁(yè)的數(shù)據(jù)搬運(yùn)到內(nèi)部RAM中,然后設(shè)置PC到內(nèi)部RAM的開(kāi)始處的地址,開(kāi)始執(zhí)行啟動(dòng)代碼;在啟動(dòng)代碼中設(shè)置中斷向量、硬件配置等;將執(zhí)行代碼搬運(yùn)到外部SDRAM或DDR-RAM,留出啟動(dòng)代碼的位置;將啟動(dòng)代碼搬運(yùn)SDRAM或DDR-RAM首址;設(shè)置remap,將O地址重新映射到SDRAM或DDR-RAM首地址;設(shè)置PC指針,開(kāi)始執(zhí)行正式的執(zhí)行代碼。Bootloader引導(dǎo)主要任務(wù)就是對(duì)硬件設(shè)備進(jìn)行初始化,建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟、硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好環(huán)境。3.1inux內(nèi)核啟動(dòng)。Bootloader啟動(dòng)后,系統(tǒng)啟動(dòng)的控制權(quán)移父給kernel。Kernel啟動(dòng)主要包括:初始化內(nèi)核、初始化設(shè)備驅(qū)動(dòng)、啟動(dòng)內(nèi)核、掛載文件系統(tǒng)和啟動(dòng)用戶空間進(jìn)程。Kernel初始化是對(duì)系統(tǒng)各個(gè)硬件設(shè)備進(jìn)行配置工作。主要包括:創(chuàng)建異常向量表和初始化中斷處理函數(shù);初始化系統(tǒng)核心進(jìn)程調(diào)度器和時(shí)鐘中斷處理機(jī)制;初始化串口控制臺(tái);創(chuàng)建和初始化系統(tǒng),cache為各內(nèi)存調(diào)用機(jī)制提供緩存;初始化內(nèi)存管理,檢測(cè)內(nèi)存大小及被內(nèi)核占用的內(nèi)存情況;初始化系統(tǒng)的進(jìn)程間通信機(jī)制。設(shè)備初始化主要是加載設(shè)備驅(qū)動(dòng)。設(shè)備驅(qū)動(dòng)加載有兩種方式:靜態(tài)加載和動(dòng)態(tài)加載。靜態(tài)加載是將所有模塊的程序編譯到Iinux內(nèi)核中,設(shè)備驅(qū)動(dòng)在內(nèi)核啟動(dòng)中自動(dòng)加載。以靜態(tài)方式工加載的設(shè)備驅(qū)動(dòng)是無(wú)法卸載的。動(dòng)態(tài)加載是指驅(qū)動(dòng)作為模塊形式加載,設(shè)備驅(qū)動(dòng)可以在系統(tǒng)啟動(dòng)后任何時(shí)候通過(guò)命令加載或卸載。Kernel初始化及設(shè)備初始化完成后,會(huì)創(chuàng)建一個(gè)根設(shè)備,然后將根文件系統(tǒng)以只讀的方式掛載。根設(shè)備創(chuàng)建成功后,釋放未使用內(nèi)存并轉(zhuǎn)換到真正的根上去,同時(shí)運(yùn)行/sbin/init程序啟動(dòng)系統(tǒng)第一個(gè)進(jìn)程,此后系統(tǒng)啟動(dòng)的控制權(quán)移交給init進(jìn)程。4.1nit初始化系統(tǒng)服務(wù)。Init進(jìn)程首先進(jìn)行一系列的硬件初始化,然后通過(guò)命令行傳遞過(guò)來(lái)的參數(shù)掛載根文件系統(tǒng),最后init進(jìn)程會(huì)執(zhí)行用戶定義的init啟動(dòng)腳本。Init是所有Iinux系統(tǒng)進(jìn)程的父進(jìn)程,其進(jìn)程ID為1,它負(fù)責(zé)系統(tǒng)的初始和啟動(dòng),倉(cāng)Il建并運(yùn)行系統(tǒng)中的關(guān)鍵進(jìn)程,比如shell、login等,zygote進(jìn)程就是由它所創(chuàng)建。
[0005]如圖3和4所示,目前的嵌入式系統(tǒng)分區(qū)一般包括:U-Boot、Boot、Ramdisk、Recovery、System、Userdata等,分區(qū)的內(nèi)容僅包括對(duì)應(yīng)的映像原始數(shù)據(jù),無(wú)法對(duì)他們進(jìn)行安全校驗(yàn)。
[0006]綜合上述,在軟件方面,目前嵌入式系統(tǒng)或產(chǎn)品為存在很多入侵風(fēng)險(xiǎn)。嵌入式產(chǎn)品有數(shù)十種軟件體系結(jié)構(gòu)和操作系統(tǒng),而這些軟件體系結(jié)構(gòu)和操作系統(tǒng)的安全等級(jí)各小相同,用戶在與某個(gè)安全的嵌入式系統(tǒng)交互之前,必須經(jīng)過(guò)一個(gè)認(rèn)證過(guò)程來(lái)核實(shí)使用者身份。認(rèn)證方案可能包括BOOTLOADER可信引導(dǎo)、操作系統(tǒng)認(rèn)證(包括口令、生理特征(如指紋)或安全設(shè)置(如智能卡或密鑰等)等。
【發(fā)明內(nèi)容】
[0007]本發(fā)明為了解決目前嵌入式系統(tǒng)引導(dǎo)和啟動(dòng)的過(guò)程所產(chǎn)生的潛在安全問(wèn)題,提供了一套對(duì)嵌入式系統(tǒng)的啟動(dòng)過(guò)程進(jìn)行多層加固,防止對(duì)系統(tǒng)BOOTLOADER、操作系統(tǒng)內(nèi)核、文件系統(tǒng)數(shù)據(jù)或應(yīng)用程序數(shù)據(jù)等進(jìn)行惡意的劫持、篡改,以保護(hù)嵌入式設(shè)備的使用安全的基于安全硬件的全新嵌入式系統(tǒng)分區(qū)映像安全認(rèn)證和操作系統(tǒng)內(nèi)核可信引導(dǎo)方法。
[0008]本發(fā)明是技術(shù)方案:一種嵌入式分區(qū)映像安全認(rèn)證及內(nèi)核可信引導(dǎo)方法,基于Android系統(tǒng)的嵌入式設(shè)備平臺(tái),在系統(tǒng)上電、系統(tǒng)Bootloader引導(dǎo)及內(nèi)核加載啟動(dòng)的安全可信上采取系統(tǒng)分區(qū)和內(nèi)核驗(yàn)證相結(jié)合的方式對(duì)系統(tǒng)進(jìn)行安全加固。
[0009]優(yōu)選地,該方法對(duì)系統(tǒng)上電、Bootloader及內(nèi)核分區(qū)Layout及部分加載域等按照特定規(guī)則做了安全加固及重構(gòu)。
[0010]優(yōu)選地,該方法具體包括下述步驟:
[0011]I)實(shí)現(xiàn)系統(tǒng)上電及初始化階段,確保DMA/MMU/MPU/CACHE/DDR/JTAG系統(tǒng)存儲(chǔ)、處理器緩存及片上調(diào)試系統(tǒng)的物理隔離、系統(tǒng)訪問(wèn)權(quán)限控制,避免入侵者通過(guò)物理技術(shù)在此階段”旁路攻擊”,總線探測(cè),確保U-Boot分區(qū)不被惡意篡改;
[0012]2)實(shí)現(xiàn)U-Boot映像文件重新封裝,新的映像Layout定義了映像數(shù)據(jù)頭信息和數(shù)字簽名信息;
[0013]3)實(shí)現(xiàn)系統(tǒng)內(nèi)核分區(qū)重構(gòu),重構(gòu)后的內(nèi)核映像包括映像數(shù)據(jù)頭、映像原始數(shù)據(jù)、加密后的部分映像加載域數(shù)據(jù)及數(shù)字簽名;
[001