Skip to content

HEVD Arbitrary Write (Write-What-Where) scenario

HackSys Extreme Vulnerable Driver'ın write-what-where IOCTL'inin kavramsal kataloğu: kontrol edilmeyen bir *(Where) = *(What), çağıranın kontrollü data'yı kontrollü bir kernel adresine yazmasına izin verir.

Mechanism

Eğitim bug'ı

HEVD handler'ı *(Where) = *(What) gerçekleştirir — attacker-kontrollü data'nın attacker-kontrollü bir adrese write'ı — destination'ın user mode'da olduğunu validate etmeden. İlgili Arbitrary Increment varyantı, seçilen bir adresteki değeri increment eder; zincirlenmiş increment'ler kontrollü bir değer/pointer sentezleyebilir ve kısıtlı bir increment'i tam bir write-where'e yükseltebilir.

Boundary aşılır çünkü kernel space'e tek bir kontrol edilmeyen pointer write'ı, çağıranın security-relevant bir pointer'ı ya da table entry'sini overwrite etmesine izin verir.

Walkthrough

Üst-seviye (Connor McGarr, HEVD repo):

  1. Hedefi resolve et. Kernel/driver base'ini enumere et (EnumDeviceDrivers), ntoskrnl'i lokal yükle, seçilen target sembolünü resolve et.
  2. Write. Bir kernel target'ına bir pointer-to-payload yazmak için IOCTL'i kullan — klasik olarak HalDispatchTable slot'u (bkz. haldispatchtable-hijack-via-ntqueryintervalprofile).
  3. Trigger. Çalıştırmak için karşılık gelen API'yi (NtQueryIntervalProfile) çağır. Modern sistemlerde aynı primitive bunun yerine R/W'ye ulaşmak için page-table/permission data'sını overwrite edebilir, sonra bir token çalabilir.

Detection

  • User IOCTL'lerine hizmet eden bir driver'dan bilinen hassas table'lara (HalDispatchTable, IDT/SSDT-bitişik yapılar) yapılan kernel write'ları.
  • Hemen ardından eşleşen trigger syscall'ı gelen bir function-pointer-table modifikasyonu.
  • Read-only kernel data'sının değişmesine integrity-monitor uyarıları.

Mitigation

  • Destination pointer'ları validate et (ProbeForWrite, user-mode aralığını zorunlu kıl).
  • Hassas dispatch table'larını read-only yap; PatchGuard/KPP izleme.
  • SMEP + HVCI; böylece nihai pointer executable user memory'ye referans veremez; indirect call'larda CFG/kCET.

References