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