强制完整性控制
强制完整性控制 (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_UP、 SYSTEM_MANDATORY_LABEL_NO_READ_UP 和 SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP。 默认情况下,系统会创建具有访问掩码 SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 的每个对象。
每个访问令牌还指定在创建令牌时由本地安全机构 (LSA) 设置的强制策略。 此策略由与令牌关联的 TOKEN_MANDATORY_POLICY 结构指定。 可以通过调用 GetTokenInformation 函数,并将 TokenInformationClass 参数的值设置为 TokenMandatoryPolicy 来查询此结构。