Skip to content

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):

  1. Sandbox'lanmış bir process (örn. bir browser renderer'ı), UpdateProcThreadAttribute üzerinden Win32k system-call disable policy'si ile başlatılır.
  2. Process, GUI syscall'larına erişim olmadan çalışır (USER/GDI servislerine ihtiyaç duymamalı).
  3. Bir attacker renderer'ı compromise eder ve bilinen bir win32k kernel LPE'sini exploit etmeye çalışır.
  4. Exploit'in ihtiyaç duyduğu win32k syscall, bu process için kernel tarafından reddedilir.
  5. 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.

References