Intel的特权环--联系linux和windows的内核安全机制

本文涉及的产品
访问控制,不限时长
简介:

x86中分为0,1,2,3四个特权环,数值最小的特权级最高,随着数值增加特权级降低,intel这么安排是十分合理的,如果知道低特权级的实体不能访问高特权级的实体,那么就可以写出不出错的程序,但是这样的程序不是安全的,如果想写出安全的程序,那就必须知道高特权级的实体并不是总能访问低特权级的实体,还要看它此时代理的是哪个特权级的实体,这就是intel的特权环的第二层含义,intel的特权环的设计简直可以称为绝妙,不但保证低特权级不能访问高特权级,而且保证了高特权级不能滥用职权,这个意义十分符合现实世界的模型,可是现实世界却没有intel设计的理想世界那么天衣无缝。

intel的特权环中有几个概念,一个是CPL,一个是RPL,一个是DPL,CPL就是当前执行绪CS寄存器的低两位,代表当前执行绪的特权级,而RPL某些时候代表当前执行绪是在代理哪个特权级的工作,也就是它在代替哪个特权级的执行绪办事,DPL就是被访问对象的描述符的特权级,intel根据这三个XPL和它的特权环机制实现了数据的访问控制,就是说,如果要访问一个数据,那么在分段的保护模式中必然从段描述符中访问,该描述符中有一个DPL,当前的CPL的数值大于DPL是绝对不能访问的,但是当前的CPL小于或者等于DPL就可以获得访问权了吗?如果按照intel特权环的第一层意思,那么就可以了,但是因为有第二层的意义存在,导致cpl即使小于等于dpl也不能保证访问可以获得允许,还要看看rpl,如果rpl起了作用,而且rpl大于dpl的话,访问还是不允许的,只有在dpl同时大于cpl和rpl的情况下,访问才是允许的。这么复杂的机制的现实意义是什么?其实大可不必埋怨这种机制复杂,其实它再显然不过了,试想一个低特权级的代码通过中断或者异常陷入了一个高特权级的代码,然而这个高特权级的代码有漏洞,这样的话,陷入后的特权级的代码拥有了高特权级,这样就可以在漏洞下操作高特权级的数据,甚至将之复制到低特权的缓冲区了,这样系统将不再安全,但是如果有了intel特权环的第二层意义的保护,那么即使低特权级的代码陷入了高特权级,高特权级的代码还是代表低特权级执行的,也就是此时它的rpl是低特权级的,于是访问被拒绝。访问控制必须提供一个机制,即使在规则被破坏的情况下,系统也是安全的,就好像人们可以选举出来一个总理,官够大了吧,但是人们不能保证这个拥有特权的总理总是为人民服务,这样就必然需要一种机制,这就是弹劾。这个道理就和以法治国和以德治国的区别一样,后者表示不提供任何机制,仅仅靠约定的规则来维持稳定,而这样的国家弄不好将是很不稳定的。

intel特权环的第二层意义的精髓就是cpu不能保证任何代码都遵守约定,如果不能保证这些,那么就有必要提供一些内部约束。比如中断,在linux中,如果要防止用户用int指令访问硬件中断处理程序,那么很简单的将硬件中断处理程序的描述符的dpl设置为0就可以了,而专门用来int软中断调用的门的描述符的dpl设置为3,这样就简单的实现了访问控制。intel就是依据现实世界设计出了特权环机制,但是现实世界工作得确实没有intel的处理器工作得好。intel特权环的规则远远要比我上面说的要复杂,规则之所以如此复杂就是在于它并不承诺提供一个统一的机制,而是完全模仿这个复杂又善变的世界,基于对象来实现访问控制而不是基于理想中的统一规则,intel特权环就是通过限制发出访问的对象的访问而不是通过保护被访问对象来实现访问控制的。

