<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Windows Token原理及利用

    VSole2021-12-14 13:21:53

    NO.1 登陸會話與訪問令牌

    在windows登錄后,一旦用戶成功通過身份驗證,LSA 將創建一個新的登錄會話并生成一個訪問令牌,一個登錄會話可以有多個關聯的訪問令牌,但一個訪問令牌只能鏈接到一個登錄會話。

    每個新登錄會話都可以通過 64 位本地唯一標識符 (LUID) 進行識別,稱為登錄 ID,并且每個訪問令牌都必須包含一個身份驗證 Id(或 AuthId)參數,該參數通過此 LUID 標識源/鏈接登錄會話。當然,每一個進程也是對應一個訪問令牌并關聯一個登錄會話。

    訪問令牌充當的是登錄會話替身,代表了用戶的安全上下文屬性,比如說SID、GROUP、PRIV等。

    在任務管理器就能看到每個進程對應的用戶,這也是訪問令牌其中的一個標識:

    NO.2 令牌的作用

    每一個進程都都有一個唯一的主令牌,而一個進程可以有多個線程。每當線程嘗試訪問由 Windows 內核管理的安全對象時,例如進程、線程、句柄、令牌等,Windows 都會執行訪問檢查:

    • 誰請求的訪問?
    • 它訪問對象的意圖是什么?
    • 誰可以訪問對象?

    首先,Windows會檢查調用線程關聯的令牌的授權屬性(例如,用戶 sid、組成員身份、權限等),然后Windows 將查看線程請求的所需訪問權限,最后還需要表明訪問的意圖。

    在檢查過程中,Windows會檢索目標對象的安全描述符。安全描述符包含一個自由訪問控制列表(DACL ),它指定哪些用戶/組有權訪問對象以及授予的訪問權限。

    某些特權可以使用戶繞過內核中對給定對象的訪問檢查。例如,如果令牌啟用了SeDebugPrivilege特權,Windows內核將跳過對任何進程和線程對象的DACL檢查。常見的濫用比如:憑據竊取、提權、防御規避等。

    除了SeDebugPrivilege,還有其他特權也經常被攻擊者濫用:

    1.SeBackupPrivilege

    描述:此權限使授予對任何文件的所有讀取訪問控制權,而不管為該文件指定的[訪問控制列表](https://msdn.microsoft.com/library/windows/desktop/ms721532#-security-access-control-list-gly)(ACL)。

    攻擊場景:收集

    2.SeCreateTokenPrivilege

    描述:需要創建主令牌。

    攻擊場景:權限提升

    3.SeLoadDriverPrivilege

    描述:需要加載或卸載設備驅動程序。

    攻擊場景:持久化;防御規避

    4.SeRestorePrivilege

    描述:需要執行還原操作。此特權使系統授予對任何文件的所有寫訪問控制,而不管為文件指定的 ACL。

    攻擊場景:持久化;防御規避

    5.SeTakeOwnershipPrivilege

    描述:需要獲得對象的所有權而不被授予自由訪問權限。

    攻擊場景:持久化;防御規避;收集

    6.SeTcbPrivilege

    描述:此權限將其持有者標識為受信任計算機庫的一部分。某些受信任的受保護子系統被授予此特權。

    攻擊場景:權限提升

    NO.3 模擬令牌

    模擬是指在安全上下文中執行線程的功能,該上下文不同于擁有該線程的進程的上下文。在客戶端的安全上下文中運行時,服務器在一定程度上"是"客戶端。服務器線程使用代表客戶端憑據的訪問令牌來獲取對客戶端具有訪問權限的對象的訪問權限。

    訪問令牌是描述進程或線程的安全上下文的對象。它們提供的信息包括用戶帳戶的標識和用戶帳戶可用的特權子集。每個進程都有一個 主訪問令牌 ,用于描述與進程關聯的用戶帳戶的安全上下文。默認情況下,當進程的線程與安全對象交互時,系統將使用主標記。但是,當線程模擬客戶端時,模擬線程同時具有主訪問令牌和模擬令牌。模擬標記代表客戶端的安全上下文,此訪問令牌是在模擬期間用于訪問檢查的令牌。當模擬結束時,該線程會恢復為僅使用主訪問令牌。

    默認情況下,所有線程都將繼承與其進程的主令牌相同的安全上下文。但是,模擬允許線程切換到不同的安全上下文。

    NO.4 令牌的利用

    攻擊者可以通過三種方法利用訪問令牌:

    假冒/竊取令牌攻擊者創建一個新的訪問令牌,該令牌使用 DuplicateToken(Ex) 復制現有令牌。

    使用令牌創建進程攻擊者創建一個新的訪問令牌,并使用它創建一個在模擬用戶的安全上下文下運行的新進程。

    制作和模擬令牌對手擁有用戶名和密碼,但用戶未登錄系統。攻擊者可以使用該功能為用戶創建登錄會話。該函數將返回新會話的訪問令牌的副本,攻擊者可以使用該令牌將令牌分配給線程。

    NO.5 竊取/模擬令牌流程

    一般的利用流程為:

    WindowsPrincipal:判斷當前權限

    LookupPrivilegeValue:判斷是否擁有SeDebugPrivilege權限

    OpenProcess:打開進程獲取句柄

    OpenProcessToken:打開進程令牌獲取hToken

    DuplicateToken:復制令牌

    CreateProcessWithTokenW:啟動進程

    NO.6 其他問題

    竊取問題

    在竊取令牌時會發現,并不是所有的進程都能進行令牌竊取,這跟OpenProcess()提供的訪問權限有關:

    當我們使用 PROCESS_QUERY_INFORMATION 或 PROCESS_ALL_ACCESS 的訪問權限對某些 SYSTEM 進程調用 OpenProcess() 時,我們可以成功竊取這些進程的訪問令牌。這些進程包括:

    dllhost.exelsass.exe OfficeClickToRun.exe svchost.exe(只適用于某些PID)Sysmon64.exeunsecapp.exe VGAuthService.exevmacthlp.exe vmtoolsd.exe winlogon.exe
    

    對于受 PPL 保護的某些 SYSTEM 進程,如果我們以 PROCESS_QUERY_LIMITED_INFORMATION 訪問權限調用 OpenProcess(),還是能夠竊取訪問令牌,這些進程包括:

    csrss.exeMemory Compression.exe services.exesmss.exewininit.exe
    

    總結:

    • 如果想在某個進程上調用OpenProcessToken(),那么BUILTIN\Administrator必須為TokenOwner
    • 如果SYSTEM進程受PPL(Protected Process Light)保護,那么我們必須使用PROCESS_QUERY_LIMITED_INFORMATION訪問權限來調用OpenProcess()

    權限問題

    模擬令牌的完整性級別必須小于或等于調用進程的完整性級別,否則模擬調用也將失敗。比如,在開啟UAC的情況下只能模擬未提升權限的(過濾的)中等完整性令牌。

    NO.7 參考

    https://0x00-0x00.github.io/research/2018/10/17/Windows-API-and-Impersonation-Part1.html

    https://0x00-0x00.github.io/research/2018/10/21/Windows-API-And-Impersonation-Part-2.html

    https://www.elastic.co/cn/blog/introduction-to-windows-tokens-for-security-practitioners

    https://www.elastic.co/cn/blog/how-attackers-abuse-access-token-manipulation

    https://s3cur3th1ssh1t.github.io/SharpImpersonation-Introduction/

    https://www.mcafee.com/enterprise/en-us/assets/reports/rp-access-token-theft-manipulation-attacks.pdf

    https://blog.palantir.com/windows-privilege-abuse-auditing-detection-and-defense-3078a403d74e

    https://securitytimes.medium.com/understanding-and-abusing-process-tokens-part-i-ee51671f2cfa

    https://github.com/001SPARTaN/FaceDancer/blob/master/FaceDancer/FaceDancer.cs

    線程上下文
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    任務的狀態保存及再加載, 這段過程就叫做上下文切換。上下文切換會導致額外的開銷,常常表現為高并發執行時速度會慢串行,因此減少上下文切換次數便可以提高多線程程序的運行效率。在這種機制下,一個線程的堵塞不會導致整個進程堵塞。當CPU接收到中斷請求時,會在正在運行的程序和發起中斷請求的程序之間進行一次上下文切換。高并發,低耗時的情況,建議少線程
    判斷父進程是否存在,不存在則退出,否則,調用PspCreateProcess。判斷創建標志是否包含除DEBUG_PROCESSDEBUG_ONLY_THIS_PROCESS,CREATE_SUSPENDED之外其它標志, 如果包含其他的標志,則報錯退出。該函數會調用SeSubProcessToken函數來設置新進程對象的令牌對象。
    OceanLotus APT樣本逆向分析
    Apache為Log4Shell提供的快速補丁也有漏洞,可導致DoS攻擊。
    不可中斷狀態實際上是系統對進程和硬件設備的一種保護機制。當負載存在明顯升高趨勢時,及時進行分析和調查。系統調用過程中并不會涉及虛擬內存等進程用戶態資源,也不會切換進程。因此系統調用通常稱為特權模式切換。進程是由內核管理和調度的,進程上下文切換只能發生在內核態。因此相比系統調用來說,在保存當前進程的內核狀態和CPU寄存器之前,需要先把該進程的虛擬內存,棧保存下來。
    APT29,又名CozyBear, Nobelium, TheDukes,奇安信內部編號APT-Q-77,被認為是與東歐某國政府有關的APT組織。該組織攻擊活動可追溯至2008年,主要攻擊目標包括西方政府組織機構、智囊團。APT29曾多次實施大規模魚叉攻擊,收集攻擊目標機構或附屬組織的人員信息,并針對其中的高價值目標采取進一步的網絡間諜活動。
    背景描述: Agent Tesla為一款知名的商業竊密木馬,自從2014年Agent Tesla被發現以來一直非常活躍,多個變種層出不窮,主要由.Net 編寫,用于從失陷主機上竊取敏感信息,如剪貼板數據,鍵盤按鍵記錄,能夠從Web瀏覽器,電子郵件客戶端和FTP服務器訪問信息,屏幕截圖等。
    前言對于進程隱藏技術有很多種實現方式,本文就對傀儡進程進行分析及實現。 基礎知識掛起方式創建進程我們知道如果進程創建之后會在內存空間進行拉伸,那么我們如果需要寫入shellcode,只能在程序運行之前寫入,因為當程序運行起來之后是不能夠進行操作的。但是有一個例外,如果我們以掛起模式創建進程,寫入shellcode到內存空間,再恢復進程,也能夠達到同樣的效果。
    CVE-2020-14756 這個漏洞的利用比較巧妙,通過利用weblogic coherence組件中的類,繞過了黑名單機制的檢測,重新能夠利用黑名單中的類,造成代碼執行。readExternal和writeExternal方法 而ExternalizableLite接口的對象可以在里被序列化。在put方法里,調用了compare方法而這里又會調用WrapperComparator的compare方法 這個f_comparator就是之前已經賦值過的。然后又會調用子類MvelExtractor的extract方法。這里不但會將ObjectInput轉為DataInput,還會主動調用。判斷輸入流類型之后,調用了readObject。然后通過getObjectInputFilter/getInternalObjectInputFilter方法去獲取serialFilter,之后,調用checkInput,對當前序列化的類進行檢測。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类