目录
用户账号控制(User Account Control) 为Windows Vista推出的一项安全技术,其原理是通过限制安全应用软件对系统层级的访问,提升Windows操作系统的安全性。
可以在用户控制设置里面设置级别
使用win+R打开运行框,输入msconfig进入系统配置中
第一级别(最高级别):对所有安全系统设置的行为(如安装程序,更改Windows设置)进行提醒
第二级别(默认级别):仅在程序尝试改变系统设置时才会弹出UAC提醒,用户更改系统设置时不会弹
第三级别:仅当程序尝试更改计算机时通知提示,用户自行设置更改计算机时不会弹出(与第二种基本相同,但是不会使用安全桌面)
第四级别:从来不提示(相当于关闭了UAC)
windows 7中开始涉及UAC的操作时弹出一个窗口,并且会黑屏询问你是否继续使用电脑处于“安全桌面”状态。
以下动作会触发UAC:
配置windows update
增加或者删除用户
改变用户类型
改变UAC设置
安装ActiveX
安装或移除程序
安装设备驱动程序
设置家长控制
查看其他用户文件夹
更改注册表
更改系统保护或者高级系统设置
UAC触发流程:
在触发 UAC 时,系统会创建一个consent.exe进程,该进程通过白名单程序和用户选择来判断是否创建管理员权限进程。请求进程将要请求的进程cmdline和进程路径通过LPC接口传递给appinfo的RAiLuanchAdminProcess函数,该函数首先验证路径是否在白名单中,并将结果传递给consent.exe进程,该进程验证被请求的进程签名以及发起者的权限是否符合要求,然后决定是否弹出UAC框让用户进行确认。这个UAC框会创建新的安全桌面,屏蔽之前的界面。同时这个UAC框进程是SYSTEM权限进程,其他普通进程也无法和其进行通信交互。用户确认之后,会调用CreateProcessAsUser函数以管理员权限启动请求的进程。
在整个Windows操作系统资源中会有一个ACL,这个ACl决定了各个不同的权限的用户/进程能够访问不同的资源。
当一个线程尝试访问某个对象时,当前的系统会先检查该线程所持有的访问令牌以及被访问对象的安全描述符中的DACL规则。
如果安全描述符中不存在DACL规则,则当前系统会允许线程直接访问。
线程访问对象的流程:
略
正常来说,在我们使用账号登录操作系统会产生令牌令牌会记载我们所拥有的权限。
如果我们以管理员权限进行登录,会生成两份访问令牌:标准用户访问令牌和完全管理员访问令牌
下面这幅图展示了管理员用户和普通用户的登录过程
UAC的用户登录过程如下:
Administrato用户的UAC验证过程:
当我们登录的是Adminitrator用户的时候(已经开启UA,想要在管理控制台中执行“添加/删除用户”操作,UAC会弹出“安全桌面”
可以根据实际情况选择是或者否。
出现这种情况的原因是,在访问之前系统会 先检查进程所持有的访问令牌以及被访问对象的安全描述符中的DACL规则,确保携带的令牌以及规则正确无误。因为我们携带的访问令牌是权限最低状态下的受保护的管理员访问令牌,所以当进程请求触发了UAC操作的时候,UAC就会弹出通知,询问我们是否允许。
单机“是”按钮,其实就是向进程发送了我们的管理员令牌,使得管理员的状态由“受保护状态”变更为提升状态。
标准用户的UAC验证过程:
标准用户登录后,windows会给用户分配一个标准用户访问令牌
要访问某个携带标准用户访问令牌的进程,在进程触发UAC操作的时候会弹出通知,让我们输入管理员密码
此时我们并不具备管理员的访问令牌,通过输入管理员密码可以获取管理员的访问令牌操作。
输入管理员密码的过程本质上是通过管理员凭据为标准用户提权
又称为UAC重定向,当用户没有达到程序要求的权限时,就会进行重定向操作
虚拟化又被分为:文件虚拟化和注册表虚拟化
例如:如果一个程序试图写入C:\Program Files\Contoso\Settings.ini,但是用户没有写入那个目录的权限,这个写操作就会被重定向到
C:\Users\Username\AppData\Local\VitualStore\Program Files\Contoso\Settings.ini
对于注册表来说,如果一个程序视图写入HKEY_LOCAL_MACHINE\Software\Contoso,它会自动被重定向到
HKEY_CURRENT_USER\Software\Classes\VirtualStore\Machine\Sofreware\Contoso或
HKEY_USERS\UserSID_Classes\VirtualStore\Machine\Sofreware\Contoso
若要配置 UAC,可以使用:
Microsoft Intune/MDM
组策略
注册表