分級保護域

在電腦科學中, 分級保護域（hierarchical protection domains）,，經常被叫作保護環（Protection Rings），又稱環型保護（Rings Protection）、CPU環（CPU Rings），簡稱Rings。這是一種用來在發生故障時保護數據和功能，提升容錯度，避免惡意操作，提升電腦安全的設計方式。這是一種與基於能力的安全完全相反的方式。

電腦作業系統提供不同的資源訪問級別。在計算機體系結構中，Rings是由兩個或更多的特權態組成。在一些硬體或者微代碼級別上提供不同特權態模式的CPU架構上，保護環通常都是硬體強制的。Rings是從最高特權級（通常被叫作0級）到最低特權級（通常對應最大的數字）排列的。在大多數作業系統中，Ring 0擁有最高特權，並且可以和最多的硬體直接交互（比如CPU，記憶體）。

Rings之間的特殊門是被提供用來允許外層Ring在預定義的方式內訪問內層Ring的資源用的，內層Ring可以隨便使用外層Ring的資源。正確使用Rings間的門可以阻止某個Ring或者特權級的程序故意濫用其他程序的資源，提升安全性。例如，某個間諜軟體作為一個在Ring 3運行的使用者程序，它在不通知使用者的時候打開攝像頭應該會被阻止，因為訪問硬體需要使用被驅動程序保留的Ring 1的方法。瀏覽器一類在高Ring級別運行的程序必須請求權限才能訪問網路，也就是受低Ring級別限制的資源。

## 實現

多Rings保護機制是Multics作業系統提出的革命性概念之一，Multics是今天的Unix作業系統家族的一個高安全性的前任。由於GE 645不支持硬體Rings，所以Multics通過軟體捕獲Rings的轉換。它的繼承者，Honeywell 6180，硬體實現了支持8個Rings。不過，最通用的作業系統僅用了2個Rings，即使他們運行的硬體提供了更多的特權態。例如Windows 7和 Windows Server 2008 R2（還有之前版本的Windows）只用了2個Rings：Ring 0 對應內核模式，Ring 3對應使用者模式，原因是運行Windows早期版本的硬體只支持2個保護等級。

大部分現代CPU架構（包括很流行的Intel x86架構）中都有某種形式的保護環，但Windows NT或者Unix這類作業系統沒有完整地利用到這個特性。相比之下OS/2使用的更多，它用了3個Rings級別：Ring 0用於內核代碼和驅動程序，Ring 2用於某些需要特權的代碼（例如需要I/O權限的使用者程序），Ring 3用於非特權代碼（幾乎所有的使用者程序都在這一級別）。在DOS下，內核、驅動和應用程式都運行在Ring 3（然而。這也是保護模式驅動和DOS擴展專用的級別；實模式的作業系統沒有有效的保護措施），而像EMM386這樣的386記憶體管理程序運行在Ring 0。特別的，DR-DOS的EMM386 3.xx可以可選地在Ring 1運行某些模塊。OpenVMS使用內核模式、管理模式、監督模式和使用者模式四種模式（為了遞減特權）。

## 監控模式

電腦術語中，監控模式是一個可以通過運行在系統級的軟體代碼變更的硬體標誌。系統級任務或線程會在它們運行時設置這個標誌，而使用者空間應用程式不會。這個標誌決定程序是否能否執行一些諸如修改關於各種描述符表的寄存器，或禁止中斷一類的機器碼。監控模式下的程序應該永遠不會掛掉，因為他們一掛掉整個系統就崩潰了。

在某些處理器上監控模式能夠執行的所有指令，包括特權指令，也能訪問到不同的地址空間，存儲器管理硬體和其他外圍設備，作業系統通常運行在該模式。

## x86虛擬化

Intel和AMD的CPU都提供了能使hypervisor存取Ring 0硬體的x86虛擬化指令集。x86虛擬化創建了一個叫Ring -1的Ring，所以虛擬機作業系統可以直接運行在Ring 0上而不影響其他虛擬機或者宿主系統。

## 參見

- 系統調用
- 保護模式 (80286系列以及之後的x86兼容CPU)
- I/O Privilege Level (x86 CPU上的IOPL)
- Current Privilege Level (x86 CPU上的CPL0, CPL1, CPL2, CPL3)
- 系統管理模式 (SMM)
- x86虛擬化

## 延伸閱讀

- David T. Rogers: A FRAMEWORK FOR DYNAMIC SUBVERSION Thesis, June 2003 (pdf)
- Glossary of Multics acronyms and terms: Ring
- William J. Caelli: "Trusted Systems" in an Age of NIIP: Lessons from the Past for the Future. 2002 (pdf)
- Haruna R. Isa, William R. Shockley, Cynthia E. Irvine: A Multi-threading Architecture for Multilevel Secure Transaction Processing 1999 (pdf)
- Ivan Kelly: Report Porting MINIX to Xen 2006
- Paul Barham, Boris Dragovic, Keir Fraser, Steven Hand, Tim Harris, Alex Ho, Rolf Neugebauer, Ian Pratt, Andrew Warfield: Xen and the Art of Virtualization 2003 (pdf)
- Marcus Peinado, Yuqun Chen, Paul England, and John Manferdelli: NGSCB: A Trusted Open System (pdf)
- Michael D. Schroeder, Jerome H. Saltzer: A Hardware Architecture for Implementing Protection Rings 1972
- Intel Architecture Software Developer's Manual Volume 3: System Programming (Order Number 243192) Chapter 4 Protection; section 4.5 Privilege levels. (pdf)
- Tzi-cker Chiueh, Ganesh Venkitachalam, Prashant Pradhan: Integrating segmentation and paging protection for safe, efficient and transparent software extensions 1999 Chapter 3: Protection hardware features in Intel X86 architecture; section 3.1 Protection checks. (pdf)
- Takahiro Shinagawa, Kenji Kono, Takashi Masuda: Exploiting Segmentation Mechanism for Protecting Against Malicious Mobile Code 2000 chapter 3 Implementation; section 3.2.1 Ring Protection (pdf)
- Boebert, William Earl and R. Kain. A Practical Alternative to Hierarchical Integrity Policies. Proceedings of the 8th National Computer Security Conference, 1985.
- Gorine, Andrei and Krivolapov, Alexander. Kernel Mode Databases: A DBMS technology for high-performance applications , Dr. Dobb's Journal, May, 2008.