Τρόπος εκτέλεσης προγράμματος χωρίς δικαιώματα διαχειριστή και παράκαμψη της προτροπής UAC

Κατά την εκκίνηση, ορισμένα προγράμματα απαιτούν ανύψωση άδειας (η ασπίδα δίπλα στο εικονίδιο της εφαρμογής), αλλά στην πραγματικότητα, δεν χρειάζονται δικαιώματα διαχειριστή για την κανονική τους λειτουργία. Για παράδειγμα, μπορείτε να εκχωρήσετε μη αυτόματα δικαιώματα για τους χρήστες σας στο φάκελο της εφαρμογής στα ProgramFiles ή/και τα κλειδιά μητρώου που χρησιμοποιούνται από το πρόγραμμα. Εάν ο Έλεγχος λογαριασμού χρήστη είναι ενεργοποιημένος στον υπολογιστή, θα εμφανιστεί μια προτροπή UAC και τα Windows θα ζητήσουν από τον χρήστη να εισαγάγει τον κωδικό πρόσβασης διαχειριστή εάν προσπαθήσετε να εκτελέσετε ένα τέτοιο πρόγραμμα ως τυπικός χρήστης.

Για να παρακάμψουν αυτόν τον μηχανισμό, πολλοί διαχειριστές απλώς απενεργοποιούν το UAC ή παραχωρούν δικαιώματα διαχειριστή προσθέτοντας έναν λογαριασμό χρήστη στην τοπική ομάδα "Διαχειριστές". Φυσικά και οι δύο μέθοδοι δεν είναι ασφαλείς. Καμία από αυτές τις μεθόδους δεν συνιστάται για ευρεία χρήση, επειδή μειώνουν την ασφάλεια των Windows. Σε αυτό το άρθρο, θα εξετάσουμε πώς να εκτελέσετε ένα πρόγραμμα που απαιτεί δικαιώματα διαχειριστή ως τυπικός χρήστης και καταργεί την προτροπή ανύψωσης UAC.

Περιεχόμενα:

Διαμόρφωση δικαιωμάτων για χρήστες που δεν είναι διαχειριστές για την εκτέλεση ενός προγράμματος

Ένα πρόγραμμα των Windows μπορεί να σας ζητήσει δικαιώματα διαχειριστή κατά την εκκίνηση εάν:

  • Το πρόγραμμα πρέπει να έχει πρόσβαση σε έναν κατάλογο συστήματος ή σε ένα αρχείο για το οποίο τα δικαιώματα NTFS δεν έχουν παραχωρηθεί σε μη προνομιούχους χρήστες.
  • Εάν το πρόγραμμα έχει μεταγλωττιστεί με μια ειδική σημαία που απαιτεί ανύψωση κατά την εκκίνηση (requireAdministrator).

Στην πρώτη περίπτωση, το μόνο που απαιτείται για την επίλυση του προβλήματος είναι να εκχωρήσετε δικαιώματα χρήστη RW ή Full Control στον κατάλογο του προγράμματος ή στον απαιτούμενο κατάλογο/αρχείο συστήματος. Για παράδειγμα, ένα πρόγραμμα αποθηκεύει τα αρχεία του (αρχεία καταγραφής, αρχεία διαμόρφωσης, κ.λπ.) στον δικό του φάκελο στοC:Program Files (x86)SomeAppή κάποιον κατάλογο συστήματος. Ο χρήστης πρέπει να έχει άδεια εγγραφής σε αυτά τα αρχεία για να λειτουργεί σωστά το πρόγραμμα. Για να λειτουργεί κανονικά αυτό το πρόγραμμα, απαιτούνται δικαιώματα διαχειριστή.

Για να επιτραπεί στο πρόγραμμα να εκτελείται ως χρήστης χωρίς διαχειριστή, αρκεί να εκχωρήσετε μη αυτόματα στον χρήστη (ή στην ενσωματωμένη ομάδα χρηστών) την άδεια να τροποποιήσει/εγγράψει ένα αρχείο/κατάλογο σε επίπεδο συστήματος αρχείων NTFS

