一、概述
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可以大大提高系统的安全性。
原创文章,作者:WEAO,如若转载,请注明出处:https://www.506064.com/n/136641.html
微信扫一扫
支付宝扫一扫