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.
- GS tabanlı processor block'undan mevcut thread
_KTHREAD'ini al, sonra mevcut_EPROCESS'e dereference et. _EPROCESSstructure'larınınActiveProcessLinksdoubly-linked list'ini yürü.- Her node'da SYSTEM process'ini (PID 4) tanımlamak için
UniqueProcessId'yi 4 ile karşılaştır. - SYSTEM'in
Tokenfield'ını (bir_EX_FAST_REF) oku. - Temiz pointer'ı geri elde etmek için low reference-count bit'lerini maskele (örn. x64'te
and cl, 0xf0). - Temizlenmiş SYSTEM token'ını mevcut / attacker process'in
Tokenfield'ına yaz. - 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.