Για να βρείτε μια λίστα αρχείων, φακέλων και κλειδιών μητρώου στα οποία έχει πρόσβαση το πρόγραμμα, χρησιμοποιήστε τοΠαρακολούθηση διαδικασίας(https://learn.microsoft.com/en-us/sysinternals/downloads/procmon). Ενεργοποιήστε το φίλτρο με το όνομα της διαδικασίας του προγράμματος και βρείτε όλους τους πόρους, εάν προσπαθήσετε να αποκτήσετε πρόσβαση σε αυτούς, εμφανίζεται η ένδειξη Access Denied. Εκχωρήστε τα απαραίτητα δικαιώματα σε φακέλους/αρχεία/κλειδιά μητρώου.

Σημείωμα. Στην πραγματικότητα, δεν συνιστάται η αποθήκευση των μεταβαλλόμενων δεδομένων εφαρμογής στον κατάλογο C:Program Files. Είναι καλύτερα να αποθηκεύσετε τα δεδομένα της εφαρμογής στο προφίλ χρήστη. Αλλά είναι θέμα τεμπελιάς και ανικανότητας των προγραμματιστών εφαρμογών.

Να επιτρέπεται στους τυπικούς χρήστες να εκτελούν ένα πρόγραμμα που απαιτεί δικαιώματα διαχειριστή

Νωρίτερα περιγράψαμε πώς να απενεργοποιήσετε μια προτροπή UAC για ένα συγκεκριμένο πρόγραμμα χρησιμοποιώντας τοHumansinvokerπαράμετρος. Ωστόσο, αυτή η μέθοδος δεν είναι αρκετά ευέλικτη.

Ας δούμε έναν απλούστερο τρόπο για να εξαναγκάσετε οποιοδήποτε πρόγραμμα να εκτελείται χωρίς δικαιώματα διαχειριστή (χωρίς να εισάγετε τον κωδικό πρόσβασης διαχειριστή) και με ενεργοποιημένο το UAC (Επίπεδο 4, 3 ή 2 του ρυθμιστικού UAC).

Ας πάρουμε ως παράδειγμα τον Επεξεργαστή Μητρώου —Regedit(βρίσκεται στο φάκελο C:Windows). Παρατηρήστε την ασπίδα UAC δίπλα στο εικονίδιο της εφαρμογής. Αυτό το εικονίδιο σημαίνει ότι απαιτείται ανύψωση UAC για την εκτέλεση αυτής της εφαρμογής.

Όταν τρέχειςregedit.exe, θα δείτε μια προτροπή Έλεγχος λογαριασμού χρήστη που ζητά τα διαπιστευτήρια διαχειριστή (Do you want to allow this app to make changes to your device?). Εάν δεν δώσετε κωδικό πρόσβασης και δεν επιβεβαιώσετε την ανύψωση, η εφαρμογή δεν θα ξεκινήσει.

Ας προσπαθήσουμε να παρακάμψουμε το αίτημα UAC για αυτό το πρόγραμμα. Δημιουργήστε το αρχείο κειμένουrun-as-non-admin.batπου περιέχει τον ακόλουθο κώδικα στην επιφάνεια εργασίας σας:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

Για να εξαναγκάσετε το regedit.exe να εκτελείται χωρίς δικαιώματα διαχειριστή και για να αποκρύψετε την προτροπή UAC, απλώς σύρετε το αρχείο EXE που θέλετε να εκτελέσετε σε αυτό το αρχείο BAT στην επιφάνεια εργασίας.

Ο Επεξεργαστής Μητρώου θα πρέπει να ξεκινά χωρίς προτροπή UAC και χωρίς να εισάγετε κωδικό πρόσβασης διαχειριστή. Εάν ανοίξετε τη Διαχείριση εργασιών και προσθέσετε τοΑνυψωμένοστήλη, θα δείτε ότι υπάρχει η διαδικασία regedit.exe χωρίς την ανυψωμένη κατάσταση (εκτελείται με δικαιώματα χρήστη που δεν είναι διαχειριστής).

Προσπαθήστε να επεξεργαστείτε οποιοδήποτε στοιχείο στην ομάδα μητρώου HKEY_LOCAL_MACHINE. Όπως μπορείτε να δείτε, ένας χρήστης δεν μπορεί να επεξεργαστεί το στοιχείο σε αυτό το κλειδί μητρώου (ο χρήστης δεν έχει δικαιώματα εγγραφής για τα κλειδιά μητρώου του συστήματος). Ωστόσο, μπορείτε να προσθέσετε ή να επεξεργαστείτε κλειδιά μητρώου και παραμέτρους στην ομάδα χρήστη σας (HKEY_CURRENT_USER).

Με τον ίδιο τρόπο, μπορείτε να εκτελέσετε οποιαδήποτε εφαρμογή χρησιμοποιώντας το αρχείο BAT. Απλώς καθορίστε τη διαδρομή προς το εκτελέσιμο αρχείο.

run-app-as-non-admin.bat
Set ApplicationPath="C:Program FilesSomeApptestapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"

Μπορείτε επίσης να προσθέσετε ένα μενού περιβάλλοντος που επιτρέπει την εκτέλεση όλων των εφαρμογών χωρίς ανύψωση. Για να το κάνετε, δημιουργήστε τοRunAsUser.REGαρχείο, αντιγράψτε τον ακόλουθο κώδικα σε αυτό, αποθηκεύστε τον και εισαγάγετε τον στο μητρώο των Windows κάνοντας διπλό κλικ στο αρχείο reg (θα χρειαστείτε δικαιώματα διαχειριστή για να εφαρμόσετε αυτήν την αλλαγή).

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT*shellforcerunasinvoker]
@="Run as user without UAC privilege elevation"
[HKEY_CLASSES_ROOT*shellforcerunasinvokercommand]
@="cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" "%1"""

