Disable Win32k system calls¶
Bir process'in win32k.sys syscall'larını issue etmesini engelleyen bir process-mitigation policy'si; sandbox'lanmış process'lerden geniş, tarihsel olarak bug açısından zengin bir kernel attack surface'ini kaldırır.
Mechanism¶
Bug class / invariant
win32k.sys (GUI/window-manager kernel bileşeni), Windows kernel LPE bug'larının en bereketli
kaynaklarından biri olmuştur. Bu mitigation'ın kurduğu invariant: GUI servislerine ihtiyaç
duymayan bir process, win32k syscall surface'ine hiç erişememeli. Win32k system-call disable
policy'si (PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_ON) ile kernel,
o process'ten gelen win32k syscall'larını reddeder. Sonradan compromise edilen bir
renderer/sandbox, escalate etmek için bir win32k güvenlik açığı üzerinden pivot yapamaz, çünkü
bug'ı tetiklemek için kullanacağı syscall'lar dispatch'ten önce engellenir.
Walkthrough¶
Üst seviye, kavramsal (Microsoft'un public belgelerinden):
- Sandbox'lanmış bir process (örn. bir browser renderer'ı),
UpdateProcThreadAttributeüzerinden Win32k system-call disable policy'si ile başlatılır. - Process, GUI syscall'larına erişim olmadan çalışır (USER/GDI servislerine ihtiyaç duymamalı).
- Bir attacker renderer'ı compromise eder ve bilinen bir win32k kernel LPE'sini exploit etmeye çalışır.
- Exploit'in ihtiyaç duyduğu win32k syscall, bu process için kernel tarafından reddedilir.
- win32k üzerinden sandbox-to-kernel escalation yolu kapanır; attacker win32k olmayan bir surface bulmak zorundadır.
Warning
Yalnızca gerçekten GUI API'lerine ihtiyaç duymayan process'ler için geçerlidir. Tekil bug'ları düzeltmek yerine bir surface'i kaldırır; win32k olmayan kernel surface'leri kalır.
Detection¶
- Engellenen win32k çağrıları için audit-mode event'leri (Exploit Protection / process-mitigation audit telemetry'si), bir sandbox içinde beklenmedik şekilde GUI syscall'larına kalkışan code'u ortaya çıkarır.
- EDR: normalde headless/sandbox'lanmış bir process'in USER/GDI operasyonlarına kalkışması anormaldir.
Mitigation¶
- Win32k system-call disable policy'sini sandbox'lanmış, GUI olmayan process'lere uygula (browser'lar renderer'ları için bunu zaten yapıyor).
- Güçlü bir sandbox için Do not allow child processes, Code Integrity Guard ve Arbitrary Code Guard ile birleştir.
- Gerekli bir GUI bağımlılığı olmadığını doğrulamak için önce audit mode'da validate et.