内核如何保护模式位(PSW)不被用户程序修改?

时间:2013-06-11 13:21:02

标签: operating-system kernel cpu cpu-architecture

据我所知,CPU根据程序状态字区分内核模式和用户模式,但假设用户程序试图通过获取对内核代码的访问权来获得对调用系统调用的未授权访问。 CPU体系结构中有哪种防御机制可以防止这种漏洞利用?

1 个答案:

答案 0 :(得分:4)

大多数架构都有权限级别,在x86中它们被称为“环”。它们是分配给地址空间中某些位置的权限级别,用于定义该空间中的代码可以执行的特权指令的类型。

程序无法修改表示权限级别的这些位,因为它们驻留在内核空间中的页表中。代码访问此空间的任何尝试都会被CPU捕获,并被操作系统捕获,这取决于您使用的操作系统所谓的页面或分段错误。

此外,程序无法执行特殊指令,比如访问允许它们访问内核空间的DMA控制器,因为它们被视为特权。用户代码使用此类特殊指令的任何尝试也会导致操作系统捕获的CPU出现故障。

因此,在精心设计的操作系统中,内存空间保护(即程序无法修改内核数据结构)和特权指令保护的组合使系统安全。程序通常无法升级其权限,因为所有尝试都会导致操作系统陷阱的CPU出现故障。操作系统可以杀死有问题的程序。

有关这些在x86架构中如何协同工作的详细介绍,请参阅安全性的OSdev Wiki页面:

http://wiki.osdev.org/Security