Skip to content

HEVD Pool Buffer Overflow scenario

HackSys Extreme Vulnerable Driver pool-overflow IOCTL'inin kavramsal kataloğu: kontrol edilmeyen bir copy, non-paged pool chunk'ını taşırıp komşu allocation'ın header/içeriğine yazar.

Mechanism

Eğitim amaçlı bug

HEVD pool handler'ı sabit boyutlu bir non-paged chunk allocate eder (ExAllocatePoolWithTag, örn. _POOL_HEADER'ı ile birlikte 0x200 bucket'ını dolduran bir 0x1F0 body) ve user verisini kontrol edilmeyen bir length ile kopyalar. Overflow chunk'ı aşıp komşu pool allocation'a taşar ve onun _POOL_HEADER'ını ve/veya object içeriğini bozar.

Geçersiz _POOL_HEADER'a sahip bir freed chunk bugcheck tetiklediği için, exploitation körlemesine smashing değil hassas, header'ı dikkate alan bir corruption gerektirir. Sınır, field'ları daha güçlü bir primitive sağlayan seçilmiş bir komşu object'in bozulmasıyla aşılır.

Sibling HEVD Stack Buffer Overflow scenario'dan farkı: o, stack frame'inin saklı return address'ini overwrite edip kontrol akışını doğrudan ele geçirir; bu not ise heap (non-paged pool) üzerinde komşu allocation'ın header/içeriğini bozarak dolaylı bir data-only / object-corruption primitive'i kurar.

Walkthrough

Üst seviye (rootkit, h0mbre, Connor McGarr, insideyourkernel):

  1. Groom ile pool'u, vulnerable chunk seçilmiş ve attacker'ın allocate ettiği bir komşunun yanına düşecek şekilde düzenle (bkz. kernel-low-fragmentation-heap-exploitation).
  2. Overflow ile komşuya kontrollü biçimde taş. İki klasik sonuç:
  3. eski hedefler: komşu bir object header field'ını boz (örn. bir Event object'inin TypeIndex'i) ki sonraki bir free attacker kontrollü bir procedure pointer'ı çağırsın;
  4. modern hedefler: komşu bir metadata field'ını boz (örn. bir named-pipe NP_DATA_QUEUE_ENTRY size/link'i) ki arbitrary read/write elde edesin.
  5. Escalate ile token hırsızlığı üzerinden privilege escalation sağla.

Detection

  • Pool-corruption bugcheck'leri (BAD_POOL_HEADER, BAD_POOL_CALLER).
  • Out-of-bounds pool write'larını yakalayan Driver Verifier Special Pool.
  • Event object / named pipe'ların büyük spray'leri ardından seçici free'ler.
  • Freed chunk'larda bozulmuş object-header TypeIndex'i veya pool tag'leri.

Mitigation

  • NonPagedPoolNx (non-executable pool) klasik exec-from-pool'u etkisiz kılar.
  • Pool integrity check'leri / pool-header cookie'leri; segment-heap/kLFH guard'ları.
  • SMEP + null-page mapping kısıtlamaları.
  • Test sırasında Driver Verifier Special Pool; bounds-checked driver copy'leri.

References