一、概述
Windows UAC,即用户账户控制,是Windows Vista及以上版本引入的一种安全特性。它的主要目的是在用户与系统管理员之间建立一个防火墙,防止管理员不经意间的恶意或者误操作造成的灾难性后果。该技术与Unix/Linux的权限管理类似,可以限制应用程序如何影响系统,并提示用户在危险操作之前进行确认。在Windows系统中,UAC是一个与系统权限有关的难点,它不仅仅与前端的UI弹出框有关,还有与权限级别相关的API调用以及访问受限制的资源。
二、UAC的工作原理
Windows UAC的工作原理是利用互相矛盾的权限来实现,通常来说管理员会运行某些需要高权限才能运行的应用,而用户则需要一个类似管理员一样的权限才能够运行这些应用。UAC就是通过弹出请求确认的UI框和权限操作掩码等实现的。具体来说,当运行一个需要高权限的应用时,Windows就会弹出一个确认操作的UI界面,如果用户同意,那么此次操作将会获得管理员权限,否则只能以旧有用户权限运行,这种方式可以使管理员和用户拥有不同的权限等级,从而降低系统被攻击的风险。
三、UAC实现过程
UAC的实现过程可以分为以下几个步骤:
1、确定当前用户是否有管理员权限
2、如果没有管理员权限,提升权限等级
3、通过API获取权限掩码
4、访问资源并执行操作
以下是一个简单的代码示例:
BOOL IsUserAdmin() { BOOL fReturn = FALSE; DWORD dwStatus; DWORD dwAccessMask; DWORD dwAccessDesired; DWORD dwACLSize; DWORD dwStructureSize = sizeof(PRIVILEGE_SET); PACL pACL = NULL; PSID pSIDAdmin = NULL; HANDLE hToken = NULL; PRIVILEGE_SET ps; GENERIC_MAPPING GenericMapping; SECURITY_DESCRIPTOR sd; SECURITY_DESCRIPTOR sdAdmin; SECURITY_QUALITY_OF_SERVICE sqos; ULONG lInfoLength; GenericMapping.GenericRead = GENERIC_READ; GenericMapping.GenericWrite = GENERIC_WRITE; GenericMapping.GenericExecute = GENERIC_EXECUTE; GenericMapping.GenericAll = GENERIC_ALL; dwStatus = AllocAndInitializeSid( &gSystemSidAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pSIDAdmin); if (dwStatus == ERROR_SUCCESS) { if (ImpersonateSelf(SecurityImpersonation) == TRUE) { if (OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE, &hToken) == FALSE) { if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken) == FALSE) { RevertToSelf(); goto Cleanup; } } if (hToken != NULL) { if (AccessCheck(&sd, hToken, dwAccessDesired, &GenericMapping, &ps, &dwStructureSize, &dwStatus, &fReturn)) { if (fReturn) { // ... User is an admin } } CloseHandle(hToken); } RevertToSelf(); } } Cleanup: if (pSIDAdmin) FreeSid(pSIDAdmin); if (pACL) LocalFree(pACL); return(fReturn); }
四、UAC的优缺点及适用范围
优点:
1、Windows系统管理员和普通用户权限能够分别独立管理,降低了管理员被攻击的风险;
2、提供了一个规则化的、标准化的管理策略,方便管理;
3、可以通过SDK对API调用进行限制,提高系统的稳定性。
缺点:
1、弹出过多的UI界面,降低了用户体验;
2、会对进程的CPU和内存资源造成额外开销,降低系统性能;
3、在特殊情况下(如病毒篡改或者UAC弹窗伪造),会影响系统安全。
适用范围:
用户账户控制几乎适用于任何需要对安全性进行控制的Windows应用程序,特别是那些需要系统管理员权限才能运行的程序。在家庭电脑上,用户不一定需要用到UAC,但在商务办公场景,使用UAC可以大大提高系统的安全性。