Skip to content

EPROCESS token stealing (EX_FAST_REF copy)

Klasik bir Windows kernel post-exploitation payload'ı: SYSTEM process'in EPROCESS.Token'ını attacker process'in token'ı üzerine kopyala, böylece SYSTEM'in security context'ini miras alsın.

Mechanism

Kırılan invariant

_EPROCESS.Token, low bit'lerin bir reference count, üst bit'lerin gerçek token pointer'ını tuttuğu bir _EX_FAST_REF union'ıdır. SYSTEM process'in token değerini attacker process'in token'ı üzerine kopyalayarak attacker process SYSTEM'in security context'ini miras alır — access check daha sonra swap'lenen token'ı okur. Low reference-count bit'leri maskelenmelidir ki geçerli bir pointer yazılsın. Bu, mevcut bir kernel write primitive'i (örn. GDI bitmap R/W ya da bir token-stealing shellcode'undan) varsayan data-only bir post-exploitation adımıdır.

Walkthrough

Kamuya açık writeup'lardan alınmış kavramsal, üst-düzey bir tekrar. Tüm struct offset'leri Windows build'ine göre değişir ve hedef başına çözülmelidir.

  1. GS tabanlı processor block'undan mevcut thread _KTHREAD'ini al, sonra mevcut _EPROCESS'e dereference et.
  2. _EPROCESS structure'larının ActiveProcessLinks doubly-linked list'ini yürü.
  3. Her node'da SYSTEM process'ini (PID 4) tanımlamak için UniqueProcessId'yi 4 ile karşılaştır.
  4. SYSTEM'in Token field'ını (bir _EX_FAST_REF) oku.
  5. Temiz pointer'ı geri elde etmek için low reference-count bit'lerini maskele (örn. x64'te and cl, 0xf0).
  6. Temizlenmiş SYSTEM token'ını mevcut / attacker process'in Token field'ına yaz.
  7. Temiz şekilde dön; attacker process artık SYSTEM yetkileriyle çalışır.
Offset'ler neden kayar

Token, ActiveProcessLinks ve UniqueProcessId offset'leri Windows build'leri arasında değişir (örn. Win10 2004 birkaçını kaydırdı), bu yüzden sağlam payload'lar bunları hardcode etmek yerine dinamik olarak çözer.

Detection

  • Token / SID context'i meşru bir CreateProcessAsUser / service-launch path'i olmadan SYSTEM'e değişen bir process (EDR token-swap sezgileri).
  • Parent / child integrity-level uyuşmazlıkları: medium-integrity bir process'in aniden SYSTEM kullanması.
  • Yetki değişiminden önce gelen kernel-mode code-execution telemetry'si (PatchGuard, HVCI / Code Integrity event'leri).
  • Yeni SYSTEM process'in non-System bir parent'ı olduğu process-handle / soy anomalileri.
  • Davranışsal korelasyon: bilinen bir LPE / driver exploit'inin hemen ardından SYSTEM aktivitesi gelmesi.

Mitigation

  • Bu post-exploitation'dır; birincil savunma onu teslim etmek için kullanılan kernel R/W ya da code-exec'i önlemektir (driver/OS bug'larını yamala).
  • Arbitrary kernel shellcode yürütmesini engellemek için HVCI / VBS ve Kernel CFG.
  • SMEP / SMAP, kernel CET ve KASLR payload'ı çalıştırmanın maliyetini artırır.
  • Protected Process Light (PPL) ve Credential Guard aşağı yöndeki değeri azaltır, artı EDR token-tampering tespitleri.
  • Least privilege ve attack-surface azaltımı, böylece attacker en baştan bir kernel write primitive'ine ulaşamaz.

References