Dátum vydania:25. februára 2025

Verzia:.NET 8 a novšia.NET Framework, všetky verzie

Súhrn

Spoločnosť Microsoft zaviedla vylepšenia zabezpečenia v najnovších verziách Windowsu. Tieto vylepšenia zabezpečenia upravujú spracovanie dočasnej cesty a môžu spôsobiť, že určité .NET Framework a rozhrania .NET API, ako sú napríkladSystem.IO.Path.GetTempPath(), vrátia po použití opravy iné umiestnenie.

Vyžaduje sa akcia

Nevyžaduje sa žiadna akcia žiadnej .NET Framework alebo . Aplikácia založená na sieti NET. Vaša aplikácia bude automaticky ťažiť z akýchkoľvek vylepšení zabezpečenia, ktoré sa vzťahujú na vaše prostredie. Väčšina aplikácií nebude pozorovať žiadne zmeny správania. 

Zvyšok tohto článku obsahuje podrobnosti o tom, ako zistiť, či tieto vylepšenia zabezpečenia môžu mať vplyv na správanie aplikácie v režime runtime. Tento článok obsahuje aj kroky na prispôsobenie správania režimu runtime v prípade potreby

Použiteľný softvér

Tento článok sa vzťahuje na nasledujúci softvér: 

Iba v prípade spustenia v nasledujúcich verziách aktualizácií Windowsu: 

  • Windows 10, verzia 22H2 pri inštalácii KB5052077

  • Windows Server 2019, keď je nainštalovaný KB5053594 

  • Windows Server 2016, keď je nainštalovaná KB5053594 

Tento článok sa nevzťahuje na .NET Framework alebo .NET spustené v Windows 11, Windows Server 2022 alebo novšej verzii. 

Tento článok sa nevzťahuje na rozhranie .NET pri spúšťaní na platformách iných ako Windows. 

Podrobný popis a vyhlásenie o vplyve

Od aktualizácie WindowsU, ktoré sú uvedené vyššie, spoločnosť Microsoft spätne portovala rozhranie API Win32 GetTempPath2 na staršie verzie Windowsu na trhu, aby fungovala ako bezpečnejšia náhrada za staršie rozhranie API Win32 GetTempPath . Interne .NET Framework a .NET používajú tieto rozhrania API win32 na poskytovanie implementácie metódy System.IO.Path.GetTempPath() : rozhranie Win32 GetTempPath2 API sa uprednostňuje, ak existuje, a rozhranie Win32 GetTempPath API sa používa ako záloha, ak getTempPath2 neexistuje. 

Keďže tieto kľúčové ukazovatele výkonu sprístupňujú nové rozhranie Win32 GetTempPath2 API na príslušných platformách, .NET Framework a .NET začnú používať GetTempPath2 po inštalácii KBS. 

Primárna zmena správania spočíva v tom, že volajúci, ktorí sú spustené ako systémová identita, budú v predvolenom nastavení dodržiavať System.IO.Path.GetTempPath() metódu vrátenia %WINDIR%\SystemTemp , zatiaľ čo volajúci, ktorí sú spustené ako čokoľvek iné ako identita SYSTEM, budú dodržiavať metódu aj naďalej vracať svoju existujúcu hodnotu. 

Ak vaša aplikácia spĺňa všetky nižšie uvedené kritériá, táto zmena vás môže ovplyvniť: 

  • Vaša aplikácia využíva platformu runtime a platformu operačného systému uvedenú pod predchádzajúcim nadpisom "Príslušný softvér". a

  • Vaša aplikácia funguje ako IDENTITA SYSTÉMU. a

  • Premennú prostredia %TMP% alebo %TEMP% nastavte manuálne na presmerovanie štandardného dočasného umiestnenia súboru. (Pozrite si časť Poznámky v dokumentácii k rozhraniu API win32 GetTempPath .)

Ak spĺňate všetky tieto kritériá, potom po inštalácii Windows KBs, môžete dodržať vaše aplikácie písanie do dočasného adresára iný ako adresár, ktorý ste zamýšľali. 

Táto zmena správania môže byť viditeľná prostredníctvom ľubovoľného .NET Framework alebo . Rozhranie API poskytované sieťou NET, ktoré sa nakoniec spolieha na GetTempPath2. Najbežnejšími vstupnými bodmi sú: 

Toto nie je určený na úplný zoznam metód, ktorých správanie sa môže zmeniť po inštalácii KBs. 

Určenie, či sa aplikácia spúšťa pod identitou SYSTEM 

Existuje niekoľko rôznych mechanizmov na určenie identity aplikácie .NET Framework alebo .NET

Webové aplikácie založené na aplikácii IIS 

IiS odkazuje na IDENTITU SYSTÉMU ako "LOCALSYSTEM". V správcovi služby IIS (inetmgr.exe) prejdite na kartu Fondy aplikácií a zobrazte všetky fondy aplikácií a ich súvisiace identity. Môžete tiež vybrať položku Identita v rozbaľovacom zozname skupiny , aby sa jednoduchšie zobrazovali fondy aplikácií, ktoré sú spustené ako identita LOCALSYSTEM. 

