负的CPU保护环
什么是CPU保护环?
在计算机科学中, 分级保护域(英语:hierarchical protection domains),经常被叫作保护环(Protection Rings),又称环型保护(Rings Protection)、CPU环(CPU Rings),简称Rings。这是一种用来在发生故障时保护数据和功能,提升容错度,避免恶意操作 ,提升计算机安全的设计方式。工作在不同Ring中的对象对资源有不同的访问级别。Rings是从最高特权级(通常对应最小的数字)到最低特权级(最大的数字)排列的。在大多数操作系统中,Ring 0拥有最高特权,并且可以和最多的硬件直接交互(比如CPU,内存),同时内层Ring可以随便使用外层Ring的资源。
(来自维基百科)

Rings的概念最早出现于x86保护模式的设计中。现在,这些Rings通常存储于段选择子和段描述符的特权级位置上。
Ring0-2为“管理员”层级,可以做大部分事情,但是Ring1-2不能使用特权指令——例如加载描述符表的LGDT、LLDT和加载任务寄存器的指令ltr以及停机指令hlt等等(Intel的初衷是让驱动存在于此Ring1-2,但现代操作系统通常将驱动也放在Ring0上)。
Ring3代表“用户模式”。如果你的当前特权级(CFL)或者请求特权级(RFL)在这个环上,那么你需要通过系统调用请求内核帮你完成一些资源利用操作,例如I/O读写。
综上,Rings的设计将用户程序和服务程序对资源的利用进行隔离。正确使用Rings可以提升资源使用的安全性。例如,某个间谍软件作为一个在Ring 3运行的用户程序,它在不通知用户的时候打开摄像头应该会被阻止,因为访问硬件需要使用被驱动程序保留的Ring 1的方法。
为什么会有负的保护环?
在现在的处理器中,大多有对虚拟化的硬件支持,例如Intel VT-x 和 AMD-V。在进行虚拟化之前,需要一些“高级管理员程序”初始化虚拟控制结构(这被称为VMCS),随后定义虚拟机并调用 vmenter 和处理 vmexit 进行虚拟化。而这些代码就工作在“Ring-1”层级。事实上,CPU并没有定义这种层级,但是考虑到每一个被虚拟化的内核都认为它们对系统有完全的控制权(Ring0),而它们又是被虚拟层所控制(对它们不可见),所以称其为“Ring-1”也是有道理的。
系统管理模式(SMM)是另一种执行特殊指令的操作模式。电脑主板上会有一些固件(例如BIOS)建立起SMM来处理系统管理中断,例如为了实现高级电源管理。当这些事件/中断发生后,操作系统(甚至是上面提到的虚拟层)都会被挂起,随后CPU进入一个特殊的地址空间处理中断。由于SMM对于操作系统和虚拟层都不可见,所以通常称其工作在“Ring-2”下。
有人可能记得去年有一个新闻:MINIX悄然成最流行系统:暗藏核弹级漏洞 。
Intel现代处理器都支持ME管理引擎,用来管理协调内部的诸多模块,尤其是传统芯片组整合进入之后,处理器已经差不多成了SoC(System on Chip)单芯片系统,更需要一个“协同总管CPU”,而MINIX就是这个微型CPU的操作系统。 AMD也有自己的协同处理器,称为PSP。这个CPU可以对芯片组做任何事情,即使是在系统通电但还没有启动的时候(甚至系统的启动也是它的管理范畴)。所以我们也称其工作在“Ring-3”下。
从安全的角度考虑,程序工作的Ring值越低,其行为的可见性也就越低。例如用户程序不会意识到自己是工作在一个“虚拟地址”中,而OS不会意识到自己只是多个被虚拟化出来的一个,而虚拟层不会意识到自己在工作过程中SMM已经完成了对一些中断的处理,而协同处理器对以上所有对象都是不可见的。可以想象,如果能够在Ring值更低的层级植入恶意程序,其被查杀的难度也会越高。
另外,以上说明基于x86架构,其他的架构CPU也有类似设计方式,例如ARM的user (3), supervisor (0), VMM (-1) 和TrustZone (-2)。
参考:
- Protection ring From Wikipedia
- Ring Architecture Question From Intel
- CPU Rings, Privilege, and Protection
- What is protection ring -1?
- 《x86汇编语言:从实模式到保护模式》
负的CPU保护环的更多相关文章
- linux系统负载相关的概念和度量
系统负载有 CPU利用率 和 LoadAverage这2个概念. cpu利用率:cpu utilization,是进程(task)被内核调度进程实际分配了CPU资源后,在时间片内使用CPU进行工作运算 ...
- Linux下如何查看高CPU占用率线程
转于:http://www.cnblogs.com/lidabo/p/4738113.html 目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidst ...
- CPU与内存的那些事
下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如下: 转: CPU的等待有多久? 原文标题:What Your Computer Does While You Wait 原文地址: ...
- Linux下java获取CPU、内存、磁盘IO、网络带宽使用率
一.CPU 使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得 ...
- 【Android测试】【第二节】性能——CPU时间片
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5143192.html 前言 第一节讲CPU的时候留下了一个 ...
- 转:CPU与内存的那些事
下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如下: 转: CPU的等待有多久? 原文标题:What Your Computer Does While You Wait 原文地址: ...
- Ubuntu 14.10 下CPU实时监控mpstat命令详解
简介 mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CPUs系统里,其不但能查 ...
- Linux平台Cpu使用率的计算
proc文件系统 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为内核与进程提供通信的接口.用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的 ...
- linux查看CPU性能及工作状态的指令
http://www.aikaiyuan.com/9347.html http://blog.csdn.net/jk110333/article/details/8683478 http://www. ...
随机推荐
- nginx优化项目
隐藏版本信息 server_tokensSyntax: server_tokens on | off | build | string;Default: server_tokens o ...
- springboot项目中引用其他springboot项目jar
1. 剔除要引入的springboot项目中不需要的文件:如Application和ApplicationTests等 2.打包 不能使用springboot项目自带的打包插件进行打包: 3.打包 4 ...
- 设置IIS允许下载.config文件
<configuration> <system.webServer> <security> <requestFilteri ...
- sublime的reopen with encoding和reload with encoding区别
首先必需要明白一点,sublime无论以什么编码格式打开文本(以什么编码格式来理解文本文件中的二进制数据),都会把它转为utf-8再显示到屏幕中,这个过程称作解码.其实不当当是sublime,其实任何 ...
- 2018湖湘杯web、misc记录
1.题目名 Code Check 打开题目,右键发现有id参数的url,简单base64解码以后发现不是明文,说明利用了其他的加密方式,那么应该会有具体的加密方式给我们,于是试试常见的文件泄露,可以发 ...
- nopCommerce 3.9 版本发行
NopCommerce中文信息地址:http://www.nopcn.com/nopcommerce39-blog-release-notes.html NopCommerce英文地址:http:// ...
- linux防火墙与端口设置
1.编辑iptables文件 # sudo vi /etc/sysconfig/iptables 添加如下一行 -A INPUT -p tcp -m state --state NEW -m tcp ...
- HIVE的sql语句操作
Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...
- Bootstrap组件介绍
一.下拉菜单 用于显示链接列表的可切换.有上下文的菜单.下拉菜单的 JavaScript 插件让它具有了交互性. 1.实例 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另一个声明了 ...
- C#多线程和异步(二)——Task和async/await详解(转载)
一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务 ...