Μετά από αυτό, για να εκτελέσετε οποιαδήποτε εφαρμογή χωρίς δικαιώματα διαχειριστή, απλώς επιλέξτε "Εκτέλεση ως χρήστης χωρίς ανύψωση προνομίου UAC" από το μενού περιβάλλοντος της Εξερεύνησης αρχείων των Windows.

Μπορείτε να αναπτύξετε αυτό το στοιχείο μενού σε όλους τους υπολογιστές στον τομέα εισάγοντας τις παραμέτρους μητρώου χρησιμοποιώντας το GPO.

Θα ήθελα να σας υπενθυμίσω ότι η χρήσηRUNASINVOKERη λειτουργία για το πρόγραμμα δεν θα σας επιτρέψει να αυξήσετε τα δικαιώματα. Το RunAsInvoker καταστέλλει την προτροπή UAC και λέει στο πρόγραμμα ότι πρέπει να εκτελείται με τα δικαιώματα του τρέχοντος χρήστη και όχι να ζητά την αύξηση των δικαιωμάτων. Εάν ένα πρόγραμμα χρειάζεται πραγματικά αυξημένα δικαιώματα για την επεξεργασία των ρυθμίσεων ή των αρχείων του συστήματος, δεν θα λειτουργήσει ή θα ζητήσει ξανά δικαιώματα διαχειριστή.

Πώς να παρακάμψετε το UAC με την επιλογή RunAsInvoker στο CMD;

Η μεταβλητή περιβάλλοντος __COMPAT_LAYER σας επιτρέπει να ορίσετε διαφορετικά επίπεδα συμβατότητας για τις εφαρμογές (τοΑρμονίακαρτέλα στις ιδιότητες ενός αρχείου EXE). Αυτή η μεταβλητή σάς επιτρέπει να καθορίσετε τις ρυθμίσεις συμβατότητας με τις οποίες θέλετε να εκτελέσετε το πρόγραμμα. Για παράδειγμα, για να ξεκινήσετε μια εφαρμογή σε λειτουργία συμβατότητας Windows 8 με ανάλυση 640×480, ορίστε τα εξής:

Δείτε επίσης:Πώς να αποκτήσετε δικαιώματα διαχειριστή των Windows χωρίς κωδικό πρόσβασης

set __COMPAT_LAYER=Win8RTM 640x480

Η μεταβλητή __COMPAT_LAYER έχει κάποιες επιλογές που μας ενδιαφέρουν. Υπάρχουν οι ακόλουθες παράμετροι:

  • Humansinvoker– εκτελέστε μια εφαρμογή με τα προνόμια μιας γονικής διαδικασίας χωρίς προτροπή UAC.
  • Runahigthest– εκτελέστε ένα πρόγραμμα με την άδεια υψηλότερου επιπέδου που είναι διαθέσιμη στον χρήστη (η προτροπή UAC θα εμφανιστεί εάν ένας χρήστης έχει δικαιώματα διαχειριστή).
  • RunAsAdmin– εκτελέστε μια εφαρμογή ως διαχειριστής (η προτροπή UAC θα εμφανίζεται πάντα).

Αυτό σημαίνει ότι η παράμετρος RunAsInvoker δεν εκχωρεί δικαιώματα διαχειριστή, απλώς καταστέλλει την προτροπή UAC.

Οι ακόλουθες εντολές ενεργοποιούν τη λειτουργία RunAsInvoker για την τρέχουσα διαδικασία και εκτελούν το καθορισμένο πρόγραμμα χωρίς ανύψωση:

set __COMPAT_LAYER=RUNASINVOKER
start "" "C:Program FilesMyApptestapp.exe"

Ενεργοποιήστε τη λειτουργία RunAsInvoker στο Manifest αρχείου EXE

