Windows的安全模型

1. 安全身份

Windows的安全模型是以用户为线索的,用户的身份是在登录系统时验证的。

除了用户外,还可以有一些特殊实体需要拥有安全的身份,以便进行验证,比如groups, domain等等。

 

Windows通过使用SID来标识一个实体的安全身份,重装过系统的同学会有类似的经验,对于上一个Windows系统留下来的文件夹,它的Owner会是一串以S-开头的数字,它就是上一个系统的用户的SID。

 

在注册表HKEY_USERS中,以及DACL属性页中都能够看到SID的身影。

 

2. 令牌(Access Token)

Access Token是一个内核对象,是用来标识一个进程或者线程所拥有的安全权限的对象。

通常这个权限是继承来的,CreateProcess/CreateThread时,允许设置Security Descriptor来限定子进程的权限,如果不加限定,那么子进程就继承了父进程的权限。

 

这些权限规定了对于系统中的资源的访问能力。某项资源究竟允许谁来访问,是由这项资源的Owner说了算的,这也是Windows安全模型中的最重要的原则。

 

3. Impersonation

说白了,就是顶替某个用户的安全身份去做一件事,比如访问某项资源。

这通常是必要的,因为当一个服务端的进程要代表某个客户端的程序去进行操作时,必须能够仿真这个客户端程序的安全身份,Impersonation就是这样一种机制。

 

4. 修改权限

这是一种终极的能力,如果你能修改任何人的权限,那么你就几乎能做任何事。通常这种能力仅限于系统管理员。

 

可以使用AdjustTokenPrivileges来修改Token的权限。

The AdjustTokenPrivileges function enables or disables privileges in the specified access token. Enabling or disabling privileges in an access token requires TOKEN_ADJUST_PRIVILEGES access.

http://msdn.microsoft.com/en-us/library/windows/desktop/bb530716(v=vs.85).aspx列出了令牌的特权列表。

posted @ 2014-03-25 13:50  Daniel King  阅读(1269)  评论(0编辑  收藏  举报