二进制杂文(4) Windows权限保护机制与权限门机制

发布于 2021-08-09  46 次阅读


思考一个问题

高权限的,一旦使用就会造成一定安全隐患的函数,API如何能安全分配给其他子程序使用权限?(把操作系统本身看作主程序,其他程序看作子程序)

换句话来说,低权限的程序如何能安全获取高权限程序(API可以看作是子例,也就是广义的程序)的使用权

首先,普通的程序员写的程序代码都是ring3的,如果调用int 80h 之类的指令,则需要陷入ring0,这样就获取了高优先级,如何保证这一高优先级权限在生命周期开始时正确借出,并在结束时正确归还,以及如何借出,如何归还就成为了一个重要问题

首先在保护模式下,所有高权限的,但是允许低权限调用的程序,都有唯一的门

门储存在中断向量表里

中断向量表当中的每一个内存单元储存唯一固定的指针,指向唯一固定的dll

一旦程序需要调用高权限程序,只能通过这唯一固定的门

而且在操作系统底层拒绝了覆写这段区域的行为,换句话来说这些门不可能被违规改造

这样就建立了安全的分发机制

另外,我们实际上在现代的win32汇编程序当中见不到int中断指令,因为所有int指令都有对应的dll封装

至于unix内核笔者目前不清楚为什么int使用如此广泛

至于归还权限,只需要在这些中断处置程序的出口点利用ring0的高权限强行修改DS,CS,SS寄存器的相关内容即可