Skip to content

HEVD Stack Buffer Overflow scenario

HackSys Extreme Vulnerable Driver stack-overflow IOCTL'inin kavramsal kataloğu: sabit boyutlu bir kernel stack buffer'ına yapılan kontrol edilmeyen bir copy, saklı return address'i overwrite eder.

Mechanism

Eğitim amaçlı bug

HEVD, eğitim için yazılmış kasıtlı olarak vulnerable bir Windows/Linux driver'ıdır. Stack-overflow handler'ı sabit boyutlu bir kernel stack buffer'ı (512 byte) tanımlar ve user'ın sağladığı bir buffer'ı bu buffer'a RtlCopyMemory ile attacker kontrollü bir length ve hiçbir bounds check olmadan kopyalar.

Caller hem source'u hem de size'ı kontrol ettiği için, copy buffer'ı aşar ve kernel frame'inin saklı return address'ini overwrite eder. Function return ettiğinde, execution attacker'ın seçtiği bir adrese aktarılır — user→kernel sınırı ret'te aşılır.

Sibling HEVD Pool Buffer Overflow scenario'dan farkı: o, heap (non-paged pool) üzerinde komşu chunk'ın _POOL_HEADER/içeriğini bozar ve dolaylı bir primitive'e ihtiyaç duyar; bu not ise stack üzerindeki saklı return address'i doğrudan overwrite ederek ret'te kontrol akışını anında ele geçirir.

Walkthrough

Üst seviye (XPN, HEVD repo):

  1. Device'a bir handle aç.
  2. Stack-overflow IOCTL'i ve aşırı büyük bir buffer ile DeviceIoControl çağır.
  3. Saklı return address'e kadar pad'le, sonra onu staged token-stealing shellcode'a işaret eden bir pointer ile overwrite et.
  4. Shellcode process listesini gezer, SYSTEM token'ını caller'ın token'ı üzerine kopyalar (bkz. eprocess-token-stealing), ardından temiz bir şekilde return etmek için register/stack durumunu geri yükler.

Eğitim amaçlı basitleştirme

Temel tutorial çalışır çünkü SMEP disabled'dır ve shellcode user memory'de durur; gerçek hedefler bir SMEP bypass / ROP gerektirir.

Detection

  • Stack-corruption bugcheck'leri (DRIVER_OVERRAN_STACK_BUFFER, stack-cookie hataları).
  • User-mode page'lere işaret eden kernel return address'leri.
  • Token'ı aniden SYSTEM token'ı ile eşleşen non-privileged bir process.
  • Microsoft'a ait olmayan bir driver'a giden aşırı büyük DeviceIoControl input buffer'ları.

Mitigation

  • Stack canary'leri (/GS) ve bounds-checked copy'ler (Size'ı doğrula).
  • SMEP user page'lerinin kernel'de execution'ını engeller; kCET shadow stack'leri return address'leri korur.
  • Driver'da ProbeForRead / length doğrulaması; executable kernel memory'yi sınırlamak için HVCI.

References