用户界面特权隔离

科技工作者之家 2020-11-17

用户界面特权隔离(User Interface Privilege Isolation,简称UIPI),是从Windows NT 6.0开始引入的技术。通过结合强制完整性控制,用户界面特权隔离阻止较低等完整性级别(Integrity level)的进程向较高等完整性级别进程的窗口发送消息,但也有一些消息不被阻止。

简介用户界面特权隔离(User Interface Privilege Isolation,简称UIPI),是从Windows NT 6.0开始引入的技术。其目的在于防止粉碎窗口攻击。通过结合强制完整性控制,用户界面特权隔离阻止较低等完整性级别(Integrity level)的进程向较高等完整性级别进程的窗口发送消息,但也有一些消息不被阻止。Windows消息是一种进程间通信机制,可被低等完整性级别的恶意软件利用,在较高等完整性级别的进程上下文里执行任意代码,可能允许特权提升。1

特点用户界面特权隔离和强制完整性控制都不是安全边界,它并不能完全抵挡粉碎窗口攻击。用户界面辅助功能程序可以通过在它们的应用程序清单(manifest)文档中将“uiAccess”设为TRUE来绕过用户界面特权隔离。这些程序必须位于Program Files或Windows文件夹中,且必须拥有有效的数字签名。此外,一些消息仍然被允许,例如WM_KEYDOWN,以便低完整性级别的程序发送输入到提升后的命令提示符。最后,函数ChangeWindowMessageFilter允许中完整性级别的进程改变高完整性级别的进程能从低完整性级别的进程接收什么消息。1

强制完整性控制强制完整性控制(英语:Mandatory Integrity Control)是一个在微软Windows操作系统中从Windows Vista开始引入,并沿用到后续版本系统的核心安全功能。强制完整性控制通过完整性级别标签来为运行于同一登录会话的进程提供隔离。此机制的目的是在一个潜在不可信的上下文(与同一账户下运行的其他较为可信的上下文相比)中选择性地限制特定进程和软件组件的访问权限。

强制完整性控制在对象的安全描述符中使用了一个新的访问控制项(ACE)类型来代表对象的完整性级别。在Windows中,访问控制列表(ACL)被限制为授予访问权限(读取、写入、执行权限)和特权给用户和组。在安全引用监视器执行授权授予对象的访问权限前,会将访问令牌中的完整性级别与安全描述符中的完整性级别比较。Windows 根据主体的完整性级别是高于还是低于所请求的对象,以及访问控制项中的完整性策略标志来决定是否授予访问权限。安全子系统以强制标签的形式实现完整性级别,以便和访问控制列表提供的自由访问控制区别开来。

Windows Vista定义了四个完整性级别:低(SID: S-1-16-4096)、中(SID: S-1-16-8192)、高(SID: S-1-16-12288)、系统(SID: S-1-16-16384)。默认情况下,普通用户启动的进程将获得中完整性级别,而提升的进程则获得高完整性级别。通过引入完整性级别,强制完整性控制可以分类隔离程序,使得沙箱化潜在危险程序(如进行网络通信的程序)成为可能。低完整性进程所拥有的访问权限少于那些拥有更高完整性级别的进程。

带有访问控制列表的对象(如命名对象,包括文件、注册表项,甚至进程和线程)有一个访问控制项,定义着最低需要哪个完整性级别才能访问此对象。Windows确保只有当进程的完整性级别等于或高于所请求的对象的完整性级别时,它才能写入或删除此对象。此外,拥有更高完整性级别的进程对象甚至不允许读取访问。

于是,一个进程就不能与另一个更高完整性级别的进程交互了。所以,进程不能通过CreateRemoteThread()API执行DLL注入到更高完整性级别的进程之类的功能,也不能使用WriteProcessMemory()函数发送数据到另一个进程。2

本词条内容贡献者为:

任毅如 - 副教授 - 湖南大学

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。