目录
访问控制模型ACM(Access Control Model)
令牌
访问令牌
访问令牌一般包括两个部分:
一部分是令牌所表示的用户(包括会话ID、用户及其所属的组),这些信息告诉Token属于哪个用户的;
另一部分是“特权列表”(Privilege),这用来告诉进程能够进行特定的系统操作,如关闭系统、修改系统时间、加载设备驱动等。
管理员令牌
管理员令牌有二种:
当使用高特权的管理员帐号登录时,系统会同时创建两个访问令牌,其中一个是完全的管理员访问令牌
另一个是经过“过滤”的标准用户访问令牌(filtered token)-虽然以管理员登录,但应用程序默认是以标准用户权限的运行
主令牌
每个进程都有一个Token(被称为主令牌)。可以从父进程处继承(也可以修改,但其最高权限不会超过登录账户的最高权限。即只能在进程的边界上提升权限!
模仿令牌
线程默认下会使用进程的令牌来访问对象。但它也可以拥有自己的访问令牌(被称为模仿令牌(ImperonaitonToken)。但该令牌不是必须的,线程可以不拥有模仿令牌。模仿令牌的用处,如当一个线程要找开一个文件,但该文件只有User2才能打开,而主令牌属于User1,这时线程就可以模仿一个User2令牌来打开这个文件。
操作Token的UserMode API
①OpenProcessToken、OpenThreadToken
②AdjustTokenPrivileges、AdjustTokenGroups
③GetTokenInformation、SetTokenInformation
④LookupPrivilegeValue、PrivilegeCheck
⑤LookupPrivilegeDisplayName、LookupPrivilegeName
数据结构
在Windows-Research-Kernel-WRK中没有定义TOKEN的数据结构,属于undocumented的结构,主要原因是不同的操作系统版本这个数据结构的定义都有区别,以下通过kd导出的数据结构可以作为参考:
实际数据
参考下面的组图可以对照查看数据结构中的值。
主属性: