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:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
3天前
|
算法 Linux 调度
深入理解Linux内核调度器:从基础到优化####
本文旨在通过剖析Linux操作系统的心脏——内核调度器,为读者揭开其高效管理CPU资源的神秘面纱。不同于传统的摘要概述,本文将直接以一段精简代码片段作为引子,展示一个简化版的任务调度逻辑,随后逐步深入,详细探讨Linux内核调度器的工作原理、关键数据结构、调度算法演变以及性能调优策略,旨在为开发者与系统管理员提供一份实用的技术指南。 ####
20 4
|
7天前
|
缓存 算法 Linux
深入理解Linux内核调度器:公平性与性能的平衡####
真知灼见 本文将带你深入了解Linux操作系统的核心组件之一——完全公平调度器(CFS),通过剖析其设计原理、工作机制以及在实际系统中的应用效果,揭示它是如何在众多进程间实现资源分配的公平性与高效性的。不同于传统的摘要概述,本文旨在通过直观且富有洞察力的视角,让读者仿佛亲身体验到CFS在复杂系统环境中游刃有余地进行任务调度的过程。 ####
28 6
|
5天前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
26 9
|
4天前
|
缓存 负载均衡 Linux
深入理解Linux内核调度器
本文探讨了Linux操作系统核心组件之一——内核调度器的工作原理和设计哲学。不同于常规的技术文章,本摘要旨在提供一种全新的视角来审视Linux内核的调度机制,通过分析其对系统性能的影响以及在多核处理器环境下的表现,揭示调度器如何平衡公平性和效率。文章进一步讨论了完全公平调度器(CFS)的设计细节,包括它如何处理不同优先级的任务、如何进行负载均衡以及它是如何适应现代多核架构的挑战。此外,本文还简要概述了Linux调度器的未来发展方向,包括对实时任务支持的改进和对异构计算环境的适应性。
23 6
|
5天前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
22 5
|
5天前
|
算法 Unix Linux
深入理解Linux内核调度器:原理与优化
本文探讨了Linux操作系统的心脏——内核调度器(Scheduler)的工作原理,以及如何通过参数调整和代码优化来提高系统性能。不同于常规摘要仅概述内容,本摘要旨在激发读者对Linux内核调度机制深层次运作的兴趣,并简要介绍文章将覆盖的关键话题,如调度算法、实时性增强及节能策略等。
|
6天前
|
存储 监控 安全
Linux内核调优的艺术:从基础到高级###
本文深入探讨了Linux操作系统的心脏——内核的调优方法。文章首先概述了Linux内核的基本结构与工作原理,随后详细阐述了内核调优的重要性及基本原则。通过具体的参数调整示例(如sysctl、/proc/sys目录中的设置),文章展示了如何根据实际应用场景优化系统性能,包括提升CPU利用率、内存管理效率以及I/O性能等关键方面。最后,介绍了一些高级工具和技术,如perf、eBPF和SystemTap,用于更深层次的性能分析和问题定位。本文旨在为系统管理员和高级用户提供实用的内核调优策略,以最大化Linux系统的效率和稳定性。 ###
|
5天前
|
Java Linux Android开发
深入探索Android系统架构:从Linux内核到应用层
本文将带领读者深入了解Android操作系统的复杂架构,从其基于Linux的内核到丰富多彩的应用层。我们将探讨Android的各个关键组件,包括硬件抽象层(HAL)、运行时环境、以及核心库等,揭示它们如何协同工作以支持广泛的设备和应用。通过本文,您将对Android系统的工作原理有一个全面的认识,理解其如何平衡开放性与安全性,以及如何在多样化的设备上提供一致的用户体验。
|
8天前
|
Linux 数据库
Linux内核中的锁机制:保障并发操作的数据一致性####
【10月更文挑战第29天】 在多线程编程中,确保数据一致性和防止竞争条件是至关重要的。本文将深入探讨Linux操作系统中实现的几种关键锁机制,包括自旋锁、互斥锁和读写锁等。通过分析这些锁的设计原理和使用场景,帮助读者理解如何在实际应用中选择合适的锁机制以优化系统性能和稳定性。 ####
25 6
|
8天前
|
机器学习/深度学习 负载均衡 算法
深入探索Linux内核调度机制的优化策略###
本文旨在为读者揭开Linux操作系统中至关重要的一环——CPU调度机制的神秘面纱。通过深入浅出地解析其工作原理,并探讨一系列创新优化策略,本文不仅增强了技术爱好者的理论知识,更为系统管理员和软件开发者提供了实用的性能调优指南,旨在促进系统的高效运行与资源利用最大化。 ###