Όπως αναφέρθηκε παραπάνω, τα Windows εμφανίζουν το εικονίδιο ασπίδας UAC για προγράμματα που απαιτούν αυξημένα δικαιώματα για την εκτέλεση. Οι προγραμματιστές θέτουν αυτήν την απαίτηση κατά τη σύνταξη της εφαρμογής στο πρόγραμμαδηλωτικό

Μπορείτε να επεξεργαστείτε το μανιφέστο οποιουδήποτε αρχείου EXE και να απενεργοποιήσετε την απαίτηση εκτέλεσης του προγράμματος σε ανυψωμένη λειτουργία.

Χρησιμοποιήστε το δωρεάνΧάκερ πόρωνεργαλείο για την επεξεργασία της δήλωσης προγράμματος. Ανοίξτε το εκτελέσιμο πρόγραμμα στο Resource Hacker.

Σε αυτό το παράδειγμα, θα επεξεργαστώ το μανιφέστο τουAutologon.exeεργαλείο της Sysinternals, το οποίο μπορεί να χρησιμοποιηθεί για αυτόματη σύνδεση στα Windows χωρίς κωδικό πρόσβασης.

Στο δέντρο στα αριστερά, πηγαίνετε στοΔηλωτικόενότητα και ανοίξτε τη δήλωση προγράμματος. Δώστε προσοχή στην ακόλουθη ενότητα XML:

<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>

Με τοαπαιτείται ΔιαχειριστήςΗ επιλογή είναι ενεργοποιημένη, τα Windows εκτελούν πάντα αυτό το πρόγραμμα με δικαιώματα διαχειριστή.

Αλλαγή απαιτείται Διαχειριστής σεως Invokerκαι αποθηκεύστε τις αλλαγές στο αρχείο .exe.

Σημειώστε ότι τώρα η ασπίδα UAC έχει εξαφανιστεί από το εικονίδιο του προγράμματος και μπορείτε να την εκτελέσετε ως τρέχων χρήστης χωρίς να ζητήσετε τον κωδικό πρόσβασης διαχειριστή.

Εάν το εκτελέσιμο αρχείο εφαρμογής είναι υπογεγραμμένο με ψηφιακή υπογραφή (πιστοποιητικό υπογραφής κώδικα), τότε μετά την τροποποίηση του αρχείου exe, ενδέχεται να σταματήσει να λειτουργεί ή να εμφανίσει μια προειδοποίηση.

Σε αυτήν την περίπτωση, μπορείτε να αναγκάσετε το πρόγραμμα να χρησιμοποιήσει ένα εξωτερικό αρχείο δήλωσης. Δημιουργήστε ένα αρχείο απλού κειμένουappname.exe.manifest(για παράδειγμα,Autologon.exe.manifest) στον κατάλογο με το αρχείο exe και αντιγράψτε τον κώδικα δήλωσης από το Resource Hacker σε αυτό. Αντικαταστήστε το requireAdministrator μεως Invoker. Αποθηκεύστε το αρχείο δήλωσης.

Για να κάνετε τα Windows να προσπαθούν πάντα να χρησιμοποιούν ένα εξωτερικό αρχείο δήλωσης κατά την εκκίνηση αρχείων EXE, ενεργοποιήστε μια ειδική παράμετρο μητρώου:

REG ADD "HKLMSOFTWAREMicrosoftWindowsCurrentVersionSideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f

Κάντε επανεκκίνηση των Windows και βεβαιωθείτε ότι το πρόγραμμα χρησιμοποιεί ένα εξωτερικό αρχείο δήλωσης και ότι εκτελείται χωρίς δικαιώματα διαχειριστή.

Δημιουργήστε μια συντόμευση για την εκτέλεση του προγράμματος με έναν αποθηκευμένο κωδικό πρόσβασης διαχειριστή

Εάν οι μέθοδοι εκτέλεσης ενός προγράμματος με τοHumansinvokerΗ σημαία δεν λειτουργεί για την εφαρμογή παλαιού τύπου, μπορείτε να δοκιμάσετε να εκτελέσετε μια τέτοια εφαρμογή σε μια περίοδο λειτουργίας χρήστη χρησιμοποιώντας αποθηκευμένα διαπιστευτήρια διαχειριστή. Αυτός είναι ο λιγότερο ασφαλής τρόπος εκτέλεσης προγραμμάτων χωρίς να παραχωρήσετε στον χρήστη δικαιώματα τοπικού διαχειριστή, επομένως τον αφήσαμε σκόπιμα τελευταίο.

