架構安全與可靠性

特權層級(privilege level)

想像一棟大樓,租客只能進自己的公寓,大樓管理員可以進任何一戶,市政公用事業班則能切斷整個街區的電。各自握有不同層級的權限,而門鎖負責執行它。CPU 運作方式相同:在任何時刻,它都運行在少數幾個特權層級之一,而硬體本身決定該層級被允許碰哪些指令、哪些記憶體。這是電腦中保護與隔離的基石。

具體而言,一般應用程式運行在使用者模式——權限最低的層級。在使用者模式下,某些強大的指令(停機、更改分頁表、直接和裝置對話、改變特權層級)根本不被允許;若使用者程式試圖執行,硬體會攔截(trap),由作業系統接手。作業系統核心運行在權限更高的模式(常稱核心或監督模式),那些指令在其中被允許,因為核心必須管理記憶體、排程行程、驅動裝置。跨越界線是刻意而受控的:使用者程式透過系統呼叫向核心請求特權服務,那是唯一獲准向上的門(見 system-call)。許多系統還加上第三個、權限更高的層級給超管理器(hypervisor),讓一台機器能安全地跑好幾台彼此隔離的虛擬機。

為什麼這要做在硬體裡,而不只是軟體?因為你不信任的軟體無法被指望自己管好自己。特權檢查活在矽裡,於是一個有臭蟲或惡意的使用者程式實體上就無法執行特權指令或讀核心記憶體——CPU 會拒絕。正是這道硬體執行的界線,讓你的機器能把不可信的網頁和你銀行的 App 並肩運行,而不讓一方偷走另一方的秘密。它也是最嚴重的微架構攻擊、尤其是 Meltdown,因為跨越了它而如此駭人的那條線(見 meltdown-vulnerability)。

一個使用者程式執行了一條停用中斷的指令(特權操作)。因為 CPU 處於使用者模式,硬體拒絕:它觸發一個 trap,把控制權轉給監督模式下的核心,由核心決定怎麼辦——通常是把這個亂來的程式殺掉。即使指令的位元是合法的,使用者程式也無法撥動那個開關;特權層級擋下了它。

同樣的指令位元,因模式而結果不同:特權由 CPU 執行,而非靠程式自覺守規矩。

特權層級能防住臭蟲與一般攻擊,但它是一道微架構可能繞著漏訊的邏輯界線。Meltdown 顯示推測執行能讀取使用者層級本不該看見的核心記憶體——層級守住了,但一條側通道從它底下鑽了過去。

又稱
protection ringprivilege ringCPU mode保護環處理器模式