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:
-
.NET 8 sau o versiune ulterioară
-
.NET Framework, toate versiunile, începând cu actualizările de securitate din iulie 2024 și actualizările ulterioare
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.
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.
Î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 .
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 .
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.