据我了解。内核模式是一种硬件功能。前任。它可以通过寄存器设置(value1 -> 内核模式,value2 -> 用户模式)。
当内核加载并运行用户应用程序时,用户应用程序应通过系统调用与内核通信以执行特权操作,期间会发生中断,执行将切换到内核模式并执行特权操作。
我的问题是:
阻止恶意用户应用程序设置“模式”寄存器并进入内核模式(例如 x86)的机制是什么? 这是有道理的,只有内核可以设置这个寄存器,我想知道有关如何强制执行的更多详细信息。
最佳答案
我不知道这是如何在硬件本身中强制执行的。它还取决于架构。在 x86 软件中,这取决于情况,因为有多个入口点。当CPU启动时,它处于内核模式。它可以执行每条指令并用主内存做任何它想做的事。
因此,在启动任何用户模式进程之前,内核将利用这一点在引导期间设置页表和中断处理程序。
在 x86 上,内核模式与用户模式是由页表强制执行的。如果用户模式进程尝试访问设置为内核模式的页面,它将触发错误并调用内核模式的中断处理程序。内核将因此终止该进程。
中断并不意味着是内核的入口点。如果发生错误,它们仍然可以存在,但用户模式进程不会知道,有时会终止该进程(如果内核决定应该这样做)。
在 x86 上,内核的真正入口点是 LSTAR MSR 寄存器。该寄存器只能从内核模式设置。它可以与汇编中的 syscall 指令一起使用,以跳转到寄存器中指定的地址。用户态进程除非使用系统调用指令,否则无法跳转到内核。因此,它允许内核为用户模式设置一些称为系统调用的服务。
关于operating-system - 是什么阻止用户应用程序通过 "hijack"进入内核模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68238896/