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):
- Hedefi resolve et. Kernel/driver base'ini enumere et
(
EnumDeviceDrivers),ntoskrnl'i lokal yükle, seçilen target sembolünü resolve et. - Write. Bir kernel target'ına bir pointer-to-payload yazmak için IOCTL'i
kullan — klasik olarak
HalDispatchTableslot'u (bkz.haldispatchtable-hijack-via-ntqueryintervalprofile). - 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.