文/管樂(lè)
利用TrustZone保護(hù)可信程序免受惡意操作系統(tǒng)攻擊
文/管樂(lè)
IoT(物聯(lián)網(wǎng))設(shè)備正在瘋狂滲透人們的生活。從IP攝像頭,外科手術(shù)機(jī)器人, 語(yǔ)音智能輔助系統(tǒng),到邊緣計(jì)算(如智能路由器),人們的生活工作環(huán)境已經(jīng)由上億個(gè)IoT設(shè)備互聯(lián)。不如此,這些設(shè)備需要有足夠的智能來(lái)協(xié)助我們來(lái)處理事務(wù),比如,Amazon的Echo語(yǔ)音智能系統(tǒng)可以學(xué)習(xí)用戶的習(xí)慣,從而制定個(gè)性化的語(yǔ)音服務(wù)。設(shè)備生產(chǎn)商為了快速進(jìn)入市場(chǎng),通常會(huì)在已有的成熟平臺(tái)搭建自己的系統(tǒng),很顯然,ARM加Linux的組合統(tǒng)治了目前智能IoT市場(chǎng)。
然而,Linux內(nèi)核作為統(tǒng)治互聯(lián)網(wǎng)的開(kāi)源軟件,無(wú)時(shí)不刻遭受著黑客的攻擊,2017年短短幾個(gè)月(截至7月8日),已有346個(gè)安全漏洞被曝出【1】。操作系統(tǒng)內(nèi)核作為計(jì)算機(jī)的大管家,通常被認(rèn)為是系統(tǒng)的可信計(jì)算基(TCB)。顯然,惡意的Linux內(nèi)核給運(yùn)行在其上的敏感用戶程序帶來(lái)嚴(yán)重的威脅。如何在操作系統(tǒng)不可信的情況下,保護(hù)敏感應(yīng)用程序的機(jī)密性、隔離性和可信性是非常有挑戰(zhàn)但卻很重要的研究課題。
在x86平臺(tái),已有基于虛擬化的方案來(lái)解決這一問(wèn)題【2,3】。其總體思想是利用影子頁(yè)表來(lái)給應(yīng)用程序兩個(gè)視圖。如圖1所示,在用戶態(tài),進(jìn)程可以正常訪問(wèn)它的數(shù)據(jù);但是一旦進(jìn)入內(nèi)核,如果處理器要訪問(wèn)用戶數(shù)據(jù),該數(shù)據(jù)對(duì)應(yīng)的頁(yè)會(huì)被hypervisor透明的加密。
圖1 基于虛擬化的解決方案
對(duì)基于ARM的IoT平臺(tái),這一思路卻行不通。其原因有以下三點(diǎn):第一,ARM的虛擬化硬件擴(kuò)展直到2010年才發(fā)布【4】,因此很多現(xiàn)有ARM設(shè)備不支持該擴(kuò)展;第二,虛擬機(jī)不能提供native的性能,這對(duì)于本來(lái)就資源受限的ARM IoT移動(dòng)設(shè)備,無(wú)疑是很難接受的(當(dāng)然,ARM的硬件虛擬化技術(shù)在服務(wù)器市場(chǎng)仍然被廣泛使用)【5】;第三,這類方案需要依賴hypervisor,然而,實(shí)現(xiàn)一個(gè)hypervisor本身需要相當(dāng)大的TCB, 近年來(lái)hypervisor的安全性已經(jīng)受到嚴(yán)峻的挑戰(zhàn)【6】。
相比硬件虛擬化擴(kuò)展,TrustZone安全擴(kuò)展【7】已經(jīng)得到廣泛應(yīng)用,自從在ARMv6上第一次被引入,TrustZone已被部署在其后絕大多數(shù)應(yīng)用處理器上(比如,手機(jī)上廣泛使用的cotex-a系列)上。簡(jiǎn)單來(lái)講,具有TrustZone安全擴(kuò)展的處理器,有兩個(gè)邏輯core,它們共用一套處理器運(yùn)算資源。兩個(gè)core分別運(yùn)行在安全世界和普通世界中,它們分時(shí)復(fù)用處理器。每個(gè)core有自己獨(dú)立的安全運(yùn)行級(jí)和系統(tǒng)控制寄存器、內(nèi)存管理單元(MMU)等,因此,他們可以獨(dú)立運(yùn)行自己的操作系統(tǒng)。兩個(gè)core的不同,體現(xiàn)在對(duì)系統(tǒng)資源的訪問(wèn)上,對(duì)應(yīng)兩個(gè)邏輯core,系統(tǒng)的硬件資源被劃分為安全和非安全的。運(yùn)行在安全世界的core,可以訪問(wèn)所有的硬件資源;而運(yùn)行在普通世界的core,則只能訪問(wèn)非安全的資源。這些訪問(wèn)控制的配置,儲(chǔ)存在只有安全世界才能訪問(wèn)的寄存器中。一般來(lái)講,普通世界的core運(yùn)行commodity的操作系統(tǒng),比如Linux;安全世界的core運(yùn)行輕量級(jí)的可信操作系統(tǒng),從而提供一個(gè)可信運(yùn)行環(huán)境(TEE)。ARM的這種架構(gòu), 被Android、iOS等移動(dòng)操作系統(tǒng)廣泛利用。比如,在指紋識(shí)別技術(shù)中,為了保護(hù)用戶指紋的原始信息,移動(dòng)操作系統(tǒng)沒(méi)有權(quán)限獲取指紋識(shí)別器的數(shù)據(jù),相反,在安全世界,TEE里的服務(wù)進(jìn)程進(jìn)行指紋采集和比對(duì)等工作,而僅僅只把結(jié)果傳送給普通世界的移動(dòng)操作系統(tǒng)。
已有的基于TrustZone的安全技術(shù),其安全服務(wù)的API和普通操作系統(tǒng)完全不同,并且相對(duì)獨(dú)立,甚至不能和普通世界交互,僅構(gòu)成一個(gè)自包含的程序邏輯(Pieces of Application Logic, PAL) 。TrustShadow則首次利用TrustZone,來(lái)安全的運(yùn)行未更改的應(yīng)用程序。一方面,TrustShadow支持已有的代碼;另一方面,支持TrustZone的設(shè)備非常廣泛。因此,TrustShadow可以立即部署在現(xiàn)實(shí)世界,并保護(hù)已有的、不需要修改的代碼。
TrustShadow的基本思想是,可信的進(jìn)程仍然由普通世界的Linux內(nèi)核來(lái)創(chuàng)建和管理,但是,其運(yùn)行必須在安全世界中。顯然,可信進(jìn)程所使用的物理內(nèi)存必須是安全資源,這樣可以防止Linux內(nèi)核對(duì)其進(jìn)行訪問(wèn)??尚胚M(jìn)程在安全世界的運(yùn)行環(huán)境,比如頁(yè)表的創(chuàng)建、系統(tǒng)服務(wù)由安全世界的一個(gè)輕量級(jí)運(yùn)行時(shí)來(lái)維護(hù)。為了減小其TCB,安全運(yùn)行時(shí)并不直接參與這些服務(wù),而是把他們轉(zhuǎn)發(fā)到普通世界的Linux內(nèi)核,然后,驗(yàn)證其行為是否可信。顯然,驗(yàn)證一個(gè)行為正確性的復(fù)雜性遠(yuǎn)遠(yuǎn)低于實(shí)現(xiàn)它,因此,安全運(yùn)行時(shí)可以保持很小的TCB。通過(guò)這些驗(yàn)證機(jī)制,我們確保可信進(jìn)程的以下安全特性:
1.在運(yùn)行過(guò)程中,可信進(jìn)程和普通操作系統(tǒng)隔離,普通操作系統(tǒng)不能訪問(wèn)可信進(jìn)程的數(shù)據(jù)和代碼;
2.載入階段,保證可信進(jìn)程的代碼的完整性;
3.驗(yàn)證系統(tǒng)調(diào)用的返回值,來(lái)抵抗Iago攻擊【8】;
4.加密文件操作,使得寫入磁盤的數(shù)據(jù)是密文,防止不可信操作系統(tǒng)的訪問(wèn)。
圖2展示了TrustShadow如何通過(guò)缺頁(yè)處理(page fault handler)來(lái)保證可信進(jìn)程地址空間的隔離,以及確保代碼的完整性。其他技術(shù)細(xì)節(jié),請(qǐng)參考MobiSys 2017的論文《TrustShadow:Secure Execution of Unmodified Applications with ARM TrustZone》。
圖2 代碼段缺頁(yè)處理
如圖2所示,當(dāng)進(jìn)程由于訪問(wèn)代碼而發(fā)生缺頁(yè),安全運(yùn)行時(shí)把該異常轉(zhuǎn)發(fā)給普通世界的Linux內(nèi)核,Linux找到對(duì)應(yīng)的文件緩存頁(yè)N-page,安裝頁(yè)表,同時(shí)給可信進(jìn)程分配一個(gè)安全的物理頁(yè)S-page。安全運(yùn)行時(shí)接管后,首先驗(yàn)證S-page是否真的安全資源,其次驗(yàn)證S-page是否和別的物理內(nèi)存存在doublemapping,只有在安全驗(yàn)證都通過(guò)以后,安全運(yùn)行時(shí)才安裝可信的頁(yè)表,并把N-page的代碼復(fù)制到S-page。最后,使用儲(chǔ)存在安全世界的元數(shù)據(jù)來(lái)驗(yàn)證該代碼頁(yè)是否經(jīng)過(guò)篡改,如果沒(méi)有,則返回可信進(jìn)程繼續(xù)執(zhí)行。至此,普通Linux不能對(duì)改代碼頁(yè)進(jìn)行任何修改。
當(dāng)然,把進(jìn)程運(yùn)行在安全世界,如果有漏洞,則可能被攻擊者利用,反過(guò)來(lái)攻擊普通世界的Linux內(nèi)核,因?yàn)榘踩澜绲臋?quán)限大于普通世界。在TrustShadow的設(shè)計(jì)中,我們利用以下幾點(diǎn)來(lái)防止這一隱患:第一,TrustShadow支持未經(jīng)修改的程序,并不意味著所有程序都可以在安全世界運(yùn)行。我們需要對(duì)可信進(jìn)程進(jìn)行嚴(yán)格審查,通過(guò)審查的程序,需要綁定一個(gè)簽名的manifest,安全運(yùn)行時(shí)檢查該manifest的有效性來(lái)判斷是否允許其在安全世界運(yùn)行;第二,由于可信進(jìn)程運(yùn)行在用戶空間,即使其有漏洞,也需要進(jìn)一步exploit安全運(yùn)行時(shí),才能構(gòu)成有效攻擊;第三,安全運(yùn)行時(shí)進(jìn)行了極簡(jiǎn)的設(shè)計(jì),其對(duì)可信進(jìn)程暴露的接口很少(僅僅轉(zhuǎn)發(fā)異常和檢查系統(tǒng)服務(wù)返回值),并且5000+的代碼量也使得形式化驗(yàn)證成為可能。
我們?cè)贜XP的i.MX6q開(kāi)發(fā)版上實(shí)現(xiàn)了以上設(shè)計(jì),并成功運(yùn)行了50多個(gè)Linux的核心utility,以及Apache、Nginx等大型程序。
【1】 CVEdetails.com. Linux: Vulnerability statistics. https://www.cvedetails.com/product/47/Linux-Linux-Kernel.html?vendor_id=33
【2】 Chen, Xiaoxin, et al. “Overshadow: a virtualization-based approach to retrofitting protection in commodity operating systems.” ACM SIGARCH Computer Architecture News. Vol. 36. No. 1. ACM, 2008.
【3】 Hofmann, Owen S., et al. “Inktag: Secure applications on an untrusted operating system.” ACM SIGARCH Computer Architecture News. Vol. 41. No. 1.ACM, 2013.
【4】 ARM Architecture Group. Virtualization Extensions Architecture Specification, 2010. https://www:arm:com/products/processors/technologies/virtualization-extensions:php.
【5】 Felix Baum. Why you don‘t necessarily need a hypervisor, 2014.http://embedded-computing:com/guest-blogs/why-you-dont-necessarily-need-ahypervisor/.
【6】 CVEdetails.com. Vmware: Vulnerability statistics. http://www:cvedetails:com/vendor/252/Vmware:html.
【7】 ARM Ltd. Security technology building a secure system using trustzone technology (white paper). 2009.
【8】 Checkoway, Stephen, and Hovav Shacham. Iago attacks: Why the system call api is a bad untrusted rpc interface. Vol. 41. No. 1. ACM, 2013.
(責(zé)編:楊潔)
為美國(guó)賓州州立大學(xué))