Datum izdaje:25. februar 2025
Različica:.NET 8 in novejšerazličice ogrodje .NET Framework vse različice
Povzetek
Microsoft je izdal varnostne izboljšave v najnovejših različicah sistema Windows. Te varnostne izboljšave spremenijo začasno obravnavanje poti in lahko povzročijo, da ogrodje .NET Framework in API-ji .NET, kot jeSystem.IO.Path.GetTempPath(), vrnejo drugo mesto po uporabi popravka.
Potrebno je ukrepanje
Dejanje ni potrebno za nobeno ogrodje .NET Framework ali . aplikacija, ki temelji na netu. Vaša aplikacija bo samodejno izkoristila vse varnostne izboljšave, ki veljajo za vaše okolje. Večina aplikacij ne bo opazovala nobenih vedenjskih sprememb.
V nadaljevanju tega članka je opisano, kako ugotovite, ali lahko te varnostne izboljšave vplivajo na delovanje izvajalnika vaše aplikacije. V tem članku so navedeni tudi koraki za prilagajanje delovanja izvajalnika, če želite
Veljavna programska oprema
Ta članek velja za to programsko opremo:
-
.NET 8 in novejše različice
-
ogrodje .NET Framework, vse različice varnostnih posodobitev in poznejših posodobitev iz julija 2024
Le če se izvajajo v teh različicah storitve Windows Update:
-
Windows 10, različica 22H2, KB5052077 nameščena
-
Windows Server 2019, KB5053594 nameščena aplikacija
-
Windows Server 2016, KB5053594 nameščena aplikacija
Ta članek ne velja za naprave ogrodje .NET Framework .NET, ki se izvajajo v Windows 11, Windows Server 2022 ali novejši različici.
Ta članek ne velja za .NET, če se izvaja v platformah, ki niso windows.
Podroben opis in izjava o vplivu
Od KB-jev posodobitev sistema Windows, omenjenih zgoraj, je Microsoft za podporo api-ja Win32 GetTempPath2 spremenil v starejše različice sistema Windows na trgu, ki delujejo kot varnejša zamenjava za starejši API Za Win32 GetTempPath . Funkciji ogrodje .NET Framework in .NET se interno zanašajo na te API-je Win32, da zagotovita izvajanje metode System.IO.Path.GetTempPath() : api Win32 GetTempPath2 je prednost, če obstaja; API Win32 GetTempPath pa se uporablja kot nadomestna rešitev, če GetTempPath2 ne obstaja.
Ker so s temi KB-ji na voljo GetTempPath2 Win32 GetTempPath2 API na veljavnih platformah, bosta ogrodje .NET Framework in .NET začela uporabljati GetTempPath2, ko namestita KB-je.
Primarna sprememba vedenja je v tem, da klicatelji, ki se izvajajo kot identiteta SYSTEM, privzeto opazujejo način vračila metode System.IO.Path.GetTempPath()%WINDIR%\SystemTemp , medtem ko klicatelji, ki se izvajajo kot karkoli drugega kot identiteta SYSTEM, opazujejo metodo, ki še naprej vrača svojo obstoječo vrednost.
Če vaša aplikacija izpolnjuje vse spodnje pogoje, bo ta sprememba morda vplivala na vas:
-
Vaša aplikacija uporablja izvajalnik in platformo operacijskega sistema, navedeno pod prejšnjim naslovom »Veljavna programska oprema«. in
-
Vaša aplikacija se izvaja kot identiteta SYSTEM; in
-
Ročno nastavite spremenljivko %TMP% ali %TEMP% okolja, da preusmerite standardno začasno mesto datoteke. (Glejte razdelek Opombe v dokumentaciji GetTempPath WIN32.)
Če izpolnjujete vse te pogoje, lahko po namestitvi zbirke podatkov Windows spremljate, kako aplikacija piše v začasni imenik, ki ni imenik, ki ste ga nameravali.
Ta vedenjska sprememba je lahko vidna s poljubno ogrodje .NET Framework ali . NET-provided API, ki sčasoma temelji na GetTempPath2. Najpogostejše vstopne točke so:
To ni izčrpen seznam metod, katerih delovanje se lahko spremeni, ko so posodobitve nameščene.
Določanje, ali se aplikacija izvaja pod identiteto SISTEMA
Obstaja več različnih mehanizmov za ugotavljanje identitete aplikacije ogrodje .NET Framework .NET.
Spletne aplikacije, ki temeljijo na IIS
IIS se na identiteto SISTEMA sklicuje kot »LOCALSYSTEM«. V upravitelju IIS (inetmgr.exe) pojdite na zavihek Skupine aplikacij, da si ogledate vse skupine aplikacij in njihove povezane identitete. V spustnem meniju Združi po lahko izberete tudi »Identiteta«, da si olajšate ogled skupin aplikacij, ki se izvajajo kot identiteta localsystem.
Na spodnjem posnetku zaslona je prikazan primer skupine aplikacij (»MyAppPool«), ki je konfigurirana tako, da se izvaja kot LOCALSYSTEM. Vsi programi, ki se izvajajo v tej skupini aplikacij, se bodo izvajali kot identiteta SISTEMA.
Do teh informacij lahko dostopate tudi programsko v skrbniški seji PowerShell tako, da uporabite spodnji skript.
Import-Module IISAdministration Get-IISAppPool | where {$_.ProcessModel.IdentityType -eq "LocalSystem"}
V računalniku, ki je konfiguriran s skupino aplikacij »MyAppPool« na ravni SYSTEM, kot je prikazano na posnetku zaslona zgoraj, ta skript ogrodja PowerShell natisne to, kar prikazuje, da se pod identiteto SISTEMA izvaja »MyAppPool«.
Name Status CLR Ver Pipeline Mode Start Mode ---- ------ ------- ------------- ---------- MyAppPool Started v4.0 Integrated OnDemand
Storitve sistema Windows
Če je ogrodje .NET Framework ali . Aplikacija, ki temelji na net, je registrirana kot storitev Windows, zato lahko upravitelja storitev uporabite za ogled povezane identitete.
V ukaznem pozivu na skrbniški ravni zaženite services.msc. Prikaže uporabniški vmesnik upravitelja storitev.
Če je v stolpcu Prijava kot navedeno »Lokalni sistem« za identiteto storitve, se storitev izvaja pod identiteto SYSTEM.
Te podatke lahko poiščete tudi prek tehnologije PowerShell z ukazom »cmdlet« Get-Service ukazom »cmdlet«. Če želite na primer s poizvedbo po teh informacijah poiskati storitev z MyService, uporabite ta ukaz.
(Get-Service MyService).UserName -ieq "LocalSystem"
Če je storitev registrirana za izvajanje pod identiteto SYSTEM, bo s tem v konzoli natisnjena vrednost True.
Drugi mehanizmi
Orodja, kot je Upravitelj opravil (taskmgr.exe) ali Sysinternals Process Explorer , vam lahko pove tudi, ali se aplikacija izvaja pod identiteto SISTEMA.
V upravitelju opravil uporabite pogled Podrobnosti, da prikažete seznam vseh procesov, ki se izvajajo v sistemu, nato pa poiščite postopek zanimanja in si oglejte vnos pod stolpcem Uporabniško ime.
Če se vrednost » Uporabniško ime« glasi »SYSTEM«, se postopek izvaja pod identiteto SISTEMA.
Ali pa v Raziskovalcu procesov Sysinternals poiščite postopek zanimanja in vnesite pogled Lastnosti, nato pa si oglejte polje Uporabnik na zavihku Slika.
Če vrednost uporabnika prebere »NT AUTHORITY\SYSTEM«, se postopek izvaja pod identiteto SISTEMA.
Changing the temp path for SYSTEM-level processes
Spodnji skript ogrodja PowerShell prikazuje, kako ustvarite nov imenik in omejite dostop C:\NewSystemTemp\ imenika le na procese, ki se izvajajo pod identiteto SISTEMA. Ne poskušajte spremeniti ALS-jev imenika, ki je že izpolnjen z datotekami.
Ta skript morate zagnati v skrbniški seji 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
To, ali je bila ta operacija uspešna, lahko potrdite tako, da zaženete ukaz
icacls C:\NewSystemTemp\
Ki bo vrnil naslednje rezultate, ki prikazujejo uspeh:
C:\NewSystemTemp\ NT AUTHORITY\SYSTEM:(OI)(CI)(F) BUILTIN\Administrators:(OI)(CI)(F) Successfully processed 1 files; Failed processing 0 files
Ko je imenik ustvarjen, nastavite spremenljivko %SYSTEMTEMP% okolje z obsegom na sistemski ravni. To lahko nastavite v uporabniškem vmesniku nadzorna plošča sistem, lahko pa ga nastavite tudi programsko prek modula PowerShell:
[Environment]::SetEnvironmentVariable("SYSTEMTEMP", "C:\NewSystemTemp", [EnvironmentVariableTarget]::Machine)
Nato znova zaženite računalnik.
Če spremenite %SYSTEMTEMP% spremenljivko okolja, se ne bo spremenila vrnjena vrednost System.IO.Path.GetTempPath() za aplikacije ogrodje .NET Framework in .NET, ki se izvajajo kot identiteta, ki ni SYSTEM. Te aplikacije bodo še naprej sledile enaki logiki reševanja, kot jih imajo vedno, vključno s %TMP% ali %TEMP% spremenljivkami okolja, če so prisotne.
Podobno nastavitev spremenljivke okolja %TMP% ali %TEMP% ne bo spremenila vrnjene vrednosti System.IO.Path.GetTempPath() za aplikacije ogrodje .NET Framework in .NET, ki se izvajajo kot identiteta SYSTEM.
Za dodatne informacije
Če želite več informacij ogrodje .NET Framework o delovanju ogrodja .NET, glejte dokumentacijo .NET na spletnem mestu Path.GetTempPath.
Če želite več informacij o osnovnem delovanju operacijskega sistema Windows, glejte dokumentacijo sistema Windows v API-jih Win32 GetTempPath2.