现在考虑一下linux的系统安全机制,其实就是继承的unix的uid/gid以及资源的可读,可写,可执行的模型,这种模型非常统一,将所有的要被访问的对象都统一的称作资源,然后所有的资源在系统内部形成文件系统,这也就是unix/linux中“一切皆文件”的意义,linux通过保护资源来实现访问控制,再次重申一遍,这个机制十分统一,在一本书中看到,这样的机制偏重人-机接口中机器的一方,之所以统一就是因为偏重机器,而机器要比我们复杂的人统一的多,如果要偏重人这一边,那么访问控制机制将变得非常复杂,毕竟人就是不统一的。unix的安全模型具备统一性,这是很不错的,因为它可以随时增加新的安全机制,只要将新的安全机制映射到老的“unix的uid/gid以及资源的可读,可写,可执行的模型”就可以了,比如,现在linux就实现了lsm,这个lsm十分简单,就是在设计者认为会出现潜在安全问题的地方挂载钩子,具体怎么发现哪些地方会有潜在的安全问题就要靠经验和专业的安全模型了,linux的安全模型不需要将发现“哪些地方会有安全问题”纳入自己的安全模型,自己的安全模型中只需要实现一旦发现了这样的潜在地方应该怎么做,而这十分简单,就是往统一的模型上映射就可以了。往相反的一端看,就可以看到windows的安全模型,它注重的是和linux相反的一面,它拟在提供一个全面的安全框架,负责安全的方方面面,于是它的安全模型就是基于对象的访问控制,windows的安全框架十分复杂,几乎也是一个和人类社会一样的东西,可想而知,它偏向人-机接口的人的方面,它实现的很累,几乎想囊括一切安全的因素,将一切安全因素纳入自己的框架,于是每个对象的结构光安全相关的东西就占据了很大一部分,而且不同对象的安全结构不统一,因此每一类对象都有一个对象管理器,其实之所以每类对象都有一个管理器是因为不光安全结构,windows中的对象的所有结构几乎都是按类区分,不同类的对象的相同机制的数据结构却不相同,因此每一类才需要一个管理器来管理这一类对象(因为不统一从而没有任何一个管理器可以管理所有的对象)。以上这一点可以用面向对象的思想理解一下。windows的设计本身就没有按照统一的思想,因为它偏向人-机的人而不是机器,人总在变化,因此windows总在变化。unix几十年不大变就是因为它偏向于人-机的机器一方,它虽然不像windows那样操作方便,但是却非常稳定。

通过intel的特权环说了上面那么一大堆,最后我想了一下,unix/linux不是很适合intel的处理器,倒是windows和intel的处理器情投意合。




 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1274148

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
2月前
|
缓存 Linux 开发者
Linux内核中的并发控制机制
本文深入探讨了Linux操作系统中用于管理多线程和进程的并发控制的关键技术,包括原子操作、锁机制、自旋锁、互斥量以及信号量。通过详细分析这些技术的原理和应用,旨在为读者提供一个关于如何有效利用Linux内核提供的并发控制工具以优化系统性能和稳定性的综合视角。
|
2月前
|
缓存 负载均衡 算法
深入探索Linux内核的调度机制
本文旨在揭示Linux操作系统核心的心脏——进程调度机制。我们将从Linux内核的架构出发,深入剖析其调度策略、算法以及它们如何共同作用于系统性能优化和资源管理。不同于常规摘要提供文章概览的方式,本摘要将直接带领读者进入Linux调度机制的世界,通过对其工作原理的解析,展现这一复杂系统的精妙设计与实现。
101 8
|
4天前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
33 15
|
8天前
|
安全 网络协议 Linux
telnet在windows和linux上的使用方法
Telnet是一个简单且强大的网络工具,广泛用于远程管理和网络诊断。尽管存在安全风险,但在受控环境中,Telnet仍然是一个非常有用的工具。通过本文的介绍,您应该能够在Windows和Linux系统上安装并使用Telnet进行各种网络操作。
67 18
|
11天前
|
Ubuntu 网络协议 Linux
快速部署WSL(Windows Subsystem for Linux)
WSL提供了一种轻量级的方法,使开发者能够在Windows上无缝运行Linux环境。通过本文介绍的步骤,可以快速安装、配置和使用WSL,以满足开发和测试的需求。
51 8
|
1月前
|
关系型数据库 MySQL Linux
MySQL数据库下载安装教程(Windows&Linux)
本文档详细介绍了MySQL的安装步骤,包括安装前的准备工作、下载安装包、Windows和Linux系统下的具体安装流程,以及如何配置MySQL服务、设置环境变量、启动服务和连接数据库等关键操作。
|
30天前
|
算法 Linux
深入探索Linux内核的内存管理机制
本文旨在为读者提供对Linux操作系统内核中内存管理机制的深入理解。通过探讨Linux内核如何高效地分配、回收和优化内存资源,我们揭示了这一复杂系统背后的原理及其对系统性能的影响。不同于常规的摘要,本文将直接进入主题,不包含背景信息或研究目的等标准部分,而是专注于技术细节和实际操作。
|
30天前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
1月前
|
监控 算法 Linux
Linux内核锁机制深度剖析与实践优化####
本文作为一篇技术性文章,深入探讨了Linux操作系统内核中锁机制的工作原理、类型及其在并发控制中的应用,旨在为开发者提供关于如何有效利用这些工具来提升系统性能和稳定性的见解。不同于常规摘要的概述性质,本文将直接通过具体案例分析,展示在不同场景下选择合适的锁策略对于解决竞争条件、死锁问题的重要性,以及如何根据实际需求调整锁的粒度以达到最佳效果,为读者呈现一份实用性强的实践指南。 ####
|
1月前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####