Snímka obrazovky nižšie znázorňuje príklad fondu aplikácií (MyAppPool), ktorý je nakonfigurovaný na spustenie ako LOCALSYSTEM. Všetky aplikácie spustené v rámci tohto fondu aplikácií sa spustia ako systémová identita. 

Snímka obrazovky znázorňuje príklad fondu aplikácií (MyAppPool), ktorý je nakonfigurovaný na spustenie ako LOCALSYSTEM. Všetky aplikácie spustené v rámci tohto fondu aplikácií sa spustia ako systémová identita.

Prístup k týmto informáciám môžete získať aj pomocou programovania z relácie prostredia PowerShell bez oprávnení pomocou skriptu uvedeného nižšie. 

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

V počítači nakonfigurovanom s fondom aplikácií MyAppPool na úrovni SYSTEM, ako je to znázornené na snímke obrazovky vyššie, tento skript prostredia PowerShell vytlačí nasledujúce údaje, ktoré ukazujú, že aplikácia MyAppPool je spustená pod identitou SYSTEM. 

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

Služby systému Windows 

Ak .NET Framework alebo . Aplikácia založená na sieti NET je registrovaná ako služba systému Windows. Na zobrazenie súvisiacej identity môžete použiť správcu služieb. 

V príkazovom riadku bez oprávnení spustite services.msc. Zobrazí sa používateľské rozhranie správcu služieb. 

V príkazovom riadku bez oprávnení spustite súbor services.msc. Zobrazí sa používateľské rozhranie správcu služieb.

Ak stĺpec Prihlásiť sa ako uvádza "Lokálny systém" pre identitu služby, služba je spustená pod identitou SYSTEM. 

Tieto údaje môžete dotazovať aj prostredníctvom prostredia PowerShell pomocou rutiny typu cmdlet Get-Service . Ak chcete napríklad dotazovať tieto informácie pre službu s názvom MyService, použite nasledujúci príkaz. 

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

Ak je služba registrovaná na spustenie pod identitou SYSTEM, do konzoly sa vytlačí hodnota True. 

Iné mechanizmy 

Nástroje ako Správca úloh (taskmgr.exe) alebo Sysinternals Process Explorer vám tiež môžu oznámiť, či je aplikácia spustená pod identitou SYSTEM. 

V Správcovi úloh použite zobrazenie Podrobnosti na uvedenie všetkých spustených procesov v systéme, vyhľadajte proces záujmu a pozrite sa na položku v stĺpci Meno používateľa

V Správcovi úloh použite zobrazenie Podrobnosti na uvedenie všetkých spustených procesov v systéme, vyhľadajte proces záujmu a pozrite sa na položku v stĺpci Meno používateľa.

Ak hodnota mena používateľa znie "SYSTEM", proces je spustený pod identitou SYSTEM. 

Alebo v prieskumníkovi procesov Sysinternals vyhľadajte požadovaný proces a zadajte zobrazenie Vlastnosti a potom sa pozrite na pole Používateľ pod kartou Obrázok

v prieskumníkovi procesov Sysinternals vyhľadajte požadovaný proces a zadajte zobrazenie Vlastnosti a potom sa pozrite na pole Používateľ na karte Obrázok.

Ak hodnota používateľa znie "NT AUTHORITY\SYSTEM", proces je spustený pod identitou SYSTEM. 

Zmena dočasnej cesty pre procesy na úrovni SYSTÉMU 

Nižšie uvedený skript prostredia PowerShell ukazuje, ako vytvoriť nový adresárový C:\NewSystemTemp\ a obmedziť prístup k adresáru len na procesy spustené pod identitou SYSTEM. Nepokúšajte sa zmeniť zoznamy ACL adresára, ktorý je už vyplnený súbormi. 

Tento skript musí byť spustený z relácie prostredia PowerShell bez oprávnení. 

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 

Spustením príkazu môžete potvrdiť, že táto operácia bola úspešná. 

icacls C:\NewSystemTemp\ 

Výsledkom bude nasledujúci výstup zobrazujúci úspech: 

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

Po vytvorení adresára nastavte premennú prostredia %SYSTEMTEMP% s rozsahom na úrovni systému. Môžete to nastaviť prostredníctvom používateľského rozhrania system ovládací panel alebo ho môžete nastaviť pomocou programovania prostredníctvom prostredia PowerShell: 

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

Potom reštartujte počítač. 

Zmenou premennej prostredia %SYSTEMTEMP%sa nezmení vrátená hodnota System.IO.Path.GetTempPath() pre aplikácie .NET Framework a .NET, ktoré sú spustené ako iná identita ako system. Tieto aplikácie budú aj naďalej používať rovnakú logiku rozlíšenia, ako majú vždy, vrátane dodržiavania %TMP% alebo %TEMP% premenných prostredia, ak sú prítomné. 

Podobne nastavenie premennej prostredia %TMP% alebo %TEMP% nezmení vrátenú hodnotu System.IO.Path.GetTempPath() pre aplikácie .NET Framework a .NET, ktoré sú spustené ako identita SYSTEM. 

Ďalšie informácie

Ďalšie informácie o správaní .NET Framework a .NET nájdete v dokumentácii platformy .NET na lokalite Path.GetTempPath

Ďalšie informácie o základnom správaní operačného systému Windows nájdete v dokumentácii k Windowsu o rozhraní API Win32 GetTempPath2.

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.