强制完整性控制

强制完整性控制 (MIC) 提供了一种用于控制对安全对象的访问的机制。 此机制是自由访问控制的补充,并在评估 DACL) (针对对象的 任意访问控制列表进行访问 检查之前评估访问权限。

MIC 使用完整性级别和强制策略来评估访问权限。 安全主体 和安全对象被分配用于确定其保护或访问级别的完整性级别。 例如,完整性级别较低的主体不能写入具有中等完整性级别的对象,即使该对象的 DACL 允许对主体进行写入访问。

Windows 定义了四个完整性级别:低、中、高和系统。 标准用户接收中等,提升的用户接收高。 启动的进程和创建的对象会收到完整性级别 (中等或高) 或低(如果可执行文件的级别较低);系统服务接收系统完整性。 缺少完整性标签的对象被操作系统视为中等值;这可以防止低完整性代码修改未标记的对象。 此外,Windows 可确保以低完整性级别运行的进程无法访问与应用容器关联的进程。

完整性标签

完整性标签指定安全对象和安全主体的完整性级别。 完整性标签由 完整性 SID 表示。 安全对象的完整性 SID 存储在其 系统访问控制列表中 , (SACL) 。 SACL 包含 一个SYSTEM_MANDATORY_LABEL_ACE访问控制项 (ACE) ,而该条目又包含完整性 SID。 任何没有完整性 SID 的对象都被视为具有中等完整性的对象。

安全主体的完整性 SID 存储在其访问令牌中。 访问令牌可能包含一个或多个完整性 SID。

有关定义的完整性 SID 的详细信息,请参阅 已知 SID

创建进程

当用户尝试启动可执行文件时,会使用最低用户完整性级别和文件完整性级别创建新进程。 这意味着新进程永远不会以比可执行文件更高的完整性执行。 如果管理员用户执行低完整性程序,则新进程的令牌会以低完整性级别运行。 这有助于保护启动不受信任的代码的用户免受该代码执行的恶意行为的影响。 处于典型用户完整性级别的用户数据受到写入保护,不受此新进程侵害。

强制策略

安全对象的 SACL 中的 SYSTEM_MANDATORY_LABEL_ACE ACE 包含一个访问掩码,该掩码指定向完整性级别低于对象的主体授予的访问权限。 为此访问掩码定义的值为 SYSTEM_MANDATORY_LABEL_NO_WRITE_UPSYSTEM_MANDATORY_LABEL_NO_READ_UPSYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP。 默认情况下,系统会创建访问掩码为 SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 的每个对象。

每个访问令牌还指定一个强制策略,该策略由 本地安全机构 (LSA) 创建令牌时设置。 此策略由与令牌关联的 TOKEN_MANDATORY_POLICY 结构指定。 可以通过调用 GetTokenInformation 函数来查询此结构,并将 TokenInformationClass 参数的值设置为 TokenMandatoryPolicy