CVE-2017-14961 IKARUS write-where -> PALETTE arbitrary R/W¶
IKARUS anti-virus
ntguard.sysdriver'ındaki bir fixed-value write-where; GDI PALETTE object'lerini corrupt ederek tam arbitrary kernel read/write'a dönüştürüldü.
Mechanism¶
Kırılan invariant
IKARUS anti.virus 2.16.7'nin ntguard.sys driver'ı, bir IOCTL'den
(herkese açık olarak 0x8300000c olarak raporlanan) output-buffer pointer'ını
validate etmez ve bir fixed-value write primitive'i verir — attacker tarafından
kontrol edilen bir kernel adresine 0x11 byte'ını yazar (kısıtlı bir "write-where").
Kernel, kullanıcı tarafından sağlanan bir destination adresine güvendiği için
unprivileged kod komşu kernel object'lerini corrupt edebilir. Writeup, bu sınırlı
write'ı session-pool spraying üzerinden GDI PALETTE object internal'larını corrupt
ederek tam bir arbitrary read/write'a dönüştürür (bkz.
GDI palette R/W primitive).
Walkthrough¶
Herkese açık writeup'tan çıkarılan kavramsal, üst-düzey reprodüksiyon.
- Seçilmiş bir kernel konumuna
0x11yazmak için IOCTL'i boş bir input buffer'ı ve kontrol edilen bir output adresiyle tetikle. - Öngörülebilir session-pool adreslerinde iki komşu
PALETTEobject'ini (her biri ~0x1000 byte) groom etmek için pool-spray yap (window reservation / free cycling). - İlk palette'in
cEntries(count) field'ını overwrite etmek için fixed-byte write'ı kullan ve raporlanan boyutunu şişir (out-of-bounds entry aralığı). - İkinci "worker" palette'in
pFirstColorpointer'ını overwrite etmek için aşırı boyutlu "manager" palette'ini kullan ve onu arbitrary bir adrese yönlendir. - Arbitrary kernel belleğini okumak / yazmak için worker palette üzerinde
GetPaletteEntries/SetPaletteEntriesçağır. - Arbitrary R/W kurulduğunda, SYSTEM'a yükselmek için token theft gerçekleştir.
Detection¶
ntguarddevice'ına bir handle açan ve ona karşı IOCTL'ler issue eden non-admin process'ler.ntguard.sys'e ya da GDI/win32k pool corruption'a referans veren crash'ler / bugcheck'ler (başarısız spray'ler).- Tek bir user process'ten anormal hacimde palette/GDI object creation + free (spray signature'ı).
- AV driver'ıyla az önce konuşmuş bir process'te token / integrity-level escalation.
- Bir güvenlik-ürünü driver'ına şüpheli
DeviceIoControlüzerine EDR alert'leri.
Mitigation¶
- IKARUS'u, IOCTL buffer'ını validate eden fixed build'e (2.16.18, driver 0.43.0.0) güncelle.
- Device-object ACL'lerini kısıtla ki yalnızca privileged caller'lar IOCTL'i issue edebilsin.
- GDI / session-pool hardening: daha yeni Windows'ta type isolation ve pool integrity palette/bitmap primitive'inin güvenilirliğini azaltır.
- HVCI / driver allow-listing (WDAC) ve vulnerable signed driver'ları kaldırma (BYOVD duruşu).
- Bilinen-vulnerable driver sürümlerini izle ve bloke et.