Token權限是在Windows內部用來判斷使用者有沒有權限來讀取process/thread,像是執行特定項目或是允許存取哪些資料,我們可以透過指令whoami /priv來查看帳號的特權權限(privilege)。


  而這些特權權限我們整理了七個值得注意的部分,有些主要出現在服務帳號,有些是用於特定服務(ex.印表機),這些都是需要開啟才能正常運作的權限,因此更需要注意有沒有哪些帳號明明不需要卻被賦予或主動要求了這些權限,或是這些服務被攻擊之後有可能會被拿來進行哪些利用。


  SeImpersonatePrivilege可以模擬身分驗證後的client(Impersonatea client),除了有權利可以控制服務控制管理員(SCM)啟動的服務之外,還可以用特定帳戶權限運行COM服務,並呼叫CreateProcessWithToken


  SeAssignPrimaryPrivilege可以調用CreateProcessAsUser,他允許利用systemtoken創建新的process


  上面兩個權限通常會在出現在服務帳號上,像是IIS相關或是SQLserver相關服務。假如有SeImpersonatePrivilege以及SeAssignPrimaryPrivilege的其中一個,就可以執行potato系列的攻擊,像是juicy potatoprintspoofer(以前我們有介紹過的攻擊)


  SeTcbPrivilege可以讓程式以作業系統權限執行,通常用於程式和系統溝通的情況。因為權限極高,通常不會直接給予使用者或群組等實體。假如擁有此權限可以用KERB_S4U_LOGON取得假冒特定使用者的token,也可使用LsaLogonUser取得token可以添加到local system account group,因此相當於擁有了system權限。


  SeBackupPrivilege代表有備份權限,有對任意系統文件的讀取權限,那麼就可能會被讀取隱私資料(包括ntds.dit/SAM/SYSTEM檔案)或是讀取registry


  SeRestorePrivilege代表有還原權限,有對任意系統文件的寫入權限,那麼就可以達成dll挾持或是修改registry(ex.修改防護設定、加入後門)


  假如SeRestorePrivilege和上面的SeBackupPrivilege一起,那麼就可以將整個電腦備份出來讀取隱私資料或ntds.dit/SAM/SYSTEM


  SeLoadDriverPrivilege代表有載入/卸載driver的權限,通常管理員和Print Operators預設會有這個權限。這個權限可以用來載入惡意的驅動,來達到滲透或是維持後門。


  SeDebugPrivilege是用來偵錯程式的權限,可以偵錯和調整其他帳號所執行的程序(包含記憶體),因此可以將惡意dll塞入記憶體中執行,而且這個方法還可以躲避防毒等偵測方式。


  簡單介紹了以上七種權限的用途,每個權限都有它存在的必要,但我們需要注意安全性的部分,必須適時的根據AD架構來給予權限,並時刻注意權限是否被濫用。可以參考ATT&CKT1134 Access Token ManipulationProcedure Examples裡面有許多利用privilege達成攻擊的案例。


  想了解更多產品資訊,請連至官網https://www.neithnet.com/zh/,或直接與NEITHNET資安專家聯繫:info@neithnet.com


參考資料:

 1.https://learn.microsoft.com/zh-tw/windows/win32/secauthz/privilege-constants
 2.https://www.exploit-db.com/exploits/42556
 3.https://attack.mitre.org/techniques/T1134/