Kiadás dátuma:2025. február 25.

Verzió:.NET 8 és újabbverziók.NET-keretrendszer minden verzió

Összefoglalás

A Microsoft biztonsági fejlesztéseket vezetett be a Windows legújabb verzióiban. Ezek a biztonsági fejlesztések módosítják az ideiglenes elérési utak kezelését, és bizonyos .NET-keretrendszer és .NET API-k, például aSystem.IO.Path.GetTempPath()más helyet adhatnak vissza a javítás alkalmazása után.

Beavatkozás szükséges

A .NET-keretrendszer és a esetében nincs szükség műveletre. NET-alapú alkalmazás. Az alkalmazás automatikusan kihasznál minden, a környezetére vonatkozó biztonsági fejlesztést. A legtöbb alkalmazás nem figyel meg viselkedésbeli változást. 

A cikk további részében megtudhatja, hogyan állapíthatja meg, hogy ezek a biztonsági fejlesztések hatással lehetnek-e az alkalmazás futásidejű viselkedésére. Ez a cikk a futtatókörnyezet viselkedésének igény szerinti testreszabásának lépéseit is felsorolja

Alkalmazandó szoftver

Ez a cikk a következő szoftverekre vonatkozik: 

Csak akkor, ha a windowsos frissítés alábbi verzióin fut: 

  • Windows 10, 22H2-es verzió KB5052077 telepítésekor

  • Windows Server 2019- KB5053594 telepítésekor 

  • Windows Server 2016 KB5053594 telepítésekor 

Ez a cikk nem vonatkozik a Windows 11,Windows Server 2022-ben vagy újabb verzióban futó .NET-keretrendszer vagy .NET-ra. 

Ez a cikk nem vonatkozik a .NET-re, ha nem Windows-platformokon fut. 

Részletes leírás és hatásutasítás

A fent említett Windows-frissítési tudásbázisok közül a Microsoft a Win32 GetTempPath2 API-t a Windows régebbi, piacon lévő verzióira fordította, hogy biztonságosabban helyettesítse a régebbi Win32 GetTempPath API-t. Belsőleg a .NET-keretrendszer és a .NET ezekre a Win32 API-kra támaszkodik a System.IO.Path.GetTempPath() metódus implementálásához: a Win32 GetTempPath2 API-t részesíti előnyben, ha létezik; és a Win32 GetTempPath API tartalékként lesz használva, ha a GetTempPath2 nem létezik. 

Mivel ezek a KB-k elérhetővé teszik az új Win32 GetTempPath2 API-t a megfelelő platformokon, a .NET-keretrendszer és a .NET a KB-k telepítése után a GetTempPath2-t fogja használni. 

Az elsődleges viselkedésbeli változás az, hogy a SYSTEM identitásként futó hívók alapértelmezés szerint megfigyelik a System.IO.Path.GetTempPath() metódus visszatérési %WINDIR%\SystemTemp , míg azok a hívók, akik a SYSTEM identitástól eltérő módon futnak, megfigyelik, hogy a metódus továbbra is visszaadja a meglévő értékét. 

Ha az alkalmazás megfelel az alábbi feltételeknek , a változás hatással lehet Önre: 

  • Az alkalmazás egy futtatókörnyezetet és egy operációsrendszer-platformot használ, amely a korábbi "Vonatkozó szoftver" fejléc alatt szerepel; és

  • Az alkalmazás RENDSZER-identitásként fut; és

  • Manuálisan állíthatja be a %TMP% vagy %TEMP% környezeti változót a standard ideiglenes fájl helyének átirányításához. (Lásd a Win32 GetTempPath API dokumentációjának Megjegyzések szakaszát .)

Ha megfelel ezeknek a feltételeknek, akkor a Windows-adatbázisok telepítése után megfigyelheti, hogy az alkalmazás a kívánt könyvtártól eltérő ideiglenes könyvtárba ír. 

Ez a viselkedésbeli változás bármely .NET-keretrendszer vagy . NET által biztosított API, amely végül a GetTempPath2-ra támaszkodik. A leggyakoribb belépési pontok a következők: 

Ez nem azoknak a módszereknek a teljes listája, amelyek viselkedése megváltozhat a KB-k telepítése után. 

Annak meghatározása, hogy egy alkalmazás a SYSTEM identitás alatt fut-e 

Egy .NET-keretrendszer vagy .NET-alkalmazás identitásának meghatározására számos különböző mechanizmus létezik

IIS-alapú webalkalmazások 

Az IIS a SYSTEM-identitásra "LOCALSYSTEM" néven hivatkozik. Az IIS-kezelőben (inetmgr.exe) lépjen az Alkalmazáskészletek lapra az összes alkalmazáskészlet és a hozzájuk tartozó identitások megtekintéséhez. A Group by ( Csoportosítás ) legördülő listából az "Identity" (Identitás) lehetőséget is kiválaszthatja, hogy könnyebben láthassa a LOCALSYSTEM identitásként futó alkalmazáskészleteket. 

Az alábbi képernyőképen egy példa látható egy LOCALSYSTEM-ként való futtatásra konfigurált alkalmazáskészletre ("MyAppPool"). Az alkalmazáskészleten belül futó alkalmazások RENDSZER-identitásként fognak futni. 

A képernyőképen egy példa látható egy LOCALSYSTEM-ként való futtatásra konfigurált alkalmazáskészletre ("MyAppPool"). Az alkalmazáskészleten belül futó alkalmazások RENDSZER-identitásként fognak futni.

Ezt az információt programozott módon is elérheti emelt szintű PowerShell-munkamenetből az alábbi szkript használatával. 

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

A fenti képernyőképen látható rendszerszintű "MyAppPool" alkalmazáskészlettel konfigurált gépen ez a PowerShell-szkript a következőket nyomtatja ki, jelezve, hogy a "MyAppPool" a SYSTEM identitás alatt fut. 

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

Windows-szolgáltatások 

Ha a .NET-keretrendszer vagy . A NET-alapú alkalmazás Windows-szolgáltatásként van regisztrálva, a Szolgáltatáskezelővel megtekintheti a társított identitását. 

Rendszergazda jogú parancssorból futtassa a services.mscparancsot. Ekkor megjelenik a Services Manager felhasználói felülete. 

Rendszergazda jogú parancssorból futtassa a services.msc fájlt. Ekkor megjelenik a Services Manager felhasználói felülete.

Ha a Bejelentkezés mint oszlopban a "Helyi rendszer" szerepel a szolgáltatásidentitáshoz, akkor a szolgáltatás a SYSTEM identitás alatt fut. 

Ezeket az adatokat a PowerShellen keresztül is lekérdezheti a Get-Service parancsmag használatával. Ha például egy MyServicenevű szolgáltatás adatait szeretné lekérdezni, használja a következő parancsot. 

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

Ha a szolgáltatás a SYSTEM identitás alatt való futtatásra van regisztrálva, a rendszer True (Igaz) értéket jelenít meg a konzolon. 

Egyéb mechanizmusok 

Az olyan eszközök, mint a Feladatkezelő (taskmgr.exe) vagy a Sysinternals Process Explorer , azt is meg tudják állapítani, hogy egy alkalmazás a SYSTEM identitás alatt fut-e. 

A Feladatkezelőben a Részletek nézetben listázza a rendszerben futó összes folyamatot, majd keresse meg a kívánt folyamatot, és tekintse meg a bejegyzést a Felhasználónév oszlopban. 

A Feladatkezelőben a Részletek nézetben listázza a rendszerben futó összes folyamatot, majd keresse meg a kívánt folyamatot, és tekintse meg a bejegyzést a Felhasználónév oszlopban.

Ha a Felhasználónév érték a "SYSTEM" szöveget olvassa be, a folyamat a SYSTEM identitás alatt fut. 

Vagy a Sysinternals Folyamatkezelőben keresse meg a fontos folyamatot, írja be a Tulajdonságok nézetet, majd tekintse meg a Felhasználó mezőt a Kép lapon. 

a Sysinternals Folyamatkezelőben keresse meg a fontos folyamatot, írja be a Tulajdonságok nézetet, majd tekintse meg a Felhasználó mezőt a Kép lapon.

Ha a Felhasználói érték az "NT AUTHORITY\SYSTEM" szöveget olvassa be, a folyamat a SYSTEM identitás alatt fut. 

A rendszerszintű folyamatok ideiglenes elérési útjának módosítása 

Az alábbi PowerShell-szkript bemutatja, hogyan hozhat létre új címtárat C:\NewSystemTemp\ , és hogyan korlátozhatja a címtár-hozzáférést csak a SYSTEM identitás alatt futó folyamatokra. Ne kísérelje meg módosítani a fájlokkal már feltöltött könyvtár ACL-eit. 

Ezt a szkriptet emelt szintű PowerShell-munkamenetből kell futtatni. 

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 

A művelet sikerességét a parancs futtatásával ellenőrizheti. 

icacls C:\NewSystemTemp\ 

Ez a következő kimenetet eredményezi, amely a sikert mutatja: 

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

A címtár létrehozása után állítsa be a %SYSTEMTEMP% környezeti változót rendszerszintű hatókörrel. Ezt beállíthatja a Rendszer Vezérlőpult felhasználói felületén, vagy programozott módon is beállíthatja a PowerShell használatával: 

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

Ezután indítsa újra a gépet. 

A %SYSTEMTEMP% környezeti változó módosítása nem módosítja a System.IO.Path.GetTempPath() visszatérési értékét az olyan .NET-keretrendszer és .NET-alkalmazások esetében, amelyek a SYSTEM-en kívül más identitásként futnak. Ezek az alkalmazások továbbra is ugyanazt a feloldási logikát követik, mint mindig, beleértve a %TMP% vagy %TEMP% környezeti változók betartását, ha vannak ilyenek. 

Hasonlóképpen, a %TMP% vagy %TEMP% környezeti változó beállítása nem módosítja a system identitásként futó .NET-keretrendszer és .NET-alkalmazások System.IO.Path.GetTempPath() visszatérési értékét. 

További információ

A .NET-keretrendszer és a .NET viselkedéséről a Path.GetTempPath .NET-dokumentációjában talál további információt. 

Az alapul szolgáló Windows operációs rendszer működésével kapcsolatos további információkért tekintse meg a Windows dokumentációját a Win32 GetTempPath2 API-n.

További segítségre van szüksége?

További lehetőségeket szeretne?

Fedezze fel az előfizetés előnyeit, böngésszen az oktatóanyagok között, ismerje meg, hogyan teheti biztonságossá eszközét, és így tovább.