Ημερομηνία κυκλοφορίας:25 Φεβρουαρίου 2025

Έκδοση:.NET 8 και νεότερες εκδόσεις.NET Framework, όλες οι εκδόσεις

Σύνοψη

Η Microsoft έχει αναπτύξει βελτιώσεις ασφαλείας για τις πρόσφατες εκδόσεις των Windows. Αυτές οι βελτιώσεις ασφαλείας τροποποιούν τον προσωρινό χειρισμό διαδρομής και μπορεί να προκαλέσουν την επιστροφή ορισμένων .NET Framework και .NET API, όπωςSystem.IO.Path.GetTempPath(), σε διαφορετική θέση μετά την εφαρμογή της ενημερωμένης έκδοσης κώδικα.

Απαιτείται ενέργεια

Δεν απαιτείται καμία ενέργεια από οποιαδήποτε .NET Framework ή . Εφαρμογή που βασίζεται στο NET. Η εφαρμογή σας θα επωφεληθεί αυτόματα από τυχόν βελτιώσεις ασφαλείας που ισχύουν για το περιβάλλον σας. Οι περισσότερες εφαρμογές δεν θα παρατηρήσουν καμία αλλαγή συμπεριφοράς. 

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

Κατάλληλο λογισμικό

Αυτό το άρθρο ισχύει για το ακόλουθο λογισμικό: 

Μόνο όταν εκτελείται στις ακόλουθες εκδόσεις του Windows Update: 

  • Windows 10, έκδοση 22H2 κατά την εγκατάσταση του KB5052077

  • Windows Server 2019, όταν εγκαθίσταται KB5053594 

  • Windows Server 2016, όταν εγκαθίσταται KB5053594 

Αυτό το άρθρο δεν ισχύει για .NET Framework ή το .NET που εκτελείται σε Windows 11, Windows Server 2022 ή νεότερη έκδοση. 

Αυτό το άρθρο δεν ισχύει για το .NET κατά την εκτέλεση σε πλατφόρμες εκτός των Windows. 

Λεπτομερής περιγραφή και δήλωση επιπτώσεων

Από τα KB ενημέρωσης των Windows που αναφέρονται παραπάνω, η Microsoft έχει υποστηρίξει το Win32 GetTempPath2 API σε παλαιότερες εκδόσεις των Windows που διατίθενται στην αγορά, ώστε να λειτουργεί ως μια πιο ασφαλής αντικατάσταση για το παλαιότερο API του Win32 GetTempPath . Εσωτερικά, το .NET Framework και το .NET βασίζονται σε αυτά τα API Win32 για την παροχή της εφαρμογής της μεθόδου System.IO.Path.GetTempPath() : προτιμάται το API GetTempPath2 Win32 εάν υπάρχει και το API GetTempPath Win32 χρησιμοποιείται ως εναλλακτική επιλογή εάν το GetTempPath2 δεν υπάρχει. 

Επειδή αυτά τα KB καθιστούν διαθέσιμο το νέο API GetTempPath2 Win32 στις κατάλληλες πλατφόρμες, το .NET Framework και το .NET θα αρχίσουν να χρησιμοποιούν το GetTempPath2 μετά την εγκατάσταση των KB. 

Η κύρια αλλαγή συμπεριφοράς είναι ότι οι καλούντες που εκτελούνται ως ταυτότητα SYSTEM θα παρατηρήσουν την System.IO.Path.GetTempPath() η μέθοδος επιστροφής %WINDIR%\SystemTemp από προεπιλογή, ενώ οι καλούντες που εκτελούνται ως οτιδήποτε άλλο εκτός από την ταυτότητα SYSTEM θα παρατηρήσουν ότι η μέθοδος συνεχίζει να επιστρέφει την υπάρχουσα τιμή της. 

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

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

  • Η εφαρμογή σας εκτελείται ως ταυτότητα SYSTEM. και

  • Μπορείτε να ορίσετε με μη αυτόματο τρόπο τη μεταβλητή περιβάλλοντος %TMP% ή %TEMP% για να ανακατευθύνετε την τυπική προσωρινή θέση αρχείου. (Ανατρέξτε στην ενότητα "Παρατηρήσεις" στην τεκμηρίωση για το Win32 GetTempPath API.)

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

Αυτή η αλλαγή συμπεριφοράς μπορεί να είναι ορατή μέσω οποιουδήποτε .NET Framework ή . API που παρέχεται από το NET, το οποίο στηρίζεται τελικά στο GetTempPath2. Τα πιο συνηθισμένα σημεία εισόδου είναι τα εξής: 

Αυτό δεν προορίζεται να είναι μια πλήρης λίστα των μεθόδων των οποίων η συμπεριφορά μπορεί να αλλάξει μετά την εγκατάσταση των KB. 

Καθορισμός της λειτουργίας μιας εφαρμογής κάτω από την ταυτότητα SYSTEM 

Υπάρχουν διάφοροι μηχανισμοί για τον προσδιορισμό της ταυτότητας μιας εφαρμογής .NET Framework ή .NET

Εφαρμογές web που βασίζονται σε IIS 

Το IIS αναφέρεται στην ταυτότητα SYSTEM ως "LOCALSYSTEM". Στη Διαχείριση IIS (inetmgr.exe), μεταβείτε στην καρτέλα Χώροι συγκέντρωσης εφαρμογών για να δείτε όλους τους χώρους συγκέντρωσης εφαρμογών και τις συσχετισμένες ταυτότητές τους. Μπορείτε επίσης να επιλέξετε "Ταυτότητα" από την αναπτυσσόμενη λίστα Ομαδοποίηση κατά για να βλέπετε πιο εύκολα τους χώρους συγκέντρωσης εφαρμογών που εκτελούνται ως ταυτότητα LOCALSYSTEM. 

Το παρακάτω στιγμιότυπο οθόνης δείχνει ένα παράδειγμα χώρου συγκέντρωσης εφαρμογών ("MyAppPool") που έχει ρυθμιστεί ώστε να εκτελείται ως LOCALSYSTEM. Οι εφαρμογές που εκτελούνται εντός αυτού του χώρου συγκέντρωσης εφαρμογών θα εκτελούνται ως ταυτότητα SYSTEM. 

Το στιγμιότυπο οθόνης εμφανίζει ένα παράδειγμα χώρου συγκέντρωσης εφαρμογών ("MyAppPool") που έχει ρυθμιστεί ώστε να εκτελείται ως LOCALSYSTEM. Οι εφαρμογές που εκτελούνται εντός αυτού του χώρου συγκέντρωσης εφαρμογών θα εκτελούνται ως ταυτότητα SYSTEM.

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

Import-Module IISAdministration  Get-IISAppPool | where {$_.ProcessModel.IdentityType -eq "LocalSystem"} 

Σε έναν υπολογιστή που έχει ρυθμιστεί με ένα χώρο συγκέντρωσης εφαρμογών επιπέδου SYSTEM "MyAppPool", όπως φαίνεται στο παραπάνω στιγμιότυπο οθόνης, αυτή η δέσμη ενεργειών PowerShell εκτυπώνει τα εξής, εμφανίζοντας ότι το "MyAppPool" εκτελείται κάτω από την ταυτότητα SYSTEM. 

Name                 Status       CLR Ver  Pipeline Mode  Start Mode  ----                 ------       -------  -------------  ---------- MyAppPool            Started      v4.0     Integrated     OnDemand 

Υπηρεσίες των Windows 

Εάν η .NET Framework ή . Η εφαρμογή που βασίζεται στο NET έχει καταχωρηθεί ως Υπηρεσία των Windows και μπορείτε να χρησιμοποιήσετε τη Διαχείριση υπηρεσιών για να προβάλετε τη συσχετισμένη της ταυτότητα. 

Από μια γραμμή εντολών με αναβαθμισμένο ύψος, εκτελέστε services.msc. Αυτό εμφανίζει το περιβάλλον εργασίας χρήστη του διαχειριστή υπηρεσιών. 

Από μια γραμμή εντολών με αναβαθμισμένη λειτουργία, εκτελέστε το services.msc. Αυτό εμφανίζει το περιβάλλον εργασίας χρήστη του διαχειριστή υπηρεσιών.

Εάν η στήλη Log On As παραθέτει το στοιχείο "Τοπικό σύστημα" για την ταυτότητα υπηρεσίας, τότε η υπηρεσία εκτελείται με την ταυτότητα SYSTEM. 

Μπορείτε επίσης να υποβάλετε ερωτήματα σε αυτά τα δεδομένα μέσω PowerShell χρησιμοποιώντας το cmdlet Get-Service . Για παράδειγμα, για να υποβάλετε ερωτήματα σχετικά με αυτές τις πληροφορίες για μια υπηρεσία με το όνομα MyService, χρησιμοποιήστε την ακόλουθη εντολή. 

(Get-Service MyService).UserName -ieq "LocalSystem" 

Εάν η υπηρεσία έχει καταχωρηθεί για εκτέλεση με την ταυτότητα SYSTEM, θα εκτυπωθεί η τιμή True στην κονσόλα. 

Άλλοι μηχανισμοί 

Εργαλεία όπως η Διαχείριση Εργασιών (taskmgr.exe) ή η Εξερεύνηση διεργασιών Sysinternals μπορούν επίσης να σας ενημερώσουν εάν μια εφαρμογή εκτελείται με την ταυτότητα SYSTEM. 

Στη Διαχείριση Εργασιών, χρησιμοποιήστε την προβολή Λεπτομέρειες για να παραθέσετε όλες τις διεργασίες που εκτελούνται στο σύστημα και, στη συνέχεια, εντοπίστε τη διαδικασία που σας ενδιαφέρει και δείτε την καταχώρηση στη στήλη Όνομα χρήστη

Στη Διαχείριση Εργασιών, χρησιμοποιήστε την προβολή Λεπτομέρειες για να παραθέσετε όλες τις διεργασίες που εκτελούνται στο σύστημα και, στη συνέχεια, εντοπίστε τη διαδικασία που σας ενδιαφέρει και δείτε την καταχώρηση στη στήλη Όνομα χρήστη.

Εάν η τιμή Όνομα χρήστη αναφέρει "ΣΥΣΤΗΜΑ", η διαδικασία εκτελείται κάτω από την ταυτότητα ΣΥΣΤΗΜΑΤΟΣ. 

Εναλλακτικά, στην Εξερεύνηση διεργασιών Sysinternals, εντοπίστε τη διαδικασία που σας ενδιαφέρει, πληκτρολογήστε την προβολή Ιδιότητες και, στη συνέχεια, κοιτάξτε το πεδίο Χρήστης στην καρτέλα Εικόνα

Στην Εξερεύνηση διεργασιών Sysinternals, εντοπίστε τη διαδικασία που σας ενδιαφέρει, πληκτρολογήστε την προβολή Ιδιότητες και, στη συνέχεια, κοιτάξτε το πεδίο Χρήστης στην καρτέλα Εικόνα.

Εάν η τιμή Χρήστης έχει την ένδειξη "NT AUTHORITY\SYSTEM", η διαδικασία εκτελείται με την ταυτότητα SYSTEM. 

Αλλαγή της προσωρινής διαδρομής για διεργασίες επιπέδου SYSTEM 

Η παρακάτω δέσμη ενεργειών του PowerShell δείχνει πώς μπορείτε να δημιουργήσετε έναν νέο κατάλογο C:\NewSystemTemp\ και να περιορίσετε την πρόσβαση στον κατάλογο μόνο σε διεργασίες που εκτελούνται με την ταυτότητα SYSTEM. Μην επιχειρήσετε να αλλάξετε τις ACL ενός καταλόγου που έχει ήδη συμπληρωθεί με αρχεία. 

Αυτή η δέσμη ενεργειών πρέπει να εκτελεστεί από μια αναβαθμισμένη περίοδο λειτουργίας του PowerShell. 

mkdir C:\NewSystemTemp\  $acl = New-Object System.Security.AccessControl.DirectorySecurity  $acl.SetSecurityDescriptorSddlForm("O:SYG:SYD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)")  Set-Acl C:\NewSystemTemp\ -AclObject $acl 

Μπορείτε να επιβεβαιώσετε ότι αυτή η λειτουργία ολοκληρώθηκε με επιτυχία, εκτελώντας την εντολή 

icacls C:\NewSystemTemp\ 

Το οποίο θα παράγει το ακόλουθο αποτέλεσμα που δείχνει επιτυχία: 

C:\NewSystemTemp\ NT AUTHORITY\SYSTEM:(OI)(CI)(F)                    BUILTIN\Administrators:(OI)(CI)(F)   Successfully processed 1 files; Failed processing 0 files 

Μόλις δημιουργηθεί ο κατάλογος, ορίστε τη μεταβλητή περιβάλλοντος %SYSTEMTEMP% με εύρος επιπέδου συστήματος. Μπορείτε να ορίσετε αυτήν τη ρύθμιση μέσω του περιβάλλοντος εργασίας χρήστη Πίνακας Ελέγχου συστήματος ή μπορείτε να την ορίσετε μέσω προγραμματισμού μέσω του PowerShell: 

[Environment]::SetEnvironmentVariable("SYSTEMTEMP", "C:\NewSystemTemp", [EnvironmentVariableTarget]::Machine) 

Στη συνέχεια, επανεκκινήστε τον υπολογιστή. 

Η αλλαγή της μεταβλητής περιβάλλοντος %SYSTEMTEMP%δεν θα αλλάξει την επιστρεφόμενη τιμή του System.IO.Path.GetTempPath() για τις εφαρμογές .NET Framework και .NET που εκτελούνται ως ταυτότητα διαφορετική από τη συνάρτηση SYSTEM. Αυτές οι εφαρμογές θα συνεχίσουν να ακολουθούν την ίδια λογική ανάλυσης που είχαν πάντα, συμπεριλαμβανομένης της τήρησης των μεταβλητών περιβάλλοντος %TMP% ή %TEMP% εάν υπάρχουν. 

Παρομοίως, ο ορισμός της μεταβλητής περιβάλλοντος %TMP% ή %TEMP% δεν θα αλλάξει την τιμή επιστροφής των System.IO.Path.GetTempPath() για τις εφαρμογές .NET Framework και .NET που εκτελούνται ως ταυτότητα SYSTEM. 

Για περισσότερες πληροφορίες

Για περισσότερες πληροφορίες σχετικά με τις συμπεριφορές .NET Framework και .NET, ανατρέξτε στην τεκμηρίωση του .NET στο Path.GetTempPath

Για περισσότερες πληροφορίες σχετικά με την υποκείμενη συμπεριφορά του λειτουργικού συστήματος Windows, ανατρέξτε στην τεκμηρίωση των Windows για το Win32 GetTempPath2 API.

Χρειάζεστε περισσότερη βοήθεια;

Θέλετε περισσότερες επιλογές;

Εξερευνήστε τα πλεονεκτήματα της συνδρομής, περιηγηθείτε σε εκπαιδευτικά σεμινάρια, μάθετε πώς μπορείτε να προστατεύσετε τη συσκευή σας και πολλά άλλα.