Admin Protection Παρακάμψεις μέσω UIAccess
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Επισκόπηση
- Το Windows AppInfo εκθέτει το
RAiLaunchAdminProcessγια την εκκίνηση διεργασιών UIAccess (προοριζόμενες για accessibility). Το UIAccess παρακάμπτει τους περισσότερους ελέγχους φιλτραρίσματος μηνυμάτων του User Interface Privilege Isolation (UIPI) ώστε το λογισμικό accessibility να μπορεί να χειρίζεται UI με υψηλότερο IL. - Η ενεργοποίηση του UIAccess απευθείας απαιτεί
NtSetInformationToken(TokenUIAccess)με SeTcbPrivilege, οπότε οι χαμηλής-άδειας καλούντες βασίζονται στην υπηρεσία. Η υπηρεσία εκτελεί τρεις ελέγχους στο στοχευόμενο binary πριν θέσει UIAccess: - Το ενσωματωμένο manifest περιέχει
uiAccess="true". - Υπογράφεται από οποιοδήποτε πιστοποιητικό που εμπιστεύεται το Local Machine root store (χωρίς απαίτηση EKU/Microsoft).
- Βρίσκεται σε διαδρομή που προορίζεται μόνο για administrators στο system drive (π.χ.,
C:\Windows,C:\Windows\System32,C:\Program Files, εξαιρουμένων συγκεκριμένων εγγράψιμων υποδιαδρομών). - Το
RAiLaunchAdminProcessδεν εμφανίζει prompt συγκατάθεσης για εκκινήσεις UIAccess (αλλιώς τα εργαλεία accessibility δεν θα μπορούσαν να χειριστούν το prompt).
Token shaping and integrity levels
- Αν οι έλεγχοι περάσουν, το AppInfo αντιγράφει το caller token, ενεργοποιεί το UIAccess, και αυξάνει το Integrity Level (IL):
- Limited admin user (ο χρήστης είναι στους Administrators αλλά τρέχει φιλτραρισμένος) ➜ High IL.
- Non-admin user ➜ το IL αυξάνεται κατά +16 levels έως ένα όριο High (το System IL δεν ανατίθεται ποτέ).
- Αν το caller token ήδη έχει UIAccess, το IL παραμένει αμετάβλητο.
- “Ratchet” trick: μια διεργασία UIAccess μπορεί να απενεργοποιήσει το UIAccess στον εαυτό της, να ξαναεκκινήσει μέσω
RAiLaunchAdminProcess, και να κερδίσει άλλη +16 αύξηση IL. Medium➜High χρειάζεται 255 relaunches (θορυβώδες, αλλά λειτουργεί).
Γιατί το UIAccess επιτρέπει παράκαμψη του Admin Protection
- Το UIAccess επιτρέπει σε διεργασία με χαμηλότερο IL να στέλνει window messages σε παράθυρα με υψηλότερο IL (παρακάμπτοντας τα UIPI φίλτρα). Σε ίδιο IL, τα κλασικά UI primitives όπως
SetWindowsHookExεπιτρέπουν injection κώδικα/φόρτωση DLL σε οποιαδήποτε διεργασία που κατέχει παράθυρο (συμπεριλαμβανομένων των message-only windows που χρησιμοποιεί COM). - Το Admin Protection εκκινεί τη διεργασία UIAccess με την ταυτότητα του limited user αλλά σε High IL, σιωπηρά. Μόλις arbitrary code τρέξει μέσα σε αυτήν τη High-IL διεργασία UIAccess, ο επιτιθέμενος μπορεί να κάνει injection σε άλλες High-IL διεργασίες στην επιφάνεια εργασίας (ακόμα και που ανήκουν σε διαφορετικούς χρήστες), καταλύοντας τον προοριζόμενο διαχωρισμό.
HWND-to-process handle primitive (GetProcessHandleFromHwnd / NtUserGetWindowProcessHandle)
- Σε Windows 10 1803+ το API μεταφέρθηκε στο Win32k (
NtUserGetWindowProcessHandle) και μπορεί να ανοίξει ένα process handle χρησιμοποιώντας ένα caller-suppliedDesiredAccess. Η διαδρομή του kernel χρησιμοποιείObOpenObjectByPointer(..., KernelMode, ...), που παρακάμπτει τους κανονικούς user-mode access checks. - Προαπαιτούμενα στην πράξη: το στοχευόμενο παράθυρο πρέπει να είναι στο ίδιο desktop, και οι έλεγχοι UIPI πρέπει να περνάνε. Ιστορικά, ένας caller με UIAccess μπορούσε να παρακάμψει αποτυχία UIPI και παρόλα αυτά να πάρει kernel-mode handle (διορθώθηκε ως CVE-2023-41772).
- Επιπτώσεις: ένα window handle γίνεται μια ικανότητα (capability) για να αποκτηθεί ένα ισχυρό process handle (συνήθως
PROCESS_DUP_HANDLE,PROCESS_VM_READ,PROCESS_VM_WRITE,PROCESS_VM_OPERATION) που ο καλών δεν θα μπορούσε κανονικά να ανοίξει. Αυτό επιτρέπει cross-sandbox πρόσβαση και μπορεί να καταλύσει Protected Process / PPL όρια αν ο στόχος εκθέτει οποιοδήποτε παράθυρο (συμπεριλαμβανομένων message-only windows). - Πρακτική ροή κατάχρησης: εντοπισμός ή αναγραφή HWNDs (π.χ.,
EnumWindows/FindWindowEx), επίλυση του owning PID (GetWindowThreadProcessId), κλήσηGetProcessHandleFromHwnd, και χρήση του επιστρεφόμενου handle για memory read/write ή code-hijack primitives. - Συμπεριφορά μετά το fix: το UIAccess δεν δίνει πια kernel-mode opens σε περίπτωση UIPI failure και τα επιτρεπόμενα access rights περιορίζονται στο legacy hook set· τα Windows 11 24H2 προσθέτουν process-protection checks και feature-flagged ασφαλέστερες διαδρομές. Η απενεργοποίηση του UIPI σε σύστημα (
EnforceUIPI=0) εξασθενεί αυτές τις προστασίες.
Αδυναμίες στην επαλήθευση secure-directory (AppInfo AiCheckSecureApplicationDirectory)
Το AppInfo επιλύει την παρεχόμενη διαδρομή μέσω GetFinalPathNameByHandle και στη συνέχεια εφαρμόζει string allow/deny checks ενάντια σε hardcoded roots/exclusions. Πολλές κλάσεις bypass προκύπτουν από αυτήν την απλοϊκή επαλήθευση:
- Directory named streams: Εξαιρεμένες εγγράψιμες διαδρομές (π.χ.,
C:\Windows\tracing) μπορούν να παρακαμφθούν με ένα named stream πάνω στον ίδιο τον κατάλογο, π.χ.C:\Windows\tracing:file.exe. Οι string checks βλέπουνC:\Windows\και χάνουν την εξαιρεμένη υποδιαδρομή. - Writable file/directory inside an allowed root: Το
CreateProcessAsUserδεν απαιτεί.exeextension. Η αντικατάσταση οποιουδήποτε εγγράψιμου αρχείου κάτω από έναν επιτρεπόμενο root με ένα εκτελέσιμο payload λειτουργεί, ή η αντιγραφή ενός signeduiAccess="true"EXE σε οποιοδήποτε εγγράψιμο υποφάκελο (π.χ., leftovers ενημέρωσης όπωςTasks_Migratedόταν υπάρχουν) το αφήνει να περάσει τον έλεγχο secure-path. - MSIX into
C:\Program Files\WindowsApps(fixed): Non-admins μπορούσαν να εγκαταστήσουν signed MSIX πακέτα που τοποθετούνταν σεWindowsApps, το οποίο δεν ήταν εξαιρεμένο. Η συσκευασία ενός UIAccess binary μέσα στο MSIX και η εκκίνηση του μέσωRAiLaunchAdminProcessπαρήγαγαν μια promptless High-IL UIAccess διεργασία. Η Microsoft μείωσε το πρόβλημα εξαιρώντας αυτή τη διαδρομή· η περιορισμένη MSIX capability γιαuiAccessήδη απαιτεί admin install.
Attack workflow (High IL χωρίς prompt)
- Αποκτήστε/συντάξτε ένα signed UIAccess binary (manifest
uiAccess="true"). - Τοποθετήστε το όπου το allowlist του AppInfo το αποδέχεται (ή εκμεταλλευτείτε κάποιο edge case της επαλήθευσης διαδρομής/εγγράψιμου artifact όπως παραπάνω).
- Καλέστε
RAiLaunchAdminProcessγια να το εκκινήσετε σιωπηρά με UIAccess + αυξημένο IL. - Από αυτό το High-IL foothold, στοχεύστε άλλη High-IL διεργασία στην επιφάνεια εργασίας χρησιμοποιώντας window hooks/DLL injection ή άλλα same-IL primitives για να καταλάβετε πλήρως το admin context.
Εντοπισμός υποψήφιων εγγράψιμων διαδρομών
Τρέξτε το PowerShell helper για να ανακαλύψετε εγγράψιμα/επαναγραφόμενα αντικείμενα μέσα σε ονομαστικά secure roots από την οπτική ενός επιλεγμένου token:
$paths = "C:\\Windows","C:\\Program Files","C:\\Program Files (x86)"
Get-AccessibleFile -Win32Path $paths -Access Execute,WriteData `
-DirectoryAccess AddFile -Recurse -ProcessId <PID>
- Εκτελέστε ως Administrator για ευρύτερη ορατότητα· ορίστε
-ProcessIdσε μια low-priv διεργασία για να αντικατοπτρίσετε την πρόσβαση αυτού του token. - Φιλτράρετε χειροκίνητα για να αποκλείσετε γνωστούς μη επιτρεπόμενους υποκαταλόγους πριν χρησιμοποιήσετε τους υποψήφιους με
RAiLaunchAdminProcess.
Αναφορές
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


