Windows的访问控制机制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows的访问控制机制
访问控制:是指的安全特性,这些安全特性控制谁能够访问操作系统资源。应用程序调用访问控制函数来设置谁能够访问特定资源或控制对由应用程序提供的资源的访问。
C2等级安全:
下面的列表包含在C2等级安全中最重要的一些要求,它们是有美国国防部提出的:
1、必须能够通过授予或拒绝个人用户和组用户访问某个资源来达到控制访问的目的。
2、当一个进程释放内存后,该内存中的内容不能被读取。同样,一个安全文件系统,例如NTFS,必须防止已删除的文件被读取。
3、当用户需要登录,必须提供一种方式来惟一标识用户。所有的可审计的操作同样能够确定它的执行用户。
4、系统管理员必须能够审计与安全相关的事件。然而,授权管理员不能访问与安全相关事件的审计数据。
5、系统必须能抵抗外部干扰、防止诸如篡改运行中系统、存储在硬盘中的系统文件的操作。
访问控制模型:
访问控制模型允许您控制一个进程访问安全对象或执行诸多系统管理任务的能力(控制进程执行xxx的能力)。访问控制模型有两个基本的组件:
1、访问令牌(包含关于登录用户的信息)
2、安全描述符(包含用于保护一个安全对象的安全信息)
当一个用户要登录,系统验证用户的用户名和密码。如果验证成功,系统创建一个访问令牌。所有以这个用户身份运行的进程都有一份令牌的拷贝。访问令牌包含标识用户账户以及所在组账户的安全标识符。当然,访问令牌还包含很多其它信息,比如用户以及用户所在组的特权列表。当进程试图访问安全对象或者执行需要特权的系统管理任务时,系统使用这个访问令牌识别相应的用户。
每当一个安全对象被创建时,系统将一个安全描述符与对象关联起来,安全描述
符中包含由创建者指定的安全信息,如果创建者没有提供安全信息,那么系统将使用默认的安全信息。应用程序可以调用函数来获得和设置一个已经存在的安全对象的安全信息。
一个安全描述符标识用户的所有者和可以包含下面列出的访问控制列表:
1、一个自主访问控制列表,标识那些用户和组允许或拒绝访问一个对象。
2、一个系统访问控制列表,控制系统审计对对象行为的审计方式(访问成功审计还是访问失败审计等等问题)
一个访问控制列表包含访问控制项的列表。每一个访问控制项包含一个访问权限集、权限集的实施对象(用户、组或会话)的安全标识符和实施动作(允许或拒绝)。
我们并没有直接访问安全描述符、安全标识符和访问控制列表的内容,而是通过函数透明的访问它们的内容。这有助于确保这些结构的完整,同时提供一个统一的操作接口。
访问令牌
访问令牌包含下列信息:
1、用户账户的安全标识符。
2、用户所在组账户的安全标识符,一个用户可能是多个组的成员,所以这里可能有多个。
3、登录会话的登录安全标识符。
4、用户或组的特权列表。
5、所有者安全标识符。
6、基本组的安全标识符。
7、默认的自主访问控制列表,当用户在创建安全对象,但没有指定一个安全描述符时,系统将使用这个默认的自主访问控制列表。
8、访问控制令牌的源。
9、令牌的类型,是一个基本令牌还是一个模仿令牌。
10、可选的受限安全标识符列表
11、当前模仿等级。
12、其它策略。
每一个进程都有一个基本令牌。默认情况下,当一个进程的线程访问一个安全对象时,系统使用基本令牌。但是,一个线程可以代理(扮演)一个客户账户。当一个线程代理一个客户账户时,它会使用客户的安全上下文来访问安全对象。一个代理客户的线程同时拥有基本令牌和代理令牌。
调用OpenProcessToken函数来获得一个进程的基本令牌的句柄。调用OpenThreadToken函数来获取代理令牌的句柄。您可以使用下面列出的函数来操控访问令牌。
函数名函数描述
AdjustTokenGroups更改一个访问令牌的组信息
AdjustTokenPrivileges使令牌中的某些特权生效或失效。但它不能产生新的特权或撤销已经存在的特权。
CheckTokenMembership检测一个特定的安全标识符是否包含在令牌CreateRestrictedToken为一个已经存在的令牌创建一个受限版本的令牌
DuplicateTokenEx Creates a new primary token or impersonation token that duplicates an existing token.
GetTokenInformation Retrieves information about a token.
IsTokenRestricted Determines whether a token has a list of restricting
SIDs.
OpenProcessToken Retrieves a handle to the primary access token for a
process.
OpenThreadToken Retrieves a handle to the impersonation access token
for a thread.
SetThreadToken Assigns or removes an impersonation token for a
thread.
SetTokenInformation Changes a token's owner, primary group, or default
DACL.
The access token functions use the following structures to describe the components of an access token.
Structure Description
TOKEN_CONTROL Information that identifies an access token.
TOKEN_DEFAULT_DACL
The default DACL that the system uses in the security descriptors of new objects created by a
thread.
TOKEN_GROUPS Specifies the SIDs and attributes of the group