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

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

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

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

大多数指令可以同时使用于R0层和R3层,但有[多多关注www.hitidc.com],些和系统设置相关的指令却只能在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层被使用的时[多多关注www.hitidc.com],候还要检查IO许可位图,综合判断是否允许调用。

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

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

http://www.cnblogs.com/pcajax/archive/2011/03/16/1986407.html

ring0和ring3的区别的更多相关文章

  1. RING0到RING3

    在前一篇文章里面,我们将了CPU保护模式中的几种特权RING0,RING1,RING2,RING3!操作系统通常运行在RING0,应用程序通常运行在RING3. CPU如何从RING0到RING3 先 ...

  2. ring0 与 ring3 层之间的交互

    在进行Windows的ring0层开发时,必不可免的要与 ring3 层进行交互.进行数据间的相互传输.可用的方法有DeviceIoCntrol,ReadFile.我平常都是用的DeviceIoCon ...

  3. ring0与ring3通信方式

    修改自: https://blog.csdn.net/wzsy/article/details/54929726 控制码方式详解: https://www.cnblogs.com/lsh123/p/7 ...

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

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

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

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

  6. Ring3 和Ring0 解释

    这得从CPU指令系统(用于控制CPU完成各种功能的命令)的特权级别说起.在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃.比如:清内存.设置时钟等.如果所有的程序都能使用这些 ...

  7. RING0,RING1,RING2,RING3

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

  8. Ring0创建事件Ring3设置事件

    同步事件(synchronizationEvent)当事件对象为激发时,如遇到KeWaitForXX等内核函数,事件对象则自动变回未激发态通知事件(NotificationEvent)当事件对象为激发 ...

  9. Ring3创建事件Ring0设置事件

    应用程序中创建的事件和在内核中创建的事件对象,本质上是同一个东西,在用户模式中,他用句柄表示,在内核模式下,他用KEVENT表示数据结构表示.在应用程序中,所有的内核对象都不会被用户看到,用户看到的知 ...

随机推荐

  1. Qt开发小工具之gif转换器(使用QMovie截取每一帧为QImage,然后用QFile另存为图片文件)

    最近,QQ上好多各种gif表情.每一个都很经典呀..于是我就想把它转换成一张张静态图片...没学过ps.于是写了几行代码.完工.核心代码如下 主要是借助QMovie类.文件读取模式选择QMovie:: ...

  2. 远程管理服务SSHD

    安装SSH yum install openssh

  3. 在Spring Boot启动后执行指定代码

    在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化环境,准备测试数据等等. 在Spring中可以通过ApplicationListener来实现相关的功能,不过在配合Spring Bo ...

  4. JSP中的相对路径和绝对路径(转)

    1.首先明确两个概念: 服务器路径:形如:http://192.168.0.1/的路径 Web应用路径:形如:http://192.168.0.1/yourwebapp的路径 2.关于相对路径与绝对路 ...

  5. DMA(STM32)

     1.DMA:data memory access //实际的内存存储 注:DMA干活的时候是不须要CPU干涉的 2. ①内存(定义的变量)---外设(寄存器). ②内存---内存 ③外设---外 ...

  6. Java多线程之非线程安全

    在Java多线程中我会重点总结五个如下的技术点: 1.非线程安全是如何出现的 2.synchronized对象监视器为Objec时的使用 3.synchronized对象监视器为Class时的使用 4 ...

  7. Oracle查询数据中占用空间最大的表

    --第一步,查询istaudit数据库文件ID,文件路径 select file#,name from v$datafile where lower(name) like '%istaudit.dbf ...

  8. Oracle游标循环更新数据案例

    declare v_XTXMBH number; v_ZJZJZJRQ varchar2(40); cursor c_job is SELECT XT.XTXMBH AS XTXMBH, QJ.ZJZ ...

  9. jQuery(二)

    table 全选.反选.清除 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  10. 转:jQuery事件绑定.on()简要概述及应用

    前几天在看<jquery基础教程>,看到事件委托的时候,关于live()方法讲的不是很详细,就去搜了一下关于live()和delegate()的. 然后在一处看到live()已经被移除了, ...