Piezīme
- Izlaides datums:
2025. gada 25. februāris - Versija:
.NET 8 un jaunāka versija
.NET Framework, visas versijas
Kopsavilkums
Korporācija Microsoft ir ieviesusi drošības uzlabojumus jaunākajās Windows versijās. Šie drošības uzlabojumi modificē pagaidu ceļu apstrādi un var izraisīt to, ka daži .NET Framework un .NET API pēc ielāpa lietošanas vēlas System.IO.Path.GetTempPath()atgriezt citu atrašanās vietu.
Nepieciešama darbība
Nevienam .NET Framework vai . NET balstīta lietojumprogramma. Jūsu lietojumprogrammai automātiski tiks piemēroti drošības uzlabojumi, kas attiecas uz jūsu vidi. Lielākā daļa lietojumprogrammu nenovēros nekādas uzvedības izmaiņas.
Šā raksta atlikušajā daļā ir detalizēti aprakstīts, kā noteikt, vai šie drošības uzlabojumi var ietekmēt programmas izpildlaika darbību. Šajā rakstā ir uzskaitītas arī darbības, kā pielāgot izpildlaika uzvedību, ja tāda ir nepieciešama
piemērojamā programmatūra
Šis raksts attiecas uz šādu programmatūru:
- .NET 8 un jaunāka versija
- .NET Framework, visas versijas, sākot ar 2024. gada jūlija drošības atjauninājumiem un turpmākajiem atjauninājumiem
Tikai tad, ja izmantojat tālāk norādītās Windows Update versijas.
- Windows 10, versija 22H2, kad KB5052077 ir instalēts
- Windows Server 2019, kad KB5053594 ir instalēts
- Windows Server 2016, kad KB5053594 ir instalēts
Šis raksts neattiecas uz ..NET Framework vai .NET, kas darbojas operētājsistēmā Windows 11, Windows Server 2022 vai jaunākās versijās.
Šis raksts neattiecas uz .NET, kas darbojas sistēmā bez Windows.
Detalizēts apraksts un paziņojums par ietekmi
Sākot ar iepriekš minētajiem Windows atjauninājumu KB, Microsoft ir dublējusi Win32 GetTempPath2 API uz vecākām Windows tirgus versijām, lai darbotos kā drošāks vecākā Win32 GetTempPath API aizstājējs. Iekšēji ..NET Framework un .NET paļaujas uz šiem Win32 API, lai nodrošinātu metodes ieviešanuSystem.IO.Path.GetTempPath(): Win32 GetTempPath2 API tiek dota priekšroka, ja tāda pastāv; Win32 GetTempPath API tiek izmantota kā atkāpšanās, ja GetTempPath2 nepastāv.
Tā kā šie KB padara jauno Win32GetTempPath2API pieejamu piemērojamajās platformās, .NET Framework un .NET sāks izmantot GetTempPath2 pēc KB instalēšanas.
Primārās uzvedības izmaiņas ir tādas, ka zvanītāji, kas darbojas kā SYSTEM identitāte, ievēros System.IO.Path.GetTempPath() metodes atgriešanu %WINDIR%\SystemTemp pēc noklusējuma, bet zvanītāji, kuri darbojas kā kaut kas cits, nevis SYSTEM identitāte, novēros metodi un turpina atgriezt tās esošo vērtību.
Ja jūsu lietojumprogramma atbilst visiem tālāk norādītajiem kritērijiem, šīs izmaiņas var jūs ietekmēt:
- jūsu lietojumprogramma izmanto izpildlaika un OS platformu, kas norādīta iepriekšējā sadaļā "Piemērojamā programmatūra"; un
- Jūsu lietojumprogramma darbojas kā SISTĒMAS identitāte; un
- Vides mainīgais or
%TEMP%manuāli%TMP%tiek iestatīts, lai novirzītu standarta pagaidu faila atrašanās vietu. (Skatiet Win32GetTempPathpiezīmju sadaļu API dokumentācija.)
Ja atbilstat visiem šiem kritērijiem, pēc Windows KB instalēšanas varat novērot, kā lietojumprogramma raksta pagaidu direktorijā, kas nav jūsu iecerētais.
Šīs uzvedības izmaiņas var būt redzamas, izmantojot jebkuru .NET Framework vai . NETO nodrošināts API, kas galu galā paļaujas uz GetTempPath2. Visbiežāk sastopamie ieejas punkti ir:
- System.IO.Path.GetTempPath
- System.IO.Path.GetTempFileName
- System.IO.Directory.CreateTempSubdirectory
Šis saraksts nav izmantojamas kā izsmeļošs to metožu saraksts, kuru darbība var mainīties pēc KB instalēšanas.
Noteikšana, vai lietojumprogramma darbojas ar SYSTEM identitāti
Pastāv vairāki atšķirīgi mehānismi, ar kuriem var noteikt .NET Framework vai .NET lietojumprogrammas identitāti
IIS tīmekļa lietojumprogrammas
IIS atsaucas uz SYSTEM identitāti kā "LOCALSYSTEM". IIS pārvaldniekā (inetmgr.exe) dodieties uz cilni Programmu pūli, lai skatītu visus programmu pūlus un ar tiem saistītās identitātes. Varat arī atlasīt "Identitāte" nolaižamajā izvēlnē Grupēt pēc, lai būtu vienkāršāk skatīt programmu pūlus, kuri darbojas kā LOCALSYSTEM identitāte.
Tālāk redzamajā ekrānuzņēmumā ir parādīts lietojumprogrammu pūla ("MyAppPool") piemērs, kas ir konfigurēts palaišanai kā LOCALSYSTEM. Visas programmas, kas darbojas šajā programmu pūlā, darbosies kā SISTĒMAS identitāte.
Šai informācijai varat piekļūt arī programmiski no privileģētās PowerShell sesijas, izmantojot tālāk norādīto skriptu.
Import-Module IISAdministration
Get-IISAppPool | where {$_.ProcessModel.IdentityType -eq "LocalSystem"}
Datorā, kas konfigurēts ar sistēmas līmeņa "MyAppPool" programmu pūlu, kā parādīts iepriekš redzamajā ekrānuzņēmumā, šis PowerShell skripts izdrukā tālāk redzamo tekstu, parādot, ka "MyAppPool" darbojas ar SYSTEM identitāti.
Name Status CLR Ver Pipeline Mode Start Mode
---- ------ ------- ------------- ----------
MyAppPool Started v4.0 Integrated OnDemand
Windows pakalpojumi
Ja jūsu .NET Framework vai . NENET lietojumprogramma ir reģistrēta kā Windows pakalpojums, varat izmantot pakalpojumu pārvaldnieku, lai skatītu tās saistīto identitāti.
Privileģētajā komandu uzvednē izpildiet services.msc. Tiek parādīts pakalpojumu pārvaldnieka lietotāja interfeiss.
Ja kolonnā Pieteikties kā pakalpojuma identitātei ir norādīts "Lokālā sistēma", pakalpojums darbojas ar SISTĒMAS identitāti.
Vaicājumu šiem datiem varat arī izveidot, izmantojot PowerShell, Get-Service izmantojot cmdlet. Piemēram, lai vaicātu šo informāciju pakalpojumam ar nosaukumu MyService, izmantojiet tālāk norādīto komandu.
(Get-Service MyService).UserName -ieq "LocalSystem"
Ja pakalpojums ir reģistrēts darbināšanai ar funkciju SYSTEM identity, konsolē tiks izdrukāta vērtība True.
Citi mehānismi
Tādi rīki kā uzdevumu pārvaldnieks (taskmgr.exe) vai Sysinternals Process Explorer var arī noteikt, vai lietojumprogramma darbojas ar SYSTEM identitāti.
Uzdevumu pārvaldniekā izmantojiet detalizēto skatu, lai uzskaitītu visus sistēmā darbojošos procesus, pēc tam atrodiet vajadzīgo procesu un apskatiet ierakstu kolonnā Lietotājvārds .
Ja lietotājvārda vērtība ir "SYSTEM", process tiek izpildīts ar SYSTEM identitāti.
Vai arī Sysinternals Process Explorer atrodiet interesējošo procesu un dodieties uz rekvizītu skatu, pēc tam apskatiet lietotāja lauku zem cilnes Attēls.
Ja lietotāja vērtība ir "NT AUTHORITY\SYSTEM", process darbojas ar SISTĒMAS identitāti.
Sistēmas līmeņa procesu pagaidu ceļa maiņa
PowerShell skripts zemāk parāda, kā izveidot jaunu direktoriju C:\NewSystemTemp\ un ierobežot direktorija piekļuvi tikai procesiem, kas darbojas ar SYSTEM identitāti. Nemēģiniet mainīt ACL direktorijā, kurā jau ir ievietoti faili.
Šis skripts ir jāpalaiž privileģētajā PowerShell sesijā.
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
Jūs varat apstiprināt, ka šī darbība bijusi veiksmīga, izpildot komandu
icacls C:\NewSystemTemp\
Tas radīs šādu rezultātu, kas uzrāda panākumus:
C:\NewSystemTemp\ NT AUTHORITY\SYSTEM:(OI)(CI)(F)
BUILTIN\Administrators:(OI)(CI)(F)
Successfully processed 1 files; Failed processing 0 files
Kad direktorijs ir izveidots, iestatiet %SYSTEMTEMP% vides mainīgo ar sistēmas līmeņa tvērumu. To var iestatīt, izmantojot sistēmas vadības paneļa lietotāja interfeisu, vai arī varat to iestatīt programmiski, izmantojot PowerShell:
[Environment]::SetEnvironmentVariable("SYSTEMTEMP", "C:\NewSystemTemp", [EnvironmentVariableTarget]::Machine)
Pēc tam restartējiet mašīnu.
Mainot vides mainīgo, %SYSTEMTEMP%..NET Framework un .NET programmām, kuras darbojas kā identitāte, kas nav SYSTEM, atgrieztā vērtība System.IO.Path.GetTempPath() netiks mainīta. Šīs programmas turpinās ievērot to pašu izšķirtspējas loģiku, kas tām vienmēr ir, tostarp vides mainīgo vai %TMP%%TEMP% ievērošanu, ja tādi ir.
Līdzīgi, iestatot %TMP% vides mainīgo or%TEMP%, netiks mainīta atgrieztā vērtība System.IO.Path.GetTempPath() .NET Framework un .NET programmām, kas darbojas kā SYSTEM identitāte.
Sīkāka informācija
Papildinformāciju par .NET Framework un .NET darbību skatiet .NET dokumentācijā vietnē Path.GetTempPath.
Lai iegūtu papildinformāciju par pamatā esošo Windows operētājsistēmas darbību, skatiet Windows dokumentāciju par Win32 GetTempPath2 API.