一、概述
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/zh-hk/n/136641.html