高通、猎户机型Android典型bootloader分析
生活随笔
收集整理的這篇文章主要介紹了
高通、猎户机型Android典型bootloader分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、bootloader是什么?
? ?? ? 簡(jiǎn)單地說(shuō),bootloader 就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
? ?? ? Android系統(tǒng)基于Linux,所以bootloader部分也是與傳統(tǒng)的嵌入式設(shè)備上運(yùn)行的Linux沒有什么區(qū)別。由于除Google外的大部分Android廠商都沒有提供bootloader的源代碼,所以分析手機(jī)設(shè)備的bootloader需要使用逆向工程的手段,當(dāng)然由于有了Google官方的開源bootloader代碼做參考,能讓分析工作輕松不少。本文中使用的分析工具為IDA 6.5,針對(duì)的手機(jī)設(shè)備為N9006,固件版本為N9006ZCUDMK2。
2、bootloader典型結(jié)構(gòu)
? ?? ? 這部分會(huì)以高通MSM8960為例子介紹下Bootloader的典型結(jié)構(gòu)。
? ?? ? 高通MSM8960中包含多個(gè)運(yùn)算單元,分別負(fù)責(zé)引導(dǎo)過(guò)程中的不同功能,sbl1的代碼負(fù)責(zé)加載sbl2,sbl2加載tz和sbl3,sbl3加載apppsbl,appsbl加載HLOS(基帶)。
?
圖1 SecureBoot 3.0 的Code Flow
?
圖2 MSM8960引導(dǎo)過(guò)程簡(jiǎn)化流程圖
3、Note3的bootloader結(jié)構(gòu)分析
國(guó)行版Note3(N9006)使用的CPU是MSM8974,它的bootloader結(jié)構(gòu)與典型的MSM8960差不多,最大的區(qū)別就是把sbl1,sbl2,sbl3整合進(jìn)了一個(gè)文件sbl1中,TrustZone和APPSBL都由sbl1進(jìn)行驗(yàn)證和加載,以下為幾個(gè)主要功能的加載代碼分析。
? ?? ?sbl1的功能是對(duì)硬件進(jìn)行初始化并加載其他模塊,需要加載的模塊信息按順序保存在sbl1中,對(duì)應(yīng)每個(gè)模塊的數(shù)據(jù)是一段大小為0x64字節(jié)的模塊信息數(shù)據(jù)內(nèi),sbl1中有一個(gè)循環(huán)負(fù)責(zé)驗(yàn)證和加載所有需要的其他模塊(tz,rpm,wdt,appsbl),加載代碼會(huì)根據(jù)模塊信息內(nèi)的數(shù)據(jù)調(diào)用不同的加載器加載和驗(yàn)證的代碼,具體代碼如下圖。
?
圖3 sbl1中循環(huán)加載全部模塊的代碼
?
圖4 sbl1中對(duì)待加載模塊進(jìn)行驗(yàn)證
?
圖5 TZ模塊信息數(shù)據(jù)
?
圖6 APPSBL模塊信息數(shù)據(jù)
? ?? ?固件包里的tz.mbn是加載在TrustZone中的模塊,模塊格式為elf,這個(gè)模塊中的代碼和系統(tǒng)其他模塊代碼運(yùn)行在互相隔離的區(qū)域內(nèi),權(quán)限也比其他模塊更高,三星KNOX的很多底層安全特性也是在這部分中實(shí)現(xiàn),關(guān)于TrustZone的更多資料可以參考arm官方的說(shuō)明。
? ?? ?固件包里的aboot.mbn就是APPSBL模塊,模塊格式為bin,文件最前面的0x28字節(jié)的頭部描述了bin的加載地址等信息,后面的數(shù)據(jù)就是實(shí)際加載到內(nèi)存中的映像,整個(gè)bootloader中這個(gè)模塊的代碼量最大(很大一部分是openssl的代碼),linux內(nèi)核的驗(yàn)證和加載(正常啟動(dòng)和Recovery模式),ODIN模式等等代碼都包含在這個(gè)模塊內(nèi)。
?
圖7 aboot.mbn文件頭
?
圖8 根據(jù)按鍵和共享內(nèi)存中的數(shù)據(jù)確定引導(dǎo)模式
?
圖9 三星特有的ODIN刷機(jī)模式代碼
4、Note3的bootloader中KNOX系統(tǒng)的底層代碼初步分析
? ?? ? Note3提供了一個(gè)企業(yè)安全套裝KNOX,這個(gè)系統(tǒng)包含了底層的Customizable Secure Boot和TrustZone-based Integrity Measurement Architecture(TIMA,目前為2.0版本),系統(tǒng)層的SecurityEnhancements for Android(SE-Android)和應(yīng)用層的Samsung KNOX Container,Encrypted File System(EFS),Virtual Private Network(VPN),其中Customizable Secure Boot和TIMA的代碼包含在Bootloader的aboot.mbn,tz.mbn,NON-HLOS.bin中,功能為保障加載的內(nèi)核在加載時(shí)和運(yùn)行期的完整性。
? ?? ? 通過(guò)前面的分析,我們已經(jīng)知道了tz.mbn和aboot.mbn在加載時(shí)已經(jīng)由sbl1驗(yàn)證過(guò)完整性,tz.mbn加載后會(huì)在CPU的安全環(huán)境下運(yùn)行,從高權(quán)限的隔離區(qū)域內(nèi)對(duì)系統(tǒng)的完整性進(jìn)行監(jiān)控,而負(fù)責(zé)加載android內(nèi)核的aboot.mbn中包含對(duì)內(nèi)核的完整性檢測(cè),三星在bootloader每一部分的結(jié)尾都會(huì)加上自己的簽名,加載前會(huì)對(duì)簽名進(jìn)行驗(yàn)證,以保障系統(tǒng)未被修改過(guò)。
?
圖10??tz.mbn中初始化TIMA系統(tǒng)的的代碼
?
圖11 aboot.mbn中對(duì)內(nèi)核是否使用SEANDROID進(jìn)行驗(yàn)證
? ?? ?當(dāng)任何一部分檢測(cè)代碼發(fā)現(xiàn)系統(tǒng)異常狀況后,就會(huì)調(diào)用SMC指令通知TrustZone中運(yùn)行的TIMA系統(tǒng)設(shè)置fuse為系統(tǒng)完整性被破壞,此fuse數(shù)據(jù)一旦被設(shè)置后沒有辦法被重置,系統(tǒng)也無(wú)法再次進(jìn)入KNOX系統(tǒng)。
?
圖12 加載內(nèi)核前對(duì)內(nèi)核簽名和TIMA的測(cè)點(diǎn)進(jìn)行驗(yàn)證
?
圖13 系統(tǒng)完整性檢測(cè)失敗后設(shè)置fuse值
? ?? ? 當(dāng)以上所有檢測(cè)都通過(guò)后,bootloader會(huì)把內(nèi)核復(fù)制到指定的內(nèi)存地址并跳到內(nèi)核的入口繼續(xù)執(zhí)行,到此,就進(jìn)入了系統(tǒng)內(nèi)核代碼的范疇,bootloader的使命也就完成了,跳到linux內(nèi)核入口的代碼見圖14。
?
圖14 內(nèi)核加載和校驗(yàn)完成后跳到內(nèi)核的入口點(diǎn)繼續(xù)執(zhí)行
? ?? ? 另外,除了這兩個(gè)模塊外Modem固件相關(guān)的NON-HLOS.bin中也有大量TIMA系統(tǒng)相關(guān)的文件,由于TIMA系統(tǒng)包含大量硬件相關(guān)代碼(使用三星獵戶座CPU的N900中TIMA系統(tǒng)的實(shí)現(xiàn)與高通CPU的N9006差別很大),如果需要進(jìn)行進(jìn)一步的分析TIMA在modem中的行為,需要對(duì)TrustZone,modem工作方式等有更多了解。
?
圖15 NON-HLOS.bin中包含的大量TIMA相關(guān)文件 (全文來(lái)自網(wǎng)絡(luò),有刪改)
? ?? ? 簡(jiǎn)單地說(shuō),bootloader 就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
? ?? ? Android系統(tǒng)基于Linux,所以bootloader部分也是與傳統(tǒng)的嵌入式設(shè)備上運(yùn)行的Linux沒有什么區(qū)別。由于除Google外的大部分Android廠商都沒有提供bootloader的源代碼,所以分析手機(jī)設(shè)備的bootloader需要使用逆向工程的手段,當(dāng)然由于有了Google官方的開源bootloader代碼做參考,能讓分析工作輕松不少。本文中使用的分析工具為IDA 6.5,針對(duì)的手機(jī)設(shè)備為N9006,固件版本為N9006ZCUDMK2。
2、bootloader典型結(jié)構(gòu)
? ?? ? 這部分會(huì)以高通MSM8960為例子介紹下Bootloader的典型結(jié)構(gòu)。
? ?? ? 高通MSM8960中包含多個(gè)運(yùn)算單元,分別負(fù)責(zé)引導(dǎo)過(guò)程中的不同功能,sbl1的代碼負(fù)責(zé)加載sbl2,sbl2加載tz和sbl3,sbl3加載apppsbl,appsbl加載HLOS(基帶)。
?
圖1 SecureBoot 3.0 的Code Flow
?
圖2 MSM8960引導(dǎo)過(guò)程簡(jiǎn)化流程圖
3、Note3的bootloader結(jié)構(gòu)分析
國(guó)行版Note3(N9006)使用的CPU是MSM8974,它的bootloader結(jié)構(gòu)與典型的MSM8960差不多,最大的區(qū)別就是把sbl1,sbl2,sbl3整合進(jìn)了一個(gè)文件sbl1中,TrustZone和APPSBL都由sbl1進(jìn)行驗(yàn)證和加載,以下為幾個(gè)主要功能的加載代碼分析。
? ?? ?sbl1的功能是對(duì)硬件進(jìn)行初始化并加載其他模塊,需要加載的模塊信息按順序保存在sbl1中,對(duì)應(yīng)每個(gè)模塊的數(shù)據(jù)是一段大小為0x64字節(jié)的模塊信息數(shù)據(jù)內(nèi),sbl1中有一個(gè)循環(huán)負(fù)責(zé)驗(yàn)證和加載所有需要的其他模塊(tz,rpm,wdt,appsbl),加載代碼會(huì)根據(jù)模塊信息內(nèi)的數(shù)據(jù)調(diào)用不同的加載器加載和驗(yàn)證的代碼,具體代碼如下圖。
?
圖3 sbl1中循環(huán)加載全部模塊的代碼
?
圖4 sbl1中對(duì)待加載模塊進(jìn)行驗(yàn)證
?
圖5 TZ模塊信息數(shù)據(jù)
?
圖6 APPSBL模塊信息數(shù)據(jù)
? ?? ?固件包里的tz.mbn是加載在TrustZone中的模塊,模塊格式為elf,這個(gè)模塊中的代碼和系統(tǒng)其他模塊代碼運(yùn)行在互相隔離的區(qū)域內(nèi),權(quán)限也比其他模塊更高,三星KNOX的很多底層安全特性也是在這部分中實(shí)現(xiàn),關(guān)于TrustZone的更多資料可以參考arm官方的說(shuō)明。
? ?? ?固件包里的aboot.mbn就是APPSBL模塊,模塊格式為bin,文件最前面的0x28字節(jié)的頭部描述了bin的加載地址等信息,后面的數(shù)據(jù)就是實(shí)際加載到內(nèi)存中的映像,整個(gè)bootloader中這個(gè)模塊的代碼量最大(很大一部分是openssl的代碼),linux內(nèi)核的驗(yàn)證和加載(正常啟動(dòng)和Recovery模式),ODIN模式等等代碼都包含在這個(gè)模塊內(nèi)。
?
圖7 aboot.mbn文件頭
?
圖8 根據(jù)按鍵和共享內(nèi)存中的數(shù)據(jù)確定引導(dǎo)模式
?
圖9 三星特有的ODIN刷機(jī)模式代碼
4、Note3的bootloader中KNOX系統(tǒng)的底層代碼初步分析
? ?? ? Note3提供了一個(gè)企業(yè)安全套裝KNOX,這個(gè)系統(tǒng)包含了底層的Customizable Secure Boot和TrustZone-based Integrity Measurement Architecture(TIMA,目前為2.0版本),系統(tǒng)層的SecurityEnhancements for Android(SE-Android)和應(yīng)用層的Samsung KNOX Container,Encrypted File System(EFS),Virtual Private Network(VPN),其中Customizable Secure Boot和TIMA的代碼包含在Bootloader的aboot.mbn,tz.mbn,NON-HLOS.bin中,功能為保障加載的內(nèi)核在加載時(shí)和運(yùn)行期的完整性。
? ?? ? 通過(guò)前面的分析,我們已經(jīng)知道了tz.mbn和aboot.mbn在加載時(shí)已經(jīng)由sbl1驗(yàn)證過(guò)完整性,tz.mbn加載后會(huì)在CPU的安全環(huán)境下運(yùn)行,從高權(quán)限的隔離區(qū)域內(nèi)對(duì)系統(tǒng)的完整性進(jìn)行監(jiān)控,而負(fù)責(zé)加載android內(nèi)核的aboot.mbn中包含對(duì)內(nèi)核的完整性檢測(cè),三星在bootloader每一部分的結(jié)尾都會(huì)加上自己的簽名,加載前會(huì)對(duì)簽名進(jìn)行驗(yàn)證,以保障系統(tǒng)未被修改過(guò)。
?
圖10??tz.mbn中初始化TIMA系統(tǒng)的的代碼
?
圖11 aboot.mbn中對(duì)內(nèi)核是否使用SEANDROID進(jìn)行驗(yàn)證
? ?? ?當(dāng)任何一部分檢測(cè)代碼發(fā)現(xiàn)系統(tǒng)異常狀況后,就會(huì)調(diào)用SMC指令通知TrustZone中運(yùn)行的TIMA系統(tǒng)設(shè)置fuse為系統(tǒng)完整性被破壞,此fuse數(shù)據(jù)一旦被設(shè)置后沒有辦法被重置,系統(tǒng)也無(wú)法再次進(jìn)入KNOX系統(tǒng)。
?
圖12 加載內(nèi)核前對(duì)內(nèi)核簽名和TIMA的測(cè)點(diǎn)進(jìn)行驗(yàn)證
?
圖13 系統(tǒng)完整性檢測(cè)失敗后設(shè)置fuse值
? ?? ? 當(dāng)以上所有檢測(cè)都通過(guò)后,bootloader會(huì)把內(nèi)核復(fù)制到指定的內(nèi)存地址并跳到內(nèi)核的入口繼續(xù)執(zhí)行,到此,就進(jìn)入了系統(tǒng)內(nèi)核代碼的范疇,bootloader的使命也就完成了,跳到linux內(nèi)核入口的代碼見圖14。
?
圖14 內(nèi)核加載和校驗(yàn)完成后跳到內(nèi)核的入口點(diǎn)繼續(xù)執(zhí)行
? ?? ? 另外,除了這兩個(gè)模塊外Modem固件相關(guān)的NON-HLOS.bin中也有大量TIMA系統(tǒng)相關(guān)的文件,由于TIMA系統(tǒng)包含大量硬件相關(guān)代碼(使用三星獵戶座CPU的N900中TIMA系統(tǒng)的實(shí)現(xiàn)與高通CPU的N9006差別很大),如果需要進(jìn)行進(jìn)一步的分析TIMA在modem中的行為,需要對(duì)TrustZone,modem工作方式等有更多了解。
?
圖15 NON-HLOS.bin中包含的大量TIMA相關(guān)文件 (全文來(lái)自網(wǎng)絡(luò),有刪改)
總結(jié)
以上是生活随笔為你收集整理的高通、猎户机型Android典型bootloader分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux内核中的GPIO系统之(3):
- 下一篇: eclipse中LogCat有时不显示信