【windows 訪問控制】一、訪問令牌


 

訪問令牌(Access tokens)

訪問令牌是描述進程或線程的安全上下文的對象。令牌中的信息包括與進程或線程關聯的用戶帳戶的標識和特權信息。當用戶登錄時,系統通過將用戶密碼與安全數據庫(如域認證中的NTDS或本地認證中的SAM文件)中存儲的信息進行比較來驗證用戶密碼。如果密碼經過驗證,則系統將生成訪問令牌。代表該用戶執行的每個進程都有此訪問令牌的副本。(通常我們在輸入密碼登陸進入Windows界面時就是一個生成訪問令牌的過程)當線程與安全對象進行交互或嘗試執行需要特權的系統任務時,系統使用訪問令牌來標識用戶。訪問令牌包含以下信息:

 Access Token的組成

  1.     用戶賬戶的安全標識符(SID)
  2.     用戶所屬的組的SID
  3.     用於標識當前登陸會話的登陸SID
  4.     用戶或用戶組所擁有的權限列表
  5.     所有者SID
  6.     主要組的SID
  7.     訪問控制列表
  8.     訪問令牌的來源
  9.     令牌是主要令牌還是模擬令牌
  10.     限制SID的可選列表
  11.     目前的模擬等級
  12.     其他統計的數據

 

Windows Access Token分兩種:       

訪問令牌(Access Token)是Windows操作系統用描述進程或者線程安全上下文的一個對象。
Windows下有兩種類型的Token令牌:授權令牌和模擬令牌。

  • 授權令牌(Delegation Token)

  • 也叫主令牌,是由windows內核創建並分配給進程的默認訪問令牌,每一個進程有一個主令牌,它描述了與當前進程相關的用戶帳戶的安全上下文。用於交互式登錄(如rdp登錄訪問)。

  • 模擬令牌(Impersonation Token)

  • 所在進程的主令牌會自動附加到當前的線程上,作為線程的安全上下文。而線程可以運行在另一個非主令牌的訪問令牌下執行,而這個令牌被稱為模擬令牌。用於非交互式的會話(利用WMI進行遠程訪問)。

主令牌與進程相關;模擬令牌與模擬令牌的線程相關。

注:兩種令牌會在系統重啟或者關機后才會全部清除,不然將會一直在內存中存留。也就是說,如果機器不關機或者重啟的話,就會存在散落的令牌。在系統注銷后,具有授權令牌的用戶會變為模擬令牌Impersonation Token,但依然有效。默認情況下,當前用戶只能看到當前用戶自己和比自己權限低的所有訪問令牌。

每個進程都有一個主要令牌,用於描述與該進程關聯的用戶帳戶的安全上下文。默認情況下,當進程的線程與安全對象進行交互時,系統使用主令牌。
此外,線程可以模擬客戶端帳戶。模擬允許線程使用客戶端的安全上下文與安全對象進行交互。模擬客戶端的線程同時具有主令牌和模擬令牌。(出現這種情況是因為服務操作是在寄宿進程中執行,在默認的情況下,服務操作是否具有足夠的權限訪問某個資源(比如文件)取決於執行寄宿進程Windows帳號的權限設置,而與作為客戶端的Windows帳號無關。在有多情況下,我們希望服務操作執行在基於客戶端的安全上下文中執行,以解決執行服務進行的帳號權限不足的問題。簡單來說就是我們希望不同客戶端來訪問服務時,服務可以模擬客戶端的身份去訪問服務,而不是用自己的主進程Token身份去訪問。)

Windows Access Token的產生過程

  1. 使用憑據(用戶密碼)進行認證
  2. 當前登錄會話(Session)的創建
  3. Windows此時會返回用戶sid和用戶組sid
  4. LSA(Local Security Authority)創建一個Token
  5. 依據該token創建進程、線程(如果CreaetProcess時自己指定了 Token, LSA會用該Token, 否則就繼承父進程Token進行運行)

 

特權 (Privilege)

 

系統有一個帳戶數據庫,存儲了用戶或用戶群的特權。當用戶登錄后,系統產生一個訪問令牌(access token)包含了用戶的特權清單,這包含用戶所在群的特權。注意特權僅限於本地計算機,域帳戶在不同計算機上有不同特權。

當用戶試圖執行一個特權操作,系統檢查用戶的訪問令牌以確定使用是否具有必要的特權。調用GetTokenInformation函數可以檢查特權。

另外,還有令牌中的權限列表,權限與對象訪問無關,所以與安全描述符,SID等無關。當線程執行一些管理相關的操作時,系統會檢查該線程的令牌中是否含有特定的權限,如果有,則允許線程執行該操作,否則拒絕。

命令行獲取訪問令牌的信息

獲取 當前登錄的用戶的訪問令牌信息:whoami /all

    WHOAMI /UPN   //用戶主體 (User Principal) 格式顯示用戶名 名稱 (UPN)格式。
    WHOAMI /FQDN    // 用完全合格的 (Fully Qualified) 格式顯示用戶名 可分辨名稱(FQDN) 格式。        
    WHOAMI /LOGONID  //  顯示當前用戶的登錄 ID。
    WHOAMI /USER    //  顯示當前用戶的信息以及安全標識符 (SID)。
    WHOAMI /USER /FO LIST
    WHOAMI /USER /FO CSV
    WHOAMI /GROUPS   //顯示當前用戶的組成員信息、帳戶類型和安全  標識符 (SID) 和屬性。
    WHOAMI /GROUPS /FO CSV /NH   //NH指定在輸出中不顯示列標題。只對 TABLE 和 CSV 格式有效。
    WHOAMI /PRIV    // 顯示當前用戶的安全特權。
    WHOAMI /PRIV /FO TABLE    //指定要顯示的輸出格式。有效值為 TABLE、LIST、     CSV。CSV 格式不顯示列標題。默認格式是 TABLE。
    WHOAMI /USER /GROUPS
    WHOAMI /USER /GROUPS /PRIV
    WHOAMI /ALL   //顯示當前用戶名、屬於的組以及安全標識符(SID) 和當前用戶訪問令牌的特權。
    WHOAMI /ALL /FO LIST
    WHOAMI /ALL /FO CSV /NH
    WHOAMI /?    //顯示此幫助消息。

 

編寫一個模擬令牌demo

https://www.anquanke.com/post/id/204721

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM