Releasedatum:25 februari 2025

Versie:.NET 8 en hoger.NET Framework, alle versies

Samenvatting

Microsoft heeft beveiligingsverbeteringen geïmplementeerd in recente versies van Windows. Deze beveiligingsverbeteringen wijzigen de verwerking van tijdelijke paden en kunnen ertoe leiden dat bepaalde .NET Framework en .NET-API's, zoalsSystem.IO.Path.GetTempPath(), een andere locatie retourneren nadat de patch is toegepast.

Actie vereist

Er is geen actie vereist voor een .NET Framework of . Net-gebaseerde toepassing. Uw toepassing profiteert automatisch van alle beveiligingsverbeteringen die van toepassing zijn op uw omgeving. De meeste toepassingen zien geen gedragsverandering. 

In de rest van dit artikel wordt beschreven hoe u kunt bepalen of deze beveiligingsverbeteringen van invloed kunnen zijn op het runtimegedrag van uw toepassing. In dit artikel vindt u ook stappen voor het desgewenst aanpassen van het runtimegedrag

Toepasselijke software

Dit artikel is van toepassing op de volgende software: 

Alleen bij uitvoering in de volgende Windows-updateversies: 

  • Windows 10 versie 22H2 wanneer KB5052077 is geïnstalleerd

  • Windows Server 2019, wanneer KB5053594 is geïnstalleerd 

  • Windows Server 2016 wanneer KB5053594 is geïnstalleerd 

Dit artikel is niet van toepassing op .NET Framework of .NET die wordt uitgevoerd op Windows 11, Windows Server 2022 of hoger. 

Dit artikel is niet van toepassing op .NET wanneer deze wordt uitgevoerd op niet-Windows-platforms. 

Gedetailleerde beschrijving en impactverklaring

Vanaf de hierboven genoemde Windows-update-KB's heeft Microsoft de Win32 GetTempPath2-API gebackporteerd naar oudere in-market versies van Windows om te fungeren als een veiligere vervanging voor de oudere Win32 GetTempPath-API . Intern vertrouwen .NET Framework en .NET op deze Win32-API's om de implementatie van de System.IO.Path.GetTempPath() -methode te bieden: de Win32 GetTempPath2 -API heeft de voorkeur als deze bestaat; en de Win32 GetTempPath -API wordt gebruikt als een terugval als GetTempPath2 niet bestaat. 

Omdat deze KB's de nieuwe Win32 GetTempPath2 -API beschikbaar maken op de toepasselijke platformen, gaan .NET Framework en .NET GetTempPath2 gebruiken zodra de KB's zijn geïnstalleerd. 

De belangrijkste gedragswijziging is dat bellers die als systeemidentiteit worden uitgevoerd, de methode System.IO.Path.GetTempPath() standaard %WINDIR%\SystemTemp retourneren, terwijl bellers die als iets anders dan de SYSTEM-identiteit worden uitgevoerd, de bestaande waarde van de methode blijven retourneren. 

Als uw toepassing aan alle onderstaande criteria voldoet, wordt deze wijziging mogelijk beïnvloed: 

  • Uw toepassing maakt gebruik van een runtime- en besturingssysteemplatform dat wordt vermeld in de eerdere kop 'Toepasselijke software'; en

  • Uw toepassing wordt uitgevoerd als de SYSTEM-identiteit; en

  • U stelt handmatig de %TMP% - of %TEMP% omgevingsvariabele in om de locatie van het standaard tijdelijke bestand om te leiden. (Zie de sectie Opmerkingen van de win32 GetTempPath API-documentatie.)

Als u aan al deze criteria voldoet, kunt u, zodra de Windows-KB's zijn geïnstalleerd, zien dat uw toepassing wordt geschreven naar een andere tijdelijke map dan de map die u had bedoeld. 

Deze gedragswijziging kan zichtbaar zijn via een .NET Framework of . DOOR NET geleverde API die uiteindelijk afhankelijk is van GetTempPath2. De meest voorkomende toegangspunten zijn: 

Dit is niet bedoeld als een volledige lijst met methoden waarvan het gedrag kan veranderen zodra de KB's zijn geïnstalleerd. 

Bepalen of een toepassing wordt uitgevoerd onder de SYSTEM-identiteit 

Er zijn verschillende mechanismen voor het bepalen van de identiteit van een .NET Framework- of .NET-toepassing

Op IIS gebaseerde webtoepassingen 

IIS verwijst naar de SYSTEM-identiteit als 'LOCALSYSTEM'. Ga in IIS-beheer (inetmgr.exe) naar het tabblad Toepassingsgroepen om alle app-groepen en de bijbehorende identiteiten te bekijken. U kunt ook 'Identiteit' selecteren in de vervolgkeuzelijst Groeperen op om het gemakkelijker te maken om app-pools te zien die worden uitgevoerd als de LOCALSYSTEM-identiteit. 

In de onderstaande schermopname ziet u een voorbeeld van een app-pool ('MyAppPool') die is geconfigureerd om te worden uitgevoerd als LOCALSYSTEM. Alle toepassingen die binnen deze app-groep worden uitgevoerd, worden uitgevoerd als de SYSTEM-identiteit. 

In de schermopname ziet u een voorbeeld van een app-pool ('MyAppPool') die is geconfigureerd voor uitvoering als LOCALSYSTEM. Alle toepassingen die binnen deze app-groep worden uitgevoerd, worden uitgevoerd als de SYSTEM-identiteit.

U kunt deze informatie ook programmatisch openen vanuit een PowerShell-sessie met verhoogde bevoegdheid met behulp van het onderstaande script. 

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

Op een computer die is geconfigureerd met een app-pool op SYSTEM-niveau 'MyAppPool', zoals weergegeven in de bovenstaande schermopname, drukt dit PowerShell-script het volgende af, waarbij wordt weergegeven dat 'MyAppPool' wordt uitgevoerd onder de SYSTEM-identiteit. 

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

Windows-services 

Als uw .NET Framework of . Net-gebaseerde toepassing is geregistreerd als een Windows-service. U kunt servicesbeheer gebruiken om de bijbehorende identiteit weer te geven. 

Voer vanaf een opdrachtprompt met verhoogde bevoegdheid services.mscuit. Hiermee wordt de gebruikersinterface van Services manager weergegeven. 

Voer services.msc uit vanaf een opdrachtprompt met verhoogde bevoegdheid. Hiermee wordt de gebruikersinterface van Services manager weergegeven.

Als in de kolom Aanmelden als 'Lokaal systeem' voor de service-id wordt vermeld, wordt de service uitgevoerd onder de SYSTEM-identiteit. 

U kunt deze gegevens ook opvragen via PowerShell met behulp van de cmdlet Get-Service . Als u bijvoorbeeld een query wilt uitvoeren op deze informatie voor een service met de naam MyService, gebruikt u de volgende opdracht. 

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

Als de service is geregistreerd om te worden uitgevoerd onder de SYSTEM-identiteit, wordt True afgedrukt op de console. 

Andere mechanismen 

Hulpprogramma's zoals Taakbeheer (taskmgr.exe) of Sysinternals Process Explorer kunnen u ook vertellen of een toepassing wordt uitgevoerd onder de SYSTEM-identiteit. 

Gebruik in Taakbeheer de weergave Details om alle actieve processen in het systeem weer te geven, zoek vervolgens het proces van belang en bekijk de vermelding in de kolom Gebruikersnaam

Gebruik in Taakbeheer de weergave Details om alle actieve processen in het systeem weer te geven, zoek vervolgens het proces van belang en bekijk de vermelding in de kolom Gebruikersnaam.

Als de waarde van de gebruikersnaam 'SYSTEM' luidt, wordt het proces uitgevoerd onder de SYSTEM-identiteit. 

Of zoek in Sysinternals Process Explorer het gewenste proces en voer de weergave Eigenschappen in en bekijk vervolgens het veld Gebruiker op het tabblad Afbeelding

zoek in Sysinternals Process Explorer het gewenste proces en voer de weergave Eigenschappen in en bekijk vervolgens het veld Gebruiker op het tabblad Afbeelding.

Als de waarde Gebruiker 'NT AUTHORITY\SYSTEM' luidt, wordt het proces uitgevoerd onder de SYSTEM-identiteit. 

Het tijdelijke pad voor processen op SYSTEEMniveau wijzigen 

Het onderstaande PowerShell-script laat zien hoe u een nieuwe map maakt C:\NewSystemTemp\ en de toegang tot mappen beperkt tot alleen processen die worden uitgevoerd onder de SYSTEM-identiteit. Probeer niet de ACL's te wijzigen van een map die al is gevuld met bestanden. 

Dit script moet worden uitgevoerd vanuit een PowerShell-sessie met verhoogde bevoegdheid. 

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 

U kunt controleren of deze bewerking is geslaagd door de opdracht uit te voeren 

icacls C:\NewSystemTemp\ 

Dit levert de volgende uitvoer op met succes: 

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

Zodra de map is gemaakt, stelt u de omgevingsvariabele %SYSTEMTEMP% in met het bereik op systeemniveau. U kunt dit instellen via de gebruikersinterface van System Configuratiescherm of u kunt dit programmatisch instellen via PowerShell: 

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

Start de computer opnieuw op. 

Als u de omgevingsvariabele %SYSTEMTEMP%wijzigt, wordt de retourwaarde van System.IO.Path.GetTempPath() niet gewijzigd voor .NET Framework- en .NET-toepassingen die worden uitgevoerd als een andere identiteit dan SYSTEM. Deze toepassingen blijven dezelfde oplossingslogica volgen die ze altijd hebben, inclusief het voldoen aan de %TMP% of %TEMP% omgevingsvariabelen als ze aanwezig zijn. 

Als u de omgevingsvariabele %TMP% of %TEMP% instelt, wordt de retourwaarde van System.IO.Path.GetTempPath() niet gewijzigd voor .NET Framework- en .NET-toepassingen die worden uitgevoerd als de SYSTEM-identiteit. 

Voor meer informatie

Zie de .NET-documentatie op Path.GetTempPath voor meer informatie over .NET Framework en .NET-gedrag. 

Zie de Windows-documentatie over de Win32 GetTempPath2-API voor meer informatie over het onderliggende gedrag van het Windows-besturingssysteem.

Meer hulp nodig?

Meer opties?

Verken abonnementsvoordelen, blader door trainingscursussen, leer hoe u uw apparaat kunt beveiligen en meer.