Datum izdavanja:
25. februar 2025.Verzija:
.NET 8 i novije .NET Framework, sve verzijeRezime
Microsoft je objavio poboljšanja bezbednosti za nedavne verzije operativnog sistema Windows. Ova poboljšanja bezbednosti menjaju rukovanje privremenim putanjama i mogu dovesti do .NET Framework i .NET API-ja kao što suSystem.IO.Path.GetTempPath()da vrate drugu lokaciju kada se zakrpa primeni.
Potrebna je radnja
Nijedna radnja nije potrebna ni za .NET Framework ili . Aplikacija zasnovana na NET-u. Aplikacija će automatski imati koristi od bilo kojih bezbednosnih poboljšanja koja važe za vaše okruženje. Većina aplikacija neće posmatrati promene u ponašanju.
Ostatak ovog članka pruža detalje o tome kako da utvrdite da li ova bezbednosna poboljšanja mogu da utiču na ponašanje aplikacije tokom izvršavanja. Ovaj članak navodi i korake za prilagođavanje ponašanja izvršavanja ako želite
Primenljivi softver
Ovaj članak se odnosi na sledeći softver:
-
.NET 8 i više
-
.NET Framework, sve verzije, poče od bezbednosnih ispravki iz jula 2024. i narednih ispravki
Samo kada radite na sledećim verzijama za Windows Update:
-
Windows 10, verzija 22H2 kada je KB5052077 instalirana
-
Windows Server 2019, kada je KB5053594 instalirana
-
Windows Server 2016, kada KB5053594 instalirana
Ovaj članak se ne odnosi na .NET Framework .NET pokrenut na Windows 11, Windows Server 2022 ili novijim verzijama.
Ovaj članak se ne odnosi na .NET kada je pokrenut na platformama koje nisu Windows.
Detaljan opis i izjava o uticaju
Po gorenavedenim KB-ovima ispravki za Windows, Microsoft je vratio Win32 GetTempPath2 API u starije verzije operativnog sistema Windows na tržištu kako bi reagovao kao bezbednija zamena za stariji Win32 GetTempPath API. Interno, .NET Framework i .NET se oslanjaju na ove Win32 API-je da bi pružili primenu System.IO.Path.GetTempPath() metoda: Ako postoji, preporučuje se Win32 GetTempPath2 API; a Win32 GetTempPath API se koristi kao rezervna opcija ako GetTempPath2 ne postoji.
Budući da ovi KB-ovi GetTempPath2 Win32 GetTempPath2 dostupni na važećim platformama, .NET Framework i .NET će početi da koriste GetTempPath2 kada se KB-ovi instaliraju.
Primarna promena u ponašanju je da će pozivaoci koji rade kao SISTEMSKI identitet posmatrati System.IO.Path.GetTempPath() metod vraćanja %WINDIR%\SystemTemp , dok će pozivaoci koji rade kao bilo šta drugo osim sistemskog identiteta posmatrati metod i nastaviti da vraćaju njegovu postojeću vrednost.
Ako aplikacija ispunjava sve dolenavedene kriterijume, ova promena će možda uticati na vas:
-
Vaša aplikacija koristi runtime i OS platformu navedene u okviru prethodnog naslova "Primenjivi softver"; I
-
Aplikacija se pokreće kao SYSTEM identitet; I
-
Promenljivu okruženja %TMP% ili %TEMP% ručno podesite tako da preusmerava standardnu lokaciju privremene datoteke. (Pogledajte odeljak Sa primedama u Dokumentaciji za Win32 GetTempPath API.)
Ako ispunite sve ove kriterijume, kada instalirate Windows KB-ove, možete da posmatrate kako aplikacija piše u temp direktorijumu koji nije direktorijum koji ste nameravali.
Ova promena u ponašanju može biti vidljiva putem bilo kog .NET Framework ili . API koji je obezbedio NET koji se na kraju oslanja na GetTempPath2. Najčešće ulazne tačke su:
Ovo nije predviđeno da bude iscrpna lista metoda čija ponašanja mogu da se promene kada se KB-e instaliraju.
Određivanje da li se aplikacija pokreće u okviru SYSTEM identiteta
Postoji nekoliko različitih mehanizama za određivanje identiteta .NET Framework ili .NET aplikacije
Veb aplikacije zasnovane na IIS-u
IIS se odnosi na SYSTEM identitet kao "LOCALSYSTEM". U menadžeru IIS (inetmgr.exe) idite na karticu Grupe aplikacija da biste videli sve grupe aplikacija i njihove povezane identitete. Možete i da izaberete stavku "Identitet" iz padajuće liste Grupiši po da biste lakše videli grupe aplikacija koje su pokrenute kao LOCALSYSTEM identitet.
Dolenavedeni snimak ekrana prikazuje primer grupe aplikacija ("MyAppPool") koja je konfigurisana da se pokreće kao LOCALSYSTEM. Sve aplikacije pokrenute u okviru ove grupe aplikacija će se pokrenuti kao SYSTEM identitet.
Programskom pristupu ovim informacijama možete programski da pristupite iz PowerShell sesije sa punim privilegijama pomoću skripte ispod.
Import-Module IISAdministration Get-IISAppPool | where {$_.ProcessModel.IdentityType -eq "LocalSystem"}
Na računaru konfigurisanom pomoću grupe aplikacija "MyAppPool" na nivou SISTEMA, kao što je prikazano na gorenavedenom snimku ekrana, ova PowerShell skripta štampa sledeću poruku koja prikazuje da je "MyAppPool" pokrenut pod SYSTEM identitetom.
Name Status CLR Ver Pipeline Mode Start Mode ---- ------ ------- ------------- ---------- MyAppPool Started v4.0 Integrated OnDemand
Windows usluge
Ako je .NET Framework ili . Aplikacija zasnovana na NET-u registrovana je kao Windows usluga, možete da koristite menadžer usluga da biste prikazali povezani identitet.
Iz komandne linije sa punim privilegijama pokrenite services.msc. To prikazuje korisnički interfejs menadžera usluga.
Ako kolona Prijavi se kao navodi "Lokalni sistem" za identitet usluge, usluga je pokrenuta u okviru SYSTEM identiteta.
Te podatke možete da izvršite i pomoću programa PowerShell pomoću Get-Service cmdlet komande. Na primer, da biste izvršili upit za uslugu pod imenom MyService, koristite sledeću komandu.
(Get-Service MyService).UserName -ieq "LocalSystem"
Ako je usluga registrovana za pokretanje u okviru SYSTEM identiteta, ovo će odštampati true na konzoli.
Drugi mehanizmi
Alatke kao što su Upravljač zadacima (taskmgr.exe) ili Istraživač procesa Sysinternals mogu vam takođe reći da li je aplikacija pokrenuta pod SISTEM identitetom.
U upravljaču zadacima koristite prikaz Detalji da biste nabrajali sve pokrenute procese u sistemu, a zatim pronađite proces interesovanja i pogledajte unos u okviru kolone Korisničko ime.
Ako vrednost korisničkog imena čita "SYSTEM", proces je pokrenut u okviru SYSTEM identiteta.
Ili, u istraživaču procesa Sysinternals pronađite proces interesovanja i unesite prikaz Svojstva, a zatim pogledajte polje Korisnik u okviru kartice Slika.
Ako vrednost korisnika čita "NT AUTHORITY\SYSTEM", proces je pokrenut pod identitetom SISTEMA.
Promena temp putanje za procese na nivou SISTEMA
PowerShell skripta ispod pokazuje kako da kreirate novi direktorijum C:\NewSystemTemp\ i ograničite pristup direktorijumu samo na procese koji se izvršavaju pod SISTEM identitetom. Nemojte pokušavati da promenite ACL-ove direktorijuma koji je već popunjen datotekama.
Ova skripta mora da se pokrene iz PowerShell sesije sa punim privilegijama.
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
Možete da potvrdite da je ova operacija uspela tako što ćete pokrenuti komandu
icacls C:\NewSystemTemp\
To će dati sledeći rezultat koji prikazuje uspeh:
C:\NewSystemTemp\ NT AUTHORITY\SYSTEM:(OI)(CI)(F) BUILTIN\Administrators:(OI)(CI)(F) Successfully processed 1 files; Failed processing 0 files
Kada se kreira direktorijum, podesite promenljivu %SYSTEMTEMP% okruženja sa opsegom na nivou sistema. To možete da podesite putem korisničkog interfejsa Kontrolna tabla, a možete i programski da ga podesite pomoću programa PowerShell:
[Environment]::SetEnvironmentVariable("SYSTEMTEMP", "C:\NewSystemTemp", [EnvironmentVariableTarget]::Machine)
Zatim ponovo pokrenite mašinu.
Promena promenljive %SYSTEMTEMP% okruženja neće promeniti povratnu vrednost System.IO.Path.GetTempPath() za .NET Framework i .NET aplikacije koje su pokrenute kao identitet koji nije SYSTEM. Te aplikacije će nastaviti da prate istu logiku rezolucije koju su uvek imale, uključujući ispoštovanje %TMP% ili %TEMP% okruženja ako su prisutne.
Slično tome, podešavanje promenljive %TMP% ili %TEMP% okruženja neće promeniti povratnu vrednost System.IO.Path.GetTempPath() za .NET Framework i .NET aplikacije koje su pokrenute kao SYSTEM identitet.
Za više informacija
Dodatne informacije o .NET Framework i .NET ponašanjima potražite u dokumentaciji za .NET na putanji.GetTempPath.
Više informacija o osnovnom ponašanju operativnog sistema Windows OS potražite u Windows dokumentaciji na Win32 GetTempPath2 API-ju.