UIAccess ile Admin Koruması Atlama Yöntemleri
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Genel Bakış
- Windows AppInfo, UIAccess süreçleri başlatmak için
RAiLaunchAdminProcess’i açığa çıkarır (erişilebilirlik amaçlı). UIAccess, User Interface Privilege Isolation (UIPI) mesaj filtrelemesinin çoğunu atlar, böylece erişilebilirlik yazılımları daha yüksek-IL UI’yi kontrol edebilir. - UIAccess’i doğrudan etkinleştirmek
NtSetInformationToken(TokenUIAccess)ile SeTcbPrivilege gerektirir; bu yüzden düşük-privilege çağırıcılar servise güvenir. Servis, UIAccess ayarlamadan önce hedef ikili üzerinde üç kontrol yapar: - Gömülü manifest
uiAccess="true"içerir. - Local Machine root deposu tarafından güvenilen herhangi bir sertifika ile imzalanmış (EKU/Microsoft gereksinimi yok).
- Sistem sürücüsünde yöneticiye özel bir yolda yer alır (ör.
C:\Windows,C:\Windows\System32,C:\Program Files, belirli yazılabilir alt yollar hariç). RAiLaunchAdminProcessUIAccess başlatmaları için herhangi bir onay ekranı göstermez (aksi takdirde erişilebilirlik araçları istemi kontrol edemezdi).
Token şekillendirme ve bütünlük seviyeleri
- Kontroller başarılı olursa, AppInfo çağırıcı token’ı kopyalar, UIAccess’i etkinleştirir ve Integrity Level (IL) yükseltir:
- Limited admin user (kullanıcı Administrators grubunda ama filtrelenmiş çalışıyor) ➜ High IL.
- Non-admin user ➜ IL +16 seviye artırılır, bir High sınırına kadar (System IL asla atanmaz).
- Eğer çağırıcı token zaten UIAccess içeriyorsa, IL değiştirilmez.
- “Ratchet” taktiği: bir UIAccess süreci kendi üzerinde UIAccess’i devre dışı bırakıp
RAiLaunchAdminProcessile yeniden başlatarak bir +16 IL artışı daha kazanabilir. Medium➜High için 255 yeniden başlatma gerekir (gürültülü ama işe yarar).
Neden UIAccess bir Admin Koruması kaçağı sağlar
- UIAccess, daha düşük-IL süreçlerin daha yüksek-IL pencerelere pencere mesajları göndermesine izin verir (UIPI filtrelerini atlayarak). Eşit IL’de,
SetWindowsHookExgibi klasik UI araçları herhangi bir pencereye sahip sürece kod enjeksiyonu/DLL yükleme izinleri verebilir (COM tarafından kullanılan message-only windows dahil). - Admin Protection, UIAccess sürecini sınırlı kullanıcının kimliğiyle ama High IL olarak, sessizce başlatır. High-IL UIAccess sürecinde rastgele kod çalıştırıldığında, saldırgan masaüstündeki diğer High-IL süreçlere (farklı kullanıcılara ait olsa bile) enjeksiyon yapabilir ve amaçlanan ayrımı bozar.
HWND’den süreç tutamacı elde etme ilkelisi (GetProcessHandleFromHwnd / NtUserGetWindowProcessHandle)
- Windows 10 1803+ üzerinde API Win32k’ya taşındı (
NtUserGetWindowProcessHandle) ve çağırıcı tarafından sağlananDesiredAccesskullanarak bir süreç tutamacı açabiliyor. Kernel yoluObOpenObjectByPointer(..., KernelMode, ...)kullanır; bu normal kullanıcı modu erişim kontrollerini atlar. - Pratik önkoşullar: hedef pencerenin aynı desktop’ta olması ve UIPI kontrollerinin geçmesi gerekir. Tarihsel olarak, UIAccess olan bir çağırıcı UIPI başarısızlığını atlayıp yine de kernel-mode tutamacı alabiliyordu (CVE-2023-41772 olarak düzeltildi).
- Etki: bir pencere tanıtıcısı, çağıranın normalde açamayacağı güçlü bir süreç tutamacı elde etmesi için bir kapasite haline gelir (genelde
PROCESS_DUP_HANDLE,PROCESS_VM_READ,PROCESS_VM_WRITE,PROCESS_VM_OPERATION). Bu, sandboxlar arası erişimi sağlar ve hedef herhangi bir pencere (message-only pencereler dahil) açıyorsa Protected Process / PPL sınırlarını kırabilir. - Pratik kötüye kullanım akışı: HWND’leri enumerate etmek veya bulmak (ör.
EnumWindows/FindWindowEx), sahip olan PID’yi çözmek (GetWindowThreadProcessId),GetProcessHandleFromHwndçağırmak ve dönen tutamaç ile bellek okuma/yazma veya kod-hijack primitifleri için kullanmak. - Düzeltme sonrası davranış: UIAccess artık UIPI başarısızlığında kernel-mode açıkları vermez ve izin verilen erişim hakları legacy hook kümesi ile sınırlandırılır; Windows 11 24H2 süreç-koruma kontrolleri ve feature-flag ile daha güvenli yollar ekler. UIPI’yi sistem çapında devre dışı bırakmak (
EnforceUIPI=0) bu korumaları zayıflatır.
Güvenli-dizin doğrulama zayıflıkları (AppInfo AiCheckSecureApplicationDirectory)
AppInfo sağlanan yolu GetFinalPathNameByHandle ile çözümler ve sonra sabitlenmiş kökler/dışlamalara karşı string allow/deny kontrolleri uygular. Bu basit doğrulamadan kaynaklanan birkaç atlama sınıfı vardır:
- Directory named streams: Hariç tutulan yazılabilir dizinler (ör.
C:\Windows\tracing) dizinin kendisine ait bir named stream ile atlanabilir, örn.C:\Windows\tracing:file.exe. String kontrollerC:\Windows\görür ve hariç tutulan alt yolu kaçırır. - Allowed root içinde yazılabilir dosya/dizin:
CreateProcessAsUserbir.exeuzantısı gerektirmez. İzin verilen bir root altında yazılabilir herhangi bir dosyanın üzerine çalıştırılabilir payload yazmak işe yarar; ya da imzalıuiAccess="true"EXE’yi herhangi bir yazılabilir alt dizine kopyalamak (ör. mevcutsaTasks_Migratedgibi güncelleme kalıntıları) secure-path kontrolünü geçmesini sağlar. - MSIX into
C:\Program Files\WindowsApps(düzeltildi): Non-adminler imzalımış MSIX paketleri kurabilir ve bunlarWindowsApps’a düşebilirdi; bu yol hariç tutulmamıştı. MSIX içine bir UIAccess ikilisi paketleyip bunuRAiLaunchAdminProcessile başlatmak, prompt olmadan High-IL UIAccess süreci veriyordu. Microsoft bu yolu hariç tutarak hafifletti; ayrıcauiAccessile kısıtlı MSIX özelliği zaten admin kurulumu gerektiriyordu.
Saldırı iş akışı (prompt olmadan High IL)
- İmzalanmış bir UIAccess binary elde edin/oluşturun (manifest
uiAccess="true"). - AppInfo’nin allowlist’inin kabul ettiği bir yere koyun (veya yukarıdaki yol-doğrulama kenar durumunu/yazılabilir artefaktı kullanın).
RAiLaunchAdminProcessçağırarak onu UIAccess + yükseltilmiş IL ile sessizce başlatın.- Bu High-IL köprüden, masaüstündeki başka bir High-IL süreci hedefleyin ve window hooks/DLL injection veya aynı-IL primitifleri kullanarak yönetici bağlamını tamamen ele geçirin.
Yazılabilir aday yolların listelenmesi
Seçilen bir token perspektifinden nominal olarak güvenli kökler içinde yazılabilir/üzerine yazılabilir nesneleri keşfetmek için PowerShell yardımcısını çalıştırın:
$paths = "C:\\Windows","C:\\Program Files","C:\\Program Files (x86)"
Get-AccessibleFile -Win32Path $paths -Access Execute,WriteData `
-DirectoryAccess AddFile -Recurse -ProcessId <PID>
- Genişletilmiş görünürlük için Administrator olarak çalıştırın;
-ProcessId’i o token’ın erişimini yansıtacak şekilde düşük ayrıcalıklı bir işleme ayarlayın. RAiLaunchAdminProcessile adayları kullanmadan önce bilinen yasaklı alt dizinleri hariç tutmak için manuel olarak filtreleyin.
Referanslar
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


