操作系統(tǒng)/虛擬化安全知識域:保護環(huán)以及低端設備與物聯(lián)網(wǎng)
保護環(huán)
Multics引入的最具革命性的想法之一是保護環(huán)的概念——一種特權(quán)的分層,其中內(nèi)環(huán)(環(huán)0)是最有特權(quán)的,并且外環(huán)的特權(quán)最低[41]。因此,不受信任的用戶進程在外環(huán)中執(zhí)行,而直接與硬件交互的受信任和特權(quán)內(nèi)核在環(huán)0中執(zhí)行,其他環(huán)可用于或多或少特權(quán)的系統(tǒng)進程。
保護環(huán)通常采用硬件支持,這是當今大多數(shù)通用處理器提供的功能,盡管保護環(huán)的數(shù)量可能有所不同。例如,霍尼韋爾6180支持多達八個環(huán),英特爾的x86四個,ARMv7三個(加上TrustZone的額外一個)和PowerPC兩個。但是,正如我們將看到的,故事變得有點混亂,因為一些現(xiàn)代處理器也引入了更多不同的處理器模式。現(xiàn)在,我們只是觀察到大多數(shù)常規(guī)操作系統(tǒng)只使用兩個環(huán):一個用于操作系統(tǒng),一個用于用戶進程。
每當權(quán)限較低的代碼需要需要更多權(quán)限的函數(shù)時,它就會“調(diào)用”下環(huán)以請求將此函數(shù)作為服務執(zhí)行。因此,只有受信任的特權(quán)代碼才能執(zhí)行最敏感的指令或操作最敏感的數(shù)據(jù)。除非具有較少權(quán)限的進程誘騙更多特權(quán)的代碼執(zhí)行它不應該做的事情(作為困惑的副手),否則環(huán)會提供強大的保護。Multics的最初想法是,環(huán)之間的轉(zhuǎn)換將通過實施嚴格控制和調(diào)解的特殊呼叫門進行。例如,外環(huán)中的代碼不能只調(diào)用內(nèi)環(huán)中的任何指令,而只能調(diào)用第一個調(diào)用的預定義入口點經(jīng)過審查,看看它及其參數(shù)是否不違反任何安全策略。
雖然像x86這樣的處理器仍然支持呼叫門,但很少有操作系統(tǒng)使用它們,因為它們相對較慢。相反,用戶進程通過執(zhí)行操作系統(tǒng)處理的軟件中斷(“陷阱”)或更常見的是通過特殊的高效操作來過渡到操作系統(tǒng)內(nèi)核(“系統(tǒng)調(diào)用”)。系統(tǒng)調(diào)用指令(名稱如SYSCALL,SYSENTER,SVC,SCALL等,具體取決于體系結(jié)構(gòu))。許多操作系統(tǒng)將系統(tǒng)調(diào)用的參數(shù)放在一組預定義的寄存器中。與調(diào)用門一樣,陷阱和系統(tǒng)調(diào)用指令也確保在操作系統(tǒng)中的預定義地址繼續(xù)執(zhí)行,代碼在其中檢查參數(shù),然后調(diào)用相應的系統(tǒng)調(diào)用函數(shù)。
除了用戶進程調(diào)用操作系統(tǒng)外,大多數(shù)操作系統(tǒng)還允許內(nèi)核調(diào)用用戶進程。例如,基于UNIX的系統(tǒng)支持操作系統(tǒng)用來通知用戶程序“有趣的事情”的信號:錯誤,過期的計時器,中斷,來自另一個的消息工藝等如果用戶進程為信號注冊了一個處理程序,操作系統(tǒng)將停止進程的當前執(zhí)行,將其所有處理器狀態(tài)存儲在進程堆棧上,形成所謂的信號。幀,并在信號處理程序上繼續(xù)執(zhí)行。當信號處理程序返回時,進程執(zhí)行sigreturn系統(tǒng)調(diào)用,使操作系統(tǒng)接管,還原堆棧上的處理器狀態(tài)并繼續(xù)執(zhí)行進程。
安全域(如操作系統(tǒng)內(nèi)核和用戶空間進程)之間的邊界是檢查系統(tǒng)調(diào)用本身及其安全性參數(shù)的好地方違反。例如,在基于功能的操作系統(tǒng)中,內(nèi)核將驗證功能,而在MINIX3等操作系統(tǒng)中,只允許特定進程進行特定調(diào)用,因此任何嘗試撥打不在預先批準列表中的呼叫將被標記為違規(guī)。同樣,基于Windows和UNIX的操作系統(tǒng)必須檢查許多系統(tǒng)調(diào)用的參數(shù)。例如,考慮常見的讀寫系統(tǒng)調(diào)用,通過這些調(diào)用,用戶請求將數(shù)據(jù)從文件或套接字讀取到緩沖區(qū)中,或者從緩沖區(qū)分別到文件或套接字中。在執(zhí)行此操作之前,操作系統(tǒng)應檢查要寫入或讀取的內(nèi)存是否實際歸進程所有。
執(zhí)行系統(tǒng)調(diào)用后,操作系統(tǒng)將控制權(quán)返回給進程。在這里,操作系統(tǒng)還必須注意不要返回危及系統(tǒng)安全性的結(jié)果。例如,如果一個進程使用mmap系統(tǒng)調(diào)用來請求操作系統(tǒng)將更多內(nèi)存映射到其地址空間,則操作系統(tǒng)應確保它返回的內(nèi)存頁不再包含來自另一個進程的敏感數(shù)據(jù)(例如,首先將每個字節(jié)初始化為零).
零初始化問題可能非常微妙。例如,編譯器經(jīng)常在數(shù)據(jù)結(jié)構(gòu)中引入填充字節(jié)以對齊。由于這些填充字節(jié)在編程語言級別根本不可見,因此編譯器可能認為沒有理由將它們初始化為零。但是,當操作系統(tǒng)返回此類數(shù)據(jù)結(jié)構(gòu)以響應系統(tǒng)調(diào)用并且單元化填充包含來自內(nèi)核或其他進程的敏感數(shù)據(jù)時,就會發(fā)生安全違規(guī)。
順便說一下,即使是我們前面提到的UNIX系統(tǒng)中的信令子系統(tǒng)也是一個有趣的安全案例?;叵胍幌拢瑂igreturn采用堆棧上的任何處理器狀態(tài)并恢復該狀態(tài)?,F(xiàn)在假設攻擊者能夠破壞進程的堆棧并在堆棧上存儲虛假信號幀。如果攻擊者也能夠觸發(fā)sigreturn,他們可以一舉設置整個處理器狀態(tài)(包括所有寄存器值)。這樣做在熟練的攻擊者手中提供了一個強大的基元,被稱為Sigreturn導向編程(SROP)。
如前所述,如今有關(guān)保護環(huán)的情況稍微令人困惑,因為最近的CPU為虛擬機管理程序提供了虛擬化指令,允許它們控制硬件在環(huán)0處訪問。為此,他們添加了乍一看看起來像底部額外戒指的東西。由于在x86處理器上,術(shù)語“ring0”已成為“操作系統(tǒng)內(nèi)核”的同義詞(以及“環(huán)”與“用戶進程”的同義詞),因此這種新的虛擬機管理程序環(huán)通常稱為“ring–1”。它還指示其各自虛擬機中的操作系統(tǒng)可以繼續(xù)在本地執(zhí)行環(huán)0指令。然而,嚴格來說,它的目的與原始戒指大不相同,雖然環(huán)-1這個名字已經(jīng)卡住了,但它可能有點像用詞不當。
為了完整起見,我們應該提到事情可能會變得更加復雜,因為一些現(xiàn)代處理器仍然具有其他模式。例如,x86提供所謂的系統(tǒng)管理模式(SMM)。當系統(tǒng)啟動時,固件控制硬件,并為操作系統(tǒng)接管系統(tǒng)做好準備。但是,啟用SMM后,固件會在向CPU發(fā)送特定中斷時重新獲得控制權(quán)。例如,固件可以指示每當按下電源按鈕時它都希望接收中斷。在這種情況下,常規(guī)執(zhí)行將停止,固件將接管。例如,它可以保存處理器狀態(tài),執(zhí)行任何需要執(zhí)行的操作,然后恢復操作系統(tǒng)以進行有序關(guān)閉。在某種程度上,SMM有時被視為比其他環(huán)(環(huán)-2)低的水平。
最后,英特爾甚至以英特爾管理引擎(ME)的形式增加了環(huán)-3。ME是一個完全自主的系統(tǒng),現(xiàn)在幾乎存在于英特爾的所有芯片組中;它在單獨的微處理器上運行一個秘密且完全獨立的固件,并且始終處于活動狀態(tài):在啟動過程中,當機器運行時,當它處于睡眠狀態(tài)時,即使斷電。只要計算機連接到電源,就可以通過網(wǎng)絡與ME通信,例如安裝更新。雖然非常強大,但它的功能在很大程度上是未知的,除了它運行自己的小型操作系統(tǒng)11,研究人員發(fā)現(xiàn)其中包含漏洞。主CPU附帶的附加處理器(無論是ME還是Apple的T2和Google的Titan芯片等相關(guān)處理器)都提出了一個有趣的一點:在主CPU上運行的操作系統(tǒng)是否能夠滿足當今的安全要求?至少,這種趨勢似乎通過專用系統(tǒng)(硬件和軟件)來增強它的安全性。
低端設備和物聯(lián)網(wǎng)
上述許多功能都可以在大多數(shù)通用處理器體系結(jié)構(gòu)中找到。然而,在物聯(lián)網(wǎng)或一般的嵌入式系統(tǒng)中不一定如此,并且通常使用定制的操作系統(tǒng)。簡單的微控制器通常沒有MMU,有時甚至沒有MPU、保護環(huán)或我們在常見操作系統(tǒng)中依賴的任何高級功能。系統(tǒng)通常很?。p少攻擊面),應用程序受信任(并可能經(jīng)過驗證)。然而,設備的嵌入式性質(zhì)使得很難檢查甚至測試其安全性,并且無論它們在安全敏感活動中發(fā)揮作用的何處,安全性隔離/遏制和調(diào)解的手段應由環(huán)境在外部強制執(zhí)行。更廣泛的物聯(lián)網(wǎng)問題在網(wǎng)絡物理系統(tǒng)安全CyBOK知識領(lǐng)域得到解決。