某些Windows API返回主令牌,有些会返回模拟令牌。一些API需要主令牌,而其他API需要模仿令牌。主令牌和假冒令牌之间的区别是什么
例如,LogonUser
通常返回主令牌,使用LOGON32_LOGON_NETWORK
的登录类型(dwLogonType
)时除外:
在大多数情况下,返回的句柄是,你可以在电话使用一个主令牌CreateProcessAsUser函数。但是,如果您指定LOGON32_LOGON_NETWORK标志,则LogonUser将返回一个您不能在CreateProcessAsUser中使用的模拟标记,除非您调用DuplicateTokenEx将其转换为主标记。
SetThreadToken
需要一个模拟令牌,而ImpersonateLoggedOnUser
这似乎做几乎同样的事情发生的任何一个。
CreateProcessAsUser
和CreateProcessWithTokenW
都需要一个主令牌和两个注意主令牌可以从模拟令牌通过调用DuplicateTokenEx
被收购,但什么令牌类型意思?
的词汇说以下内容:
一个访问令牌包含登录会话的安全信息。系统在用户登录时创建访问令牌,并且代表用户执行的每个进程都拥有该令牌的副本。令牌标识用户,用户的组和用户的权限。系统使用令牌来控制对安全对象的访问,并控制用户在本地计算机上执行各种与系统相关的操作的能力。有两种访问令牌,主要和模拟。
是通常只由Windows内核创建的访问令牌。它可能被分配给一个进程来表示该进程的默认安全信息。
已创建捕获客户端进程的安全信息,允许安全操作的服务器,以“模拟”客户端进程的访问令牌。
但这并不完全有用。看起来有人想要使用像“内核”这样的大男孩的话,但这只能提出更多的问题,比如除了被分配给进程之外,还有哪些其他的东西可以用于主令牌?除了内核之外还有谁可以创建访问权限令牌?
(这是否意味着它是微软认为内核只是在内核模式下运行的一部分,还有执行等,或者它们是否意味着用户模式代码也可以创建令牌?无论如何,甚至如果用户模式代码可以创建令牌,则必须通过系统调用来完成,就像任何对象管理器对象一样,所以令牌实际上将以内核模式创建)
无论如何, t回答基本问题:标记类型之间有什么区别?不是他们可能被用于或如何他们通常创建。
您还可以使用记录的CreateToken和CreateTokenEx函数在用户模式下创建令牌,但由于这些功能只能从SSP/AP调用(“安全支持提供者/身份验证包”)。 –
好点。注意,不仅它们要求你实现所有的SSP/AP接口(具有函数'SpLsaModeInitialize'应在函数表中返回等等),与'普通'SSP不同,SSP/AP作为LSASS的一部分运行,所以它们无论如何,在NT AUTHORITY \ SYSTEM帐户下运行并拥有“SeCreateTokenPrivilege”,“SeTcbPrivilege”等。因此,安全方面他们有相同的要求(你甚至可以说'ZwCreateToken'不太苛刻),尽管你注意到他们被证明是正确的,这是一个加号。 – conio
模拟令牌处置后,线程会发生什么? – Dolev