通过在intel微处理器中利用RPL削弱CPL来访问弱势堆栈

时间:2017-08-18 17:01:54

标签: x86 intel segment privilege

据我所知,当我们想要访问堆栈段时,描述符的DPL应该等于

  

MAX(RPL,CPL)

其中RPL是SS段寄存器,CPL表示当前特权级别。

我们可以通过使用RPL削弱我们的CPL来访问弱势群体吗? 例如,CP段= 0,SS段寄存器的RPL = 3。所以我们应该能够访问PL 3的堆栈。这是真的吗?

1 个答案:

答案 0 :(得分:2)

没有

英特尔SDM的第5.7节是明确的

  

当SS寄存器加载了堆栈段的段选择器时,也会发生权限级别检查   此处与堆栈段相关的所有权限级别必须与CPL匹配;也就是说,CPL,堆栈段选择器的RPL和堆栈段描述符的DPL必须相同。 如果RPL和DPL不相等   对CPL,生成一般保护异常(#GP)

基本原理是,出于安全原因,特权代码无法与非特权代码共享堆栈 - 每个特权都有自己的堆栈,如TSS中所定义。

您可以使用数据段寄存器访问堆栈(例如通过ds),在这种情况下,必须具有 max(CPL,RPL)< = DPL (削弱的CPL是仍然比该段的DPL更多或同等特权。)