强制完整性控制
强制完整性控制使用完整性级别和强制策略来评估权限,这是一种控制安全对象访问的机制
这是从 Windows Vista 新增的安全机制,是对在DACL之前检查
完整性级别
完整性级别用于对安全对象的保护,较低完整性级别的主体无法写入较高完整性级别的对象
完整性标签指定安全对象和安全主体的完整性级别(缺少完整性标签的对象被视为中等完整性),完整性标签由完整性SID表示,安全对象的完整性SID存储在SACL的SYSTEM_MANDATORY_LABEL_ACE这个ACE中,安全主体的完整性SID存储在访问令牌中(可能有多个完整性SID),该SID使用格式为S-1-16-RID,其中RID的值及完整性级别为以下内容:
SECURITY_MANDATORY_UNTRUSTED_RID
0x00000000
不可信
SECURITY_MANDATORY_LOW_RID
0x00001000 (十进制为4096)
完整性低
SECURITY_MANDATORY_MEDIUM_RID
0x00002000 (十进制为8192)
中等完整性
SECURITY_MANDATORY_MEDIUM_PLUS_RID
SECURITY_MANDATORY_MEDIUM_RID + 0x100 (十进制为8448)
中等高完整性
SECURITY_MANDATORY_HIGH_RID
0X00003000 (十进制为12288)
完整性高
SECURITY_MANDATORY_SYSTEM_RID
0x00004000 (十进制为16384)
系统完整性
SECURITY_MANDATORY_PROTECTED_PROCESS_RID
0x00005000 (十进制为20480)
受保护的进程
受保护
默认未被使用,仅能通过内核模式调用设置
系统完整性
这是由本地服务、网络服务和系统账户下运行的进程和服务,该级别是在管理员和系统之间提供一个安全层,即使以管理员身份运行的进程也无法与该级别进程交互
高完整性
这是分配给管理员账户的默认完整性级别,如果开启了UAC,该级别是分配给通过UAC的管理员
中完整性
这是分配给标准用户(包括未过UAC的管理员用户)的完整性级别,该完整性级别的进程只能修改
HKEY_CURRENT_USER、非受保护文件夹中的文件以及具有相同或更低完整性的进程低完整性
该完整级别默认不分配给进程,一般通过继承或父进程设置
该级别的进程只能在
HKEY_CURRENT_USER\Software\AppDataLow下操作,或者将文件写入%USERPROFILE%\AppData\LocalLow目录下不受信任
用于Anonymous组(未经过身份验证的远程用户)启动的进程
注:
进程无法更改自己的完整性等级
进程运行就无法更改完整性等级,但是通过UAC的程序可以提升完整性等级
进程只能创建等同或比自己更低的完整性等级的进程
进程不能修改或写入更高完整性等级的进程或文件,但是有SE_DEBUG_NAME 权限的高完整性等级的进程可以修改更高完整性等级的进程
强制策略
安全对象SACL中定义了SYSTEM_MANDATORY_LABEL_ACE这个ACE,该ACE包含一个访问掩码,在这个策略中用于指定授予低于对象完整性级别的主体的访问,掩码定义值为:
SYSTEM_MANDATORY_LABEL_NO_WRITE_UP (0x1)
SYSTEM_MANDATORY_LABEL_NO_READ_UP(0x2)
SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP (0x4)
默认为SYSTEM_MANDATORY_LABEL_NO_WRITE_UP
一些特权与完整性级别
有些特权是可以直接赋给用户然后就可以执行,但是有些特权只能在高完整性级别下使用,这些特权极为强大,例如:
SeDebugPrivilege 调试程序
SeTakeOwnshipPrivilege 取得所有权
SeRestorePrivilege 还原文件和目录
SeLoadDriverPrivilege 加载和卸载设备驱动程序
SeCreateTokenPrivilege 创建令牌对象
SeTcbPrivilege 以操作系统方式执行
测试
中完整性对高完整性文件操作
测试如图


较低完整性级别的进程为程序或文件无法设置较高的完整性级别
因为强制性策略的默认设置,较低完整性级别可读或运行完整性级别高的文件或程序,但是不可修改
管理员令牌查看
使用windbg内核调试,查看令牌
这是未过UAC的管理员启动的cmd的令牌
这是过了UAC的管理员用户启动的cmd的令牌
对于这两个令牌来说,最大的区别有:
S-1-5-114(管理员组的本地账户和成员)和S-1-5-32-544(管理员)在未过UAC的令牌中式被ban了
最后一个SID即完整性级别,未过UAC是8192对应中完整性级别,过了UAC是12288对应高完整性级别
特权
赋予特权的普通用户令牌查看
这是赋予了SeDebugPrivilege特权的普通用户test1未过UAC启动的cmd令牌
这是赋予了SeDebugPrivilege特权过了UAC启动的cmd的令牌
这两个令牌最主要差距:
最后一个SID即完整性级别差距
特权(过了UAC多了SeDebugPrivilege特权)
查看安全描述符
这是中完整性级别进程的安全描述符,可以在SACL中看见SID对应着中完整性级别
Last updated