现在探讨内核程序和应用程序之间的本质区别。除了能用WDK编写内核程序和阅读一部分Windows的内核代码之外,我们还需要了解它们的本质是什么,它们和我们熟悉的应用程序有什么区别。

  Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,从Ring0到Ring3(后面简称R0、R1、R2、R3)。R0层拥有最高的权限,R3层拥有最低的权限。按照Intel原有的构想,应用程序工作在R3层,只能访问R3层的数据;操作系统工作在R0层,可以访问所有层的数据;而其他驱动程序位于R1、R2层,每一层只能访问本层以及权限更低层的数据。

  这应该是很好的设计,这样操作系统工作在最核心层,没有其他代码可以修改它;其他驱动程序工作在R1、R2层,有要求则向R0层调用,这样可以有效保障操作系统的安全性。但现在的OS,包括Windows和Linux都没有采用4层权限,而只是使用2层——R0层和R3层,分别来存放操作系统数据和应用程序数据,从而导致一旦驱动加载了,就运行在R0层,就拥有了和操作系统同样的权限,可以做任何事情,而所谓的rootkit也就随之而生了。

  rootkit在字面上来理解,是拥有“根权限”的工具。实际上,所有的内核代码都拥有根权限,当然,并不一定它们都叫做rootkit,这要看你用它来做什么。用rootkit技术开发的木马和病毒正在迅速发展,它们往往极难清除,以往杀毒软件可以轻松清除掉系统中病毒的时代似乎已经一去不复返了。

  大多数指令可以同时使用于R0层和R3层,但有些和系统设置相关的指令却只能在R0层被使用,或者在R3层的使用受到限制,主要有下面这些:

  lgdt:加载GDT寄存器

  lldt:加载LDT寄存器

  ltr:加载任务寄存器

  lidt:加载IDT寄存器

  mov:加载和存储控制寄存器、调试寄存器时受限

  lmsw:加载机器状态字

  clts:清除cr0中的任务切换标记

  invd:缓冲无效,并不写回

  wbinvd:缓冲无效,并写回

  invlpg:无效TLB入口

  hlt:停止处理器

  rdmsr:读模式指定寄存器

  wrmsr:写模式指定寄存器

  rdpmc:读取性能监控计数器

  rdtsc:读取时间戳计数器

  最后2条指令rdpmc和rdtsc,在cr4的位4(PCE)和位2(TSD)被设置的情况下可以同时被R0层和R3层调用。任何违反上面规定的操作,在Windows下都可能会产生通用保护故障的异常。

  另外,还有些所谓的IO敏感指令,包括:

  cli:关闭中断

  sti:开启中断

  in:从硬件端口读

  out:往硬件端口写

  这些指令在R0层可以直接被使用,在R3层被使用的时候还要检查IO许可位图,综合判断是否允许调用。

  当然,前面已经声明我们写的和研究的代码都是内核代码,也就是说,上面这些指令都是可以用的。当然,相应的rootkit技术的病毒和木马的作者显然也会明白这一点,所以这并不是让人很有安全感的一个现状。

  更重要的保护机制是如何保证系统内存空间的读/写、可执行属性,这将在12.2节“保护模式下的分页内存保护”中详述。对于病毒和木马来说,使用硬件机制来实现破坏虽然并非不可能,但是远不如直接修改内存中的操作系统内核和其他软件的代码来得简洁方便,那是破坏与安全对抗的主战场。

Ring0和Ring3权限级相关推荐

  1. ring0和ring3的区别

    现在探讨内核程序和应用程序之间的本质区别.除了能用WDK编写内核程序和阅读一部分Windows的内核代码之外,我们还需要了解它们的本质是什么,它们和我们熟悉的应用程序有什么区别. Intel的x86处 ...

  2. 高特权级代码段转向低特权级代码段(利用 ret(retf) 指令实现 jmp from ring0 to ring3)

    [0]写在前面 0.1)本代码旨在演示 从 ring0 转移到 ring3(即,从高特权级 转移到 低特权级) 0.2)本文 只对 与 门相关的 代码进行简要注释,言简意赅: 0.3)文末的个人总结是 ...

  3. CPU 的 ring0、ring1、ring2、ring3

    Intel 的 CPU 将特权级别分为 4 个级别:RING0.RING1.RING2.RING3.Windows 只使用其中的两个级别 RING0 和 RING3,RING0 只给操作系统用,RIN ...

  4. ring0 ring3 kernel driver

    intel cpu的权限访问控制:ring0 ~ ring5. window.linux操作系统都只用了ring0,ring3,对应内核态和用户态. 驱动程序工作在内核态,没有main函数入口,而应用 ...

  5. 全虚拟化和半虚拟化的区别 cpu的ring0~ring3又是什么概念?

    ring0是指CPU的运行级别,ring0是最高级别,ring1次之,ring2更次之-- 拿Linux+x86来说, 操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断 ...

  6. 首创!用户级权限进程防杀 C++

    用户级权限实现简单防杀 Guest权限下实现防杀!全网首创思路! 无意中翻出小学时候写的程序,应该是全网首创的无权限防杀手段,拿出来分享下.这个程序运行不需要任何权限,应该是为数不多的能抗住PChun ...

  7. 探索ring0之内核概述

    探索ring0之内核概述 内核概述 Intel x86系列处理器使用"环"的概念来实施访问控制,共有4个权限级别,由高到低分别为Ring0.Ring1.Ring2.Ring3,其中 ...

  8. 实用级反主动防御rootkit设计思路[转载]

    有兴在这次x'con交流会上认识白远方兄弟,这是他很早前写的文章,提到了很多东西,保存一下. 作者:白远方 (ID: baiyuanfan, baiyuanfan@163.com, baiyuanfa ...

  9. CPU 有个禁区,内核权限也无法进入!

    作者 | 轩辕之风O 来源 | 编程技术宇宙(ID:xuanyuancoding) 神秘项目 我是CPU一号车间的阿Q,是的,我又来了. 最近一段时间,我几次下班约隔壁二号车间虎子,他都推脱没有时间, ...

最新文章

  1. POJ1042 Gone Fishing
  2. python orm peewee
  3. leetcode 424. Longest Repeating Character Replacement | 424. 替换后的最长重复字符(Java)
  4. python 输入字符串_输入输出,字符串如影随形 | Python基础连载(五)
  5. c语言学生对老师的评教系统,学生对老师的评价
  6. 移动应用框架 Ionic 4 Ionic for Everyone
  7. Core Servlets and JSP Volume I 读后感 Servlet(三)
  8. 聊一聊接口测试流程(测试工作面试题必问)
  9. 计算机文字排版工作过程,计算机文字录入与排版教学计划.doc
  10. tf卡无法格式化怎么修复?解决方法分享
  11. CSS3实现骗人版无缝轮播图
  12. 查询手机号的归属地及运营商接口(验证可用)
  13. 从黑产情报角度看风控对抗的变化
  14. 关于浏览器的深入解析都在这31张图里!
  15. pytorch教程(1.5)——梯度自动计算
  16. 哟西,张家界三日自助游走起@-@
  17. NTC热敏电阻温度采集与adc转换
  18. 明纬电源、航嘉电源真假美猴王 你怎么识别?
  19. 成事的人,往往是谦逊的
  20. NOI / 1.10编程基础之简单排序 02:奇数单增序列

热门文章

  1. plsql(轻量版)_游标的使用2
  2. Spring+Redis整合
  3. springboot+springcloud相关问题
  4. Spring注解编程基石(三)
  5. 【多态】向上转型调用方法的规则
  6. 解决Hibernate报错The server time zone value is unrecognized or represents more than one time zone
  7. Handler 源码解析(Java 层)
  8. PHP的pcntl进程控制教程二(pcntl_wait)
  9. SQL2005 express升级到2008企业版解决4096限制问题
  10. 什么是空间复杂度(What is actually Space Complexity ?)