Για να ανοίξετε το πρόγραμμα, δημιουργήστε μια νέα συντόμευση στην επιφάνεια εργασίας σας. Καθορίστε το όνομα υπολογιστή, το όνομα τοπικού διαχειριστή και την πλήρη διαδρομή προς την εκτελέσιμη εφαρμογή προορισμού.

Για παράδειγμα:

runas /user:wks-123root /savecred "C:CorpAppmyapp.exe"

Όταν εκτελείτε το πρόγραμμα για πρώτη φορά, θα ανοίξει μια γραμμή εντολών στην οποία θα σας ζητηθεί να εισαγάγετε τον κωδικό πρόσβασης διαχειριστή.

Η εντολή RunAs, όταν εκτελείται με το/ΣΩΘΗΚΕεπιλογή, αποθηκεύει το όνομα χρήστη και τον κωδικό πρόσβασης στο Windows Credentials Manager.

Την επόμενη φορά που θα εκτελεστεί η συντόμευση, το εργαλείο runas θα λάβει αυτόματα τον αποθηκευμένο κωδικό πρόσβασης από το Credentials Manager και θα τον χρησιμοποιήσει για να εκτελέσει την εφαρμογή στον καθορισμένο λογαριασμό τοπικού διαχειριστή (δεν θα σας ζητείται ο κωδικός πρόσβασης κάθε φορά που ανοίγετε τη συντόμευση).

Η ακόλουθη εντολή παραθέτει τους αποθηκευμένους κωδικούς πρόσβασης στο Credential Manager:

RunDll32.exe keymgr.dll,KRShowKeyMgr

Παρουσιάζεται ένα σφάλμα κατά την εκκίνηση μιας τέτοιας συντόμευσης στα Windows 11:

RUNAS ERROR: Unable to run - C:CorpAppmyapp.exe
740: The requested operation requires elevation.

Για να το διορθώσετε, αλλάξτε την εντολή στις ιδιότητες συντόμευσης. Αντικαταστήστε το με:

C:WindowsSystem32runas /profile /user:WKS-123root /savecred "cmd.exe /C C:CorpAppmyapp.exe"

Η χρήση της επιλογής /savecred δεν είναι ασφαλής, όπως αναφέραμε παραπάνω. Αυτό συμβαίνει επειδή ένας χρήστης που έχει αποθηκευμένο τον κωδικό πρόσβασης διαχειριστή στο προφίλ του μπορεί να τον χρησιμοποιήσει για εκτέλεσηκάθεπρόγραμμα ή εντολή με αυξημένα δικαιώματα ή ακόμα και για επαναφορά του κωδικού πρόσβασης του λογαριασμού διαχειριστή. Οι κωδικοί πρόσβασης που είναι αποθηκευμένοι στο Credential Manager μπορούν επίσης να μεταφερθούν σε απλό κείμενο από εργαλεία όπως το Mimikatz, επομένως είναι καλύτερο να απενεργοποιήσετε τη χρήση αποθηκευμένων κωδικών πρόσβασης.

Στα Windows, μπορείτε να απενεργοποιήσετε την αποθήκευση του κωδικού πρόσβασης στο Credential Manager χρησιμοποιώντας την επιλογή Πολιτική ομάδαςΠρόσβαση δικτύου: Μην επιτρέπεται η αποθήκευση κωδικών πρόσβασης και διαπιστευτηρίων για έλεγχο ταυτότητας δικτύου(Διαμόρφωση υπολογιστή -> Ρυθμίσεις Windows -> Ρυθμίσεις ασφαλείας -> Τοπικές πολιτικές -> Επιλογές ασφαλείας).

Υπάρχουν πολλά εργαλεία τρίτων που σας επιτρέπουν να αντιμετωπίσετε το μειονέκτημα της χρήσης ενός αποθηκευμένου κωδικού πρόσβασης διαχειριστή σε runas. Για παράδειγμα,AdmiLink,RunAsRob,RunAsSpc. Αυτές οι εφαρμογές σάς επιτρέπουν να αποθηκεύσετε τον κρυπτογραφημένο κωδικό πρόσβασης διαχειριστή και να εκτελέσετε με ασφάλεια το πρόγραμμα με δικαιώματα διαχειριστή. Αυτά τα εργαλεία δεν θα επιτρέψουν στον χρήστη να εκτελέσει οποιαδήποτε εφαρμογή ή εντολή με αποθηκευμένα διαπιστευτήρια, επειδή ελέγχουν τη διαδρομή και το άθροισμα ελέγχου του εκτελέσιμου αρχείου κατά την εκκίνηση.

Related Posts