WF曲速未來(lái)消息:攻擊ARM的TrustZone區(qū)塊鏈
WF曲速未來(lái)表示:本文章具技術(shù)性地解決了暴露給攻擊者的攻擊面和熱點(diǎn),以及在TrustZone中可用的不同權(quán)限級(jí)別實(shí)現(xiàn)代碼執(zhí)行后可以執(zhí)行的操作。
本文章具技術(shù)性地解決了暴露給攻擊者的攻擊面和熱點(diǎn),以及在TrustZone中可用的不同權(quán)限級(jí)別實(shí)現(xiàn)代碼執(zhí)行后可以執(zhí)行的操作。
TrustZone攻擊面
確定目標(biāo)攻擊面始終是漏洞研究過(guò)程的第一步。TrustZone的攻擊區(qū)域包括三點(diǎn):
1)直接發(fā)送到監(jiān)視器的消息處理程序。
2)在TrustZone中運(yùn)行的第三方應(yīng)用程序(trustlet)。
3)安全啟動(dòng)組件,它可以允許在加載TrustZone之前執(zhí)行代碼,從而能夠破壞TrustZone本身。
跟隨用戶輸入
為了執(zhí)行漏洞搜索,必須確定提供給攻擊者的攻擊面,即可以使用哪些參數(shù)來(lái)影響程序。要做到這一點(diǎn),必須遵循從Normal World傳遞到Secure World的參數(shù),以確定如何調(diào)用Secure World中可用的函數(shù)。
瀏覽開(kāi)源通信驅(qū)動(dòng)程序
要弄清楚參數(shù)如何從Normal World傳遞到Secure World,即如何在SMC(Secure Monitor Call)中傳遞參數(shù),可以瀏覽Normal World開(kāi)源驅(qū)動(dòng)程序。如驅(qū)動(dòng)程序源代碼中所述,執(zhí)行SMC指令(名為smc)的函數(shù)由稱為scm_call的函數(shù)調(diào)用(其中scm代表安全通道管理器)。當(dāng)需要將信息從普通世界傳遞到安全世界時(shí)使用它,通過(guò)填寫(xiě)以下結(jié)構(gòu)來(lái)執(zhí)行此操作:
由于scm_response結(jié)構(gòu),我們收到了TrustZone內(nèi)核的答案 :
下面的列表顯示了實(shí)際執(zhí)行SMC操作碼的最后一個(gè)函數(shù):
在此清單中,r1指向內(nèi)核堆棧地址,r2指向分配的scm_command結(jié)構(gòu)的物理地址。r0設(shè)置為1,表示該scm是正常的。但是,對(duì)于需要較少數(shù)據(jù)的命令,或者當(dāng)不需要結(jié)構(gòu)時(shí),存在另一種形式的scm_call。
另一種形式的SCM稱為scm_call_ [1-4],其中數(shù)字是傳遞給監(jiān)視器的參數(shù)數(shù)量。這些函數(shù)用于發(fā)出具有給定參數(shù),服務(wù)和命令I(lǐng)D的SMC。使用宏SCM_ATOMIC將服務(wù)ID,命令I(lǐng)D和參數(shù)號(hào)放在r0中。由于r0不再等于1,它向TrustZone內(nèi)核指示以下SCM是一個(gè)原子調(diào)用,其參數(shù)編號(hào)在r0中編碼,參數(shù)本身放在r2到r5中。
攻擊者的第一個(gè)攻擊面:安全監(jiān)視器(基于Qualcomm的設(shè)備)
現(xiàn)在已經(jīng)確定了正常世界如何與安全世界對(duì)話(感謝監(jiān)視器,它充當(dāng)了世界之間的橋梁),我們可以搜索功能及其服務(wù)ID和命令I(lǐng)D之間的鏈接。
為了獲得Normal World所請(qǐng)求的功能,填充有結(jié)構(gòu)的陣列靜態(tài)地放置在監(jiān)視器中。此靜態(tài)數(shù)組對(duì)應(yīng)于攻擊者可用的攻擊面。結(jié)構(gòu)的格式如下:
1.服務(wù)ID和命令I(lǐng)D的串聯(lián);
2.指向SCM函數(shù)名稱字符串的指針;
3.一個(gè)未知的整數(shù);
4.指向處理功能的指針;
5.參數(shù)編號(hào);
6.數(shù)組由每個(gè)參數(shù)的大小填充,一個(gè)整數(shù)由參數(shù)組成
Qualcomm的可信執(zhí)行環(huán)境實(shí)施中的漏洞
這個(gè)錯(cuò)誤和監(jiān)視器處理消息的反向是由Gal Beniamini完成的。這個(gè)在三星S5上重現(xiàn)的錯(cuò)誤很有趣,因?yàn)樗梢栽谔幚砥鞯淖钐貦?quán)模式下執(zhí)行任意代碼:監(jiān)控模式(EL3)。
瀏覽通過(guò)SCM可用的所有功能列表,并逐一分析它們,導(dǎo)致發(fā)現(xiàn)tzbsp_es_is_activated函數(shù)中的新漏洞。此漏洞允許將零DWORD寫(xiě)入攻擊者(在r0中)給出的任意地址,包括TrustZone監(jiān)視器和內(nèi)核。
使用以下修補(bǔ)程序修復(fù)了此漏洞
啟示
此漏洞允許攻擊者在監(jiān)視器(EL3)中的運(yùn)行時(shí)獲得任意代碼執(zhí)行。這可以用于后門(mén)普通世界以及安全世界,但也可以用于檢測(cè)或?qū)⒄{(diào)試器放入安全世界(在監(jiān)視器或安全操作系統(tǒng)級(jí)別),以便在TrustZone操作系統(tǒng)中找到新的漏洞(TEE-OS)。
第三方應(yīng)用程序中的漏洞(CVE-2018-14491,基于Qualcomm的設(shè)備)
可以在/ system / vendor / firmware或/ firmware / image下檢索基于Qualcomm的設(shè)備可用的Trustlet,并將其拆分為不同的文件,即trustlet_name.b00,trustlet_name.b01...和trustlet_name.mdt。Qualcomm的TrustZone實(shí)現(xiàn)使操作系統(tǒng)能夠在TrustZone中加載二進(jìn)制文件,以擴(kuò)展安全執(zhí)行環(huán)境提供的功能。這些二進(jìn)制文件稱為trustlet。Gal Beniamini完全顛倒了文件系統(tǒng)中可用的信任片的格式,并開(kāi)發(fā)了一個(gè)腳本來(lái)重建有效的ELF可以加載到IDA。
但是,一旦完成了trustlet文件格式的反轉(zhuǎn),問(wèn)題仍然存在:
1.普通世界如何向安全世界發(fā)出請(qǐng)求加載信任小組的請(qǐng)求?
2.普通世界如何在運(yùn)行時(shí)與它通信?
這些任務(wù)由qseecom驅(qū)動(dòng)程序執(zhí)行,該驅(qū)動(dòng)程序提供API以執(zhí)行高級(jí)任務(wù),依賴于安全通道管理器(特別是scm_call函數(shù))提供的原語(yǔ) 。
加載信任時(shí)所需的所有功能都可通過(guò)此內(nèi)核模塊獲得,該內(nèi)核模塊又使用適當(dāng)?shù)恼?qǐng)求命令I(lǐng)D將正確的結(jié)構(gòu)填充到Secure World中請(qǐng)求的功能。然后,Normal World可以使用qseecom_load_app函數(shù)加載trustlet,并使用qseecom_send_cmd向其發(fā)送數(shù)據(jù)。
一旦加載到Secure World,內(nèi)核就會(huì)為trustlet分配一個(gè)ID并調(diào)用其入口函數(shù)。此入口函數(shù)將trustlet注冊(cè)到TrustZone內(nèi)核,并提供一個(gè)處理程序例程,該例程在Normal World調(diào)用trustlet的功能時(shí)觸發(fā)。
接收消息的處理函數(shù)提供不同的函數(shù),并且必須始終以命令otp_init開(kāi)頭,以初始化trustlet的內(nèi)部狀態(tài),而不是陷入瑣碎的錯(cuò)誤案例處理。查看可用的不同函數(shù),然后注意到它們都受堆棧cookie保護(hù),除了一個(gè)名為otp_resync_account的函數(shù)。通過(guò)讀取此函數(shù)中的第一行匯編,還注意到一個(gè)BLE指令,它是一個(gè)帶符號(hào)的比較,(這對(duì)應(yīng)于比較> 384在hexrays視圖中)。這是天賜之物,因?yàn)槲覀兊妮斎刖彌_區(qū)不能包含空字節(jié),因此這意味著對(duì)于無(wú)符號(hào)數(shù)字,這種比較總是正輸出。但是,由于這個(gè)有符號(hào)的比較,我們可以在緩沖區(qū)中傳遞一個(gè)負(fù)值,如0xFFFFFFFF,然后跟隨調(diào)用函數(shù)sub_68F8的分支(變量v3 在函數(shù)開(kāi)頭被初始化為0)。
這個(gè)函數(shù)特別有趣,因?yàn)樗幸粋€(gè)memcpy漏洞,其長(zhǎng)度和src參數(shù)直接由來(lái)自Normal World提供的緩沖區(qū)的攻擊者控制,我們不需要任何內(nèi)存泄漏,因?yàn)檫@個(gè)函數(shù)也沒(méi)有堆棧cookie!
另一個(gè)幸運(yùn)的突破是這個(gè)功能相同的memcpy(),特別是因?yàn)閺?fù)制的數(shù)據(jù)及其長(zhǎng)度由用戶控制。是的,這意味著在沒(méi)有cookie的函數(shù)中堆棧溢出:
啟示
WF曲速區(qū)表示此漏洞使得在EL0 Secure World(用戶安全世界)中獲得任意代碼執(zhí)行成為可能。這特別有趣,因?yàn)樗峁┝藢?duì)TrustZone內(nèi)核執(zhí)行系統(tǒng)調(diào)用的機(jī)會(huì),從而訪問(wèn)新的攻擊面以提升其在TrustZone內(nèi)核中的權(quán)限。此外,它還提供對(duì)TrustZone操作系統(tǒng)功能的訪問(wèn),例如提供對(duì)安全文件系統(tǒng)(SFS)的訪問(wèn)的開(kāi)放和讀取系統(tǒng)調(diào)用。Secure-filesystem是一個(gè)可用于永久存儲(chǔ)的加密文件系統(tǒng)。它使用僅來(lái)自Secure World的特殊硬件密鑰加密然后,確保來(lái)自可能已損壞的正常世界的數(shù)據(jù)的機(jī)密性。
結(jié)論
區(qū)塊鏈安全實(shí)驗(yàn)室WF曲速未來(lái)表示:討論了為普通世界中的用戶提供的兩個(gè)攻擊面,并詳細(xì)說(shuō)明了兩個(gè)漏洞:監(jiān)視器中的一個(gè)漏洞,其利用允許在CPU的最高特權(quán)異常級(jí)別中獲取任意代碼執(zhí)行。- 在trustlet中的另一個(gè),用于在用戶模式(EL0)Secure World中獲得任意代碼執(zhí)行。WF曲速未來(lái)再次提醒最后一個(gè)漏洞可用于審核在TrustZone中運(yùn)行的安全OS的安全性,并為攻擊者啟用新的攻擊面。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會(huì)明確標(biāo)注作者和來(lái)源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請(qǐng)轉(zhuǎn)載時(shí)務(wù)必注明文章作者和"來(lái)源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為T(mén)MT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會(huì)經(jīng)TMT觀察網(wǎng)編輯修改或補(bǔ)充。