Data de lansare:25 februarie 2025

Versiunea:.NET 8 sau o versiune ulterioară.NET Framework, toate versiunile

Rezumat

Microsoft a implementat îmbunătățiri de securitate pentru versiunile recente de Windows. Aceste îmbunătățiri de securitate modifică gestionarea temporară a căilor și pot face ca anumite API-uri .NET Framework și .NET, cum ar fiSystem.IO.Path.GetTempPath(), să returneze o altă locație după aplicarea corecției.

Acțiune necesară

Nu este necesară nicio acțiune din niciun .NET Framework sau . aplicație bazată pe NET. Aplicația dvs. va beneficia automat de orice îmbunătățiri de securitate aplicabile mediului dvs. Majoritatea aplicațiilor nu vor observa nicio modificare de comportament. 

Restul acestui articol detaliază modul în care să determinați dacă aceste îmbunătățiri de securitate pot afecta comportamentul runtime al aplicației dvs. Acest articol listează, de asemenea, pașii pentru particularizarea comportamentului la momentul rulării, dacă doriți

Software aplicabil

Acest articol se aplică următoarelor programe software: 

Doar atunci când rulați pe următoarele versiuni de Windows Update: 

  • Windows 10, versiunea 22H2 atunci când este instalat KB5052077

  • Windows Server 2019, când este instalat KB5053594 

  • Windows Server 2016, când este instalat KB5053594 

Acest articol nu se aplică pentru .NET Framework sau .NET care rulează pe Windows 11, Windows Server 2022 sau o versiune mai recentă. 

Acest articol nu se aplică pentru .NET atunci când rulați pe platforme non-Windows. 

Descriere detaliată și instrucțiune de impact

Începând cu kb-urile de actualizare Windows menționate mai sus, Microsoft a reportat API-ul Win32 GetTempPath2 la versiunile mai vechi de Windows de pe piață, pentru a acționa ca un înlocuitor mai sigur pentru API-ul Win32 GetTempPath mai vechi. Pe plan intern, .NET Framework și .NET se bazează pe aceste API-uri Win32 pentru a furniza implementarea metodei System.IO.Path.GetTempPath() : API-ul Win32 GetTempPath2 este preferat dacă există, iar WIN32 GetTempPath API este utilizat ca rezervă dacă GetTempPath2 nu există. 

Deoarece aceste KB-uri fac noul API Win32 GetTempPath2 disponibil pe platformele aplicabile, .NET Framework și .NET vor începe să utilizeze GetTempPath2 după instalarea KBs. 

Principala modificare de comportament este aceea că apelanții care rulează ca identitate DE SISTEM vor observa metoda System.IO.Path.GetTempPath() returnează %WINDIR%\SystemTemp în mod implicit, în timp ce apelanții care rulează ca orice altceva decât identitatea SYSTEM vor observa metoda și vor continua să returneze valoarea existentă. 

Dacă aplicația dvs. îndeplinește toate criteriile de mai jos, este posibil să fiți afectat de această modificare: 

  • Aplicația utilizează o platformă runtime și de sistem de operare listată sub titlul anterior "Software aplicabil"; și

  • Aplicația dvs. rulează ca identitate SYSTEM; și

  • Setați manual variabila de mediu %TMP% sau %TEMP% pentru a redirecționa locația fișierului temp standard. (Consultați secțiunea Observații din documentația Win32 GetTempPath API.)

Dacă îndepliniți toate aceste criterii, atunci, odată ce sunt instalate blocurile de sistem de operare Windows, este posibil să observați că aplicația dvs. scrie într-un director temporar diferit de directorul dorit. 

Această modificare de comportament poate fi vizibilă prin orice .NET Framework sau . API furnizat de NET, care în cele din urmă se bazează pe GetTempPath2. Cele mai comune puncte de intrare sunt: 

Aceasta nu este menită să fie o listă exhaustivă de metode ale căror comportamente se pot modifica după instalarea KB-urilor. 

Se determină dacă o aplicație rulează sub identitatea SYSTEM 

Există mai multe mecanisme diferite pentru determinarea identității unei aplicații .NET Framework sau .NET

Aplicații web bazate pe IIS 

IIS se referă la identitatea SISTEMului ca "LOCALSYSTEM". În IIS Manager (inetmgr.exe), accesați fila Fonduri comune de aplicații pentru a vedea toate fondurile comune de aplicații și identitățile lor asociate. De asemenea, puteți selecta "Identitate" din lista verticală Grupare după, pentru a facilita vizualizarea fondurilor comune de aplicații care rulează ca identitate LOCALSYSTEM. 

Captura de ecran de mai jos afișează un exemplu de fond comun de aplicații ("MyAppPool") care este configurat să ruleze ca LOCALSYSTEM. Toate aplicațiile care rulează în acest fond comun de aplicații vor rula ca identitate de sistem. 

Captura de ecran afișează un exemplu de fond comun de aplicații ("MyAppPool") care este configurat să ruleze ca LOCALSYSTEM. Toate aplicațiile care rulează în acest fond comun de aplicații vor rula ca identitate de sistem.

De asemenea, puteți accesa aceste informații prin programare dintr-o sesiune PowerShell cu drepturi sporite, utilizând scriptul de mai jos. 

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

Într-o mașină configurată cu un fond comun de aplicații "MyAppPool" la nivel DE SISTEM, așa cum se arată în captura de ecran de mai sus, acest script PowerShell imprimă următoarele, arătând că "MyAppPool" rulează sub identitatea SISTEM. 

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

Servicii Windows 

Dacă .NET Framework sau . Aplicația bazată pe NET este înregistrată ca serviciu Windows, puteți utiliza Managerul de servicii pentru a-i vizualiza identitatea asociată. 

Dintr-o linie de comandă cu drepturi sporite, rulați services.msc. Astfel se afișează interfața de utilizator a managerului de servicii. 

Dintr-o linie de comandă cu drepturi sporite, rulați services.msc. Astfel se afișează interfața de utilizator a managerului de servicii.

În cazul în care coloana Conectare ca listează "Sistem local" pentru identitatea serviciului, atunci serviciul rulează sub identitatea SYSTEM. 

De asemenea, puteți interoga aceste date prin PowerShell utilizând cmdletul Get-Service . De exemplu, pentru a interoga aceste informații pentru un serviciu denumit MyService, utilizați următoarea comandă. 

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

Dacă serviciul este înregistrat pentru a rula sub identitatea SYSTEM, se va imprima True pe consolă. 

Alte mecanisme 

Instrumente precum Managerul de activități (taskmgr.exe) sau Exploratorul de procese Sysinternals vă pot spune, de asemenea, dacă o aplicație rulează sub identitatea SISTEM. 

În Managerul de activități, utilizați vizualizarea Detalii pentru a lista toate procesele care rulează în sistem, apoi găsiți procesul de interes și uitați-vă la intrarea de sub coloana Nume utilizator

În Managerul de activități, utilizați vizualizarea Detalii pentru a lista toate procesele care rulează în sistem, apoi găsiți procesul de interes și uitați-vă la intrarea de sub coloana Nume utilizator.

Dacă valoarea Nume utilizator citește "SYSTEM", procesul rulează sub identitatea SYSTEM. 

Sau, în Sysinternals Process Explorer, găsiți procesul de interes și introduceți vizualizarea Proprietăți , apoi uitați-vă la câmpul Utilizator sub fila Imagine

în Explorator proces Sysinternals, găsiți procesul de interes și introduceți vizualizarea Proprietăți, apoi uitați-vă la câmpul Utilizator de sub fila Imagine.

Dacă valoarea Utilizator citește "NT AUTHORITY\SYSTEM", procesul rulează sub identitatea SYSTEM. 

Modificarea căii temporare pentru procesele la nivel de SISTEM 

Scriptul PowerShell de mai jos demonstrează cum să creați un director nou C:\NewSystemTemp\ și să restricționați accesul directorului la doar procesele care rulează sub identitatea SYSTEM. Nu încercați să modificați ACL-urile unui director care este deja populat cu fișiere. 

Acest script trebuie rulat dintr-o sesiune PowerShell cu drepturi sporite. 

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 

Aveți posibilitatea să confirmați că această operațiune a reușit rulând comanda 

icacls C:\NewSystemTemp\ 

Ceea ce va produce următorul rezultat care va demonstra succesul: 

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

După crearea directorului, setați variabila de mediu %SYSTEMTEMP% cu domeniul la nivel de sistem. Puteți seta acest lucru prin interfața de utilizator a sistemului Panou de control sau o puteți seta prin programare prin PowerShell: 

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

Apoi reporniți computerul. 

Modificarea variabilei de mediu %SYSTEMTEMP%nu va modifica valoarea returnată a System.IO.Path.GetTempPath() pentru aplicațiile .NET Framework și .NET care rulează ca altă identitate decât SYSTEM. Aceste aplicații vor continua să urmeze aceeași logică de rezolvare pe care o au întotdeauna, inclusiv onorarea variabilelor de mediu %TMP% sau %TEMP% , dacă sunt prezente. 

În mod similar, setarea variabilei de mediu %TMP% sau %TEMP% nu va modifica valoarea returnată a System.IO.Path.GetTempPath() pentru aplicațiile .NET Framework și .NET care rulează ca identitate SYSTEM. 

Pentru informații suplimentare

Pentru mai multe informații despre comportamentele .NET Framework și .NET, consultați documentația .NET despre Path.GetTempPath

Pentru mai multe informații despre comportamentul sistemului de operare Windows subiacent, consultați documentația Windows pentru API-ul Win32 GetTempPath2.

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.