什麼是UAC
使用者帳戶控制 (UAC) 是 Windows Vista 的一項功能,其中使用者帳戶具有有限的許可權。
啟用UAC後,在使用者沒有顯示允許的情況下,即便是本地管理員賬戶也無法更改作業系統,這在很大程度上保護了我們的系統安全。
UAC的主要目的是確保應用程式只限於標準使用者許可權,當需要其他許可權時,會彈框提示詢問 "是否允許以下程式對此計算機進行更改?"
A well designed User Account Control experience helps prevent unwanted system-wide changes in a way that is predictable and requires minimal effort.
With User Account Control (UAC) fully enabled, interactive administrators normally run with least user privileges, but they can self-elevate to perform administrative tasks by giving explicit consent with the Consent UI.
In their least-privileged state, administrators are referred to as Protected administrators. In their elevated state, they are referred to as Elevated administrators. By contrast, Standard users can't elevate by themselves, but they can ask an administrator to elevate them using the Credential UI. The Built-in Administrator account doesn't require elevation.
UAC manifest
prompt for elevation
UAC的實現方法(使用者登陸過程)
常見SID:
500(Administrator)
501(Guest)
502(Krbtgt)
512(Domain Admins)
513(Domain Users)
515(Domain Computers)
516(Domain Controllers)
519(Enterprise Admins)
當使用者登入系統成功後, 系統會為使用者生成一個accessToken。該使用者呼叫的每一個程式都會有一個AccessToken copy。當程式要訪問某個securable object 時,系統會比對accessToken擁有的許可權(previlages 是否能訪問securable object)
如果安全描述符中不存在DACL,則系統會允許執行緒進行訪問。如果存在DACL,系統會順序遍歷DACL中的每個ACE,檢查ACE中的SID線上程的AccessTkoen中是否存在。以訪問者中的User SID或Group SID作為關鍵字查詢被訪問物件中的DACL。順序:先查詢型別為DENY的ACE,若命中且許可權符合則訪問拒絕;未命中再在ALLOWED型別的ACE中查詢,若命中且型別符合則可以訪問;如果前兩步後還沒命中那麼訪問拒絕
https://rootclay.gitbook.io/windows-access-control/1.-windows-fang-wen-kong-zhi-mo-xing
觸發流程
在觸發 UAC 時,系統會建立一個consent.exe程式,該程式透過白名單程式和使用者選擇來判斷是否建立管理員許可權程式。請求程式將要請求的程式cmdline和程式路徑透過LPC介面傳遞給appinfo的RAiLuanchAdminProcess函式,該函式首先驗證路徑是否在白名單中,並將結果傳遞給consent.exe程式,該程式驗證被請求的程式簽名以及發起者的許可權是否符合要求,然後決定是否彈出UAC框讓使用者進行確認。這個UAC框會建立新的安全桌面,遮蔽之前的介面。同時這個UAC框程式是SYSTEM許可權程式,其他普通程式也無法和其進行通訊互動。使用者確認之後,會呼叫CreateProcessAsUser函式以管理員許可權啟動請求的程式。
1、https://github.com/hfiref0x/UACME
2、利用白名單Bypass UAC