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):
- 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). - Overflow ile komşuya kontrollü biçimde taş. İki klasik sonuç:
- 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; - modern hedefler: komşu bir metadata field'ını boz (örn. bir named-pipe
NP_DATA_QUEUE_ENTRYsize/link'i) ki arbitrary read/write elde edesin. - 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.