Leidimo data:2025 m. vasario 25 d.

Versija:.NET 8 ir naujesnėversija.NET Framework, visos versijos

Suvestinė

"Microsoft" pateikė naujausių "Windows" versijų saugos patobulinimus. Šie saugos patobulinimai modifikuoja laikiną kelio tvarkymą ir gali sukelti tam tikrų .NET Framework ir .NET API, pvz.,System.IO.Path.GetTempPath(), pritaikius pataisą pateikti kitą vietą.

Reikia atlikti veiksmą

Jokių .NET Framework arba . NET pagrįsta programa. Jūsų programai automatiškai bus naudingi visi jūsų aplinkai taikomi saugos patobulinimai. Dauguma programų nepaisys jokio elgesio pokyčių. 

Likusi šiame straipsnyje išsamiai aprašoma, kaip nustatyti, ar šie saugos patobulinimai gali turėti įtakos jūsų programos vykdyklės veikimui. Šiame straipsnyje taip pat išvardyti veiksmai, kaip tinkinti vykdyklės veikimą, jei norima

Taikoma programinė įranga

Šis straipsnis taikomas šiai programinei įrangai: 

Tik naudojant šias "Windows Update" versijas: 

  • Windows 10, 22H2 versija, kai įdiegta KB5052077

  • 2019 Windows Server. įdiegus KB5053594 

  • 2016 Windows Server. įdiegus KB5053594 

Šis straipsnis netaikomas ".NET Framework" arba ".NET", veikiančiai "Windows 11", "Windows Server 2022" arba naujesnėse versijose. 

Šis straipsnis netaikomas .NET, kai veikia ne "Windows" platformose. 

Išsamus aprašas ir poveikio pareiškimas

Kaip ir anksčiau minėti "Windows" naujinimo KB, "Microsoft" sukūrė "Win32 GetTempPath2 " API į senesnes "Windows" versijas rinkoje, kad veiktų kaip saugesnis senesnės Win32 GetTempPath API pakeitimas. Viduje .NET Framework ir .NET remiasi šiomis "Win32" API, kad pateiktų System.IO.Path.GetTempPath() metodo įgyvendinimą: "Win32" GetTempPath2 API yra pageidaujama, jei ji yra; "Win32" GetTempPath API naudojama kaip atsarginė priemonė, jei GetTempPath2 nėra. 

Šie KB padaro naująją "Win32" GetTempPath2 API pasiekiamą atitinkamose platformose, todėl įdiegus KB, .NET Framework ir .NET pradės naudoti GetTempPath2. 

Pirminis veikimo pakeitimas yra tas, kad skambinantieji, kurie veikia kaip SISTEMOS tapatybė, laikysis System.IO.Path.GetTempPath() metodas pagal numatytuosius nustatymus grąžina %WINDIR%\SystemTemp , o skambintojai, kurie veikia kaip kas nors kitas, o ne SYSTEM tapatybė, stebės metodą ir toliau pateiks savo esamą reikšmę. 

Jei jūsų programa atitinka visus toliau nurodytus kriterijus, jums gali turėti įtakos šis pakeitimas: 

  • Jūsų programa naudoja vykdyklę ir OS platformą, pateiktą ankstesnėje antraštėje "Taikoma programinė įranga"; ir

  • Jūsų programa veikia kaip SISTEMOS tapatybė; ir

  • Galite rankiniu būdu nustatyti %TMP% arba %TEMP% aplinkos kintamąjį peradresuoti standartinę laikiną failo vietą. (Žr. Win32 GetTempPath API dokumentacijos skyrių Pastabos .)

Jei atitinkate visus šiuos kriterijus, įdiegę "Windows" mbus, galite stebėti, kaip programa rašoma į laikinąjį katalogą, o ne į jūsų norimą katalogą. 

Šis veikimo pakeitimas gali būti matomas per bet kurią .NET Framework arba . NET pateikta API, kuri galiausiai priklauso nuo GetTempPath2. Dažniausiai pasitaikantys įėjimo taškai yra: 

Tai nėra išsamus metodų, kurių veikimas gali pasikeisti įdiegus MB, sąrašas. 

Nustatymas, ar programa veikia pagal SISTEMOS tapatybę 

Yra keli skirtingi mechanizmai, skirti nustatyti .NET Framework arba .NET programos tapatybę

IIS pagrįstos žiniatinklio programos 

IIS sistemos tapatybę nurodo kaip "LOCALSYSTEM". IIS tvarkytuve (inetmgr.exe) eikite į skirtuką Programų telkiniai, kad pamatytumėte visus programų telkinius ir jų susijusias tapatybes. Taip pat išplečiamajame sąraše Grupuoti galite pasirinkti "Tapatybė", kad būtų lengviau matyti programų telkinius, kurie veikia kaip LOCALSYSTEM tapatybė. 

Toliau pateiktoje ekrano nuotraukoje rodomas programų telkinio ("MyAppPool"), kuris sukonfigūruotas veikti kaip LOCALSYSTEM, pavyzdys. Visos taikomosios programos, veikiančios šiame taikomųjų programų telkinį, veiks kaip SISTEMOS tapatybė. 

Ekrano kopijoje rodomas programų telkinio ("MyAppPool"), kuris sukonfigūruotas veikti kaip LOCALSYSTEM, pavyzdys. Visos taikomosios programos, veikiančios šiame taikomųjų programų telkinį, veiks kaip SISTEMOS tapatybė.

Šią informaciją taip pat galite pasiekti programiškai didesnių teisių "PowerShell" seanse naudodami toliau pateiktą scenarijų. 

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

Kompiuteryje, konfigūruotame naudojant SISTEMOS lygio "MyAppPool" programų telkinį, kaip parodyta aukščiau pateiktoje ekrano kopijoje, šis "PowerShell" scenarijus spausdina toliau pateiktą informaciją, rodančią, kad "MyAppPool" veikia po SISTEMOS tapatybe. 

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

"Windows" tarnybos 

Jei jūsų .NET Framework arba . NET pagrįsta taikomoji programa yra registruota kaip "Windows" tarnyba, galite naudoti Paslaugų tvarkytuvą, kad peržiūrėtumėte susietą tapatybę. 

Didesnių teisių komandinėje eilutėje vykdykite services.msc. Bus rodoma tarnybų tvarkytuvo vartotojo sąsaja. 

Didesnių teisių komandinėje eilutėje paleiskite services.msc. Bus rodoma tarnybų tvarkytuvo vartotojo sąsaja.

Jei stulpelyje Prisijungti kaip pateikiamas tarnybos tapatybės "Vietinė sistema", tada tarnyba veikia po SISTEMOS tapatybe. 

Taip pat galite pateikti šių duomenų užklausą naudodami "PowerShell" naudodami Get-Service "cmdlet". Pavyzdžiui, norėdami pateikti šios paslaugos, pavadintos MyService, informacijos užklausą, naudokite šią komandą. 

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

Jei tarnyba užregistruota veikti pagal SISTEMOS tapatybę, konsolėje bus išspausdinta True. 

Kiti mechanizmai 

Įrankiai, pvz., Užduočių tvarkytuvas (taskmgr.exe) arba "Sysinternals Process Explorer" , taip pat gali nurodyti, ar programa veikia po SISTEMOS tapatybe. 

Užduočių tvarkytuve naudokite rodinį Išsami informacija, kad nurodytumėte visus sistemoje vykdomus procesus, tada raskite norimą procesą ir peržiūrėkite įrašą stulpelyje Vartotojo vardas

Užduočių tvarkytuve naudokite rodinį Išsami informacija, kad nurodytumėte visus sistemoje vykdomus procesus, tada raskite norimą procesą ir peržiūrėkite įrašą stulpelyje Vartotojo vardas.

Jei vartotojo vardo reikšmė perskaito "SYSTEM", procesas vykdomas pagal SISTEMOS tapatybę. 

Arba "Sysinternals Process Explorer" raskite dominantį procesą ir įveskite rodinį Ypatybės , tada pažiūrėkite į lauką Vartotojas skirtuke Vaizdas

"Sysinternals Process Explorer" raskite dominantį procesą ir įveskite rodinį Ypatybės, tada pažiūrėkite į lauką Vartotojas skirtuke Vaizdas.

Jei vartotojo reikšmė perskaito "NT AUTHORITY\SYSTEM", procesas vykdomas pagal SISTEMOS tapatybę. 

Temp kelio keitimas SYSTEM lygio procesams 

Toliau pateiktame "PowerShell" scenarijuje parodyta, kaip sukurti naują katalogo C:\NewSystemTemp\ ir apriboti prieigą prie katalogų tik pagal SISTEMOS tapatybę vykdomiems procesams. Nebandykite keisti katalogo, kuris jau užpildytas failais, ACL. 

Šis scenarijus turi būti vykdomas didesnių teisių "PowerShell" seanse. 

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 

Galite patvirtinti, kad ši operacija buvo sėkminga paleidžiant komandą 

icacls C:\NewSystemTemp\ 

Kuri sukurs šią išvestį, rodančią sėkmingą sėkmę: 

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

Sukūrę katalogą, nustatykite %SYSTEMTEMP% aplinkos kintamąjį su sistemos lygio aprėptimi. Tai galite nustatyti sistemos valdymo skydas vartotojo sąsajoje arba galite ją programiškai nustatyti naudodami "PowerShell": 

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

Tada paleiskite kompiuterį iš naujo. 

Pakeitus %SYSTEMTEMP% aplinkos kintamąjį, .NET Framework ir .NET programų, veikiančių kaip ne SYSTEM, grąžinama System.IO.Path.GetTempPath() reikšmė nepasikeis. Šios programos ir toliau naudos tokią pačią sprendimo logiką, kaip visada, įskaitant %TMP% arba %TEMP% aplinkos kintamųjų, jei jų yra, pagyrimą. 

Taip pat nustačius %TMP% arba %TEMP% aplinkos kintamąjį, .NET Framework ir .NET programų, veikiančių kaip SYSTEM tapatybė, grąžinama System.IO.Path.GetTempPath() reikšmė nepasikeis. 

Daugiau informacijos

Daugiau informacijos apie .NET Framework ir .NET veikimą žr. .NET dokumentacijoje, kurią rasite Path.GetTempPath

Daugiau informacijos apie esamą "Windows" OS veikimą žr. "Windows" dokumentacijoje, skirtoje "Win32 GetTempPath2" API.

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.