Yayın Tarihi:25 Şubat 2025
Sürüm:.NET 8 ve üzeri.NET Framework, tüm sürümler
Özet
Microsoft, Windows'un son sürümlerine güvenlik geliştirmeleri dağıtmıştır. Bu güvenlik geliştirmeleri geçici yol işlemeyi değiştirir ve düzeltme eki uygulandıktan sonraSystem.IO.Path.GetTempPath()gibi bazı .NET Framework ve .NET API'lerinin farklı bir konum döndürmesine neden olabilir.
Eylem gerekli
herhangi bir .NET Framework veya için eylem gerekmez. NET tabanlı uygulama. Uygulamanız, ortamınız için geçerli olan tüm güvenlik iyileştirmelerinden otomatik olarak yararlanacaktır. Çoğu uygulama herhangi bir davranış değişikliği gözlemlemez.
Bu makalenin geri kalanında, bu güvenlik geliştirmelerinin uygulamanızın çalışma zamanı davranışını etkileyebilecek olup olmadığını belirleme işlemi ayrıntılı olarak anlatılabilir. Bu makalede, istenirse çalışma zamanı davranışını özelleştirme adımları da listelenir
Geçerli Yazılım
Bu makale aşağıdaki yazılımlar için geçerlidir:
-
.NET 8 ve üzeri
-
Temmuz 2024 güvenlik güncelleştirmeleri ve sonraki güncelleştirmeler itibarıyla tüm sürümler .NET Framework
Yalnızca aşağıdaki Windows update sürümlerinde çalışırken:
-
KB5052077 yüklendiğinde Windows 10, sürüm 22H2
-
KB5053594 yüklendiğinde Windows Server 2019
-
Windows Server 2016, KB5053594 yüklendiğinde
Bu makale, Windows 11, Windows Server 2022 veya sonraki sürümlerde çalışan .NET Framework veya .NET için geçerli değildir.
Bu makale, Windows dışı platformlarda çalışırken .NET için geçerli değildir .
Ayrıntılı açıklama ve etki deyimi
Yukarıda bahsedilen Windows güncelleştirme KB'leri itibarıyla Microsoft, Win32 GetTempPath2 API'sini eski Win32 GetTempPath API'sinin yerine daha güvenli bir işlem yapmak üzere Windows'un eski pazar içi sürümlerine geri aktarmıştır. dahili olarak, .NET Framework ve .NET, System.IO.Path.GetTempPath() yönteminin uygulanmasını sağlamak için bu Win32 API'lerini kullanır: varsa Win32 GetTempPath2 API tercih edilir ve GetTempPath2 yoksa Win32 GetTempPath API'si geri dönüş olarak kullanılır.
Bu KB'ler yeni Win32 GetTempPath2 API'sini geçerli platformlarda kullanılabilir hale getirdiğinden, .NET Framework ve .NET, KB'ler yüklendikten sonra GetTempPath2 kullanmaya başlar.
Birincil davranış değişikliği, SYSTEM kimliği olarak çalışan çağıranların varsayılan olarak System.IO.Path.GetTempPath() yönteminin %WINDIR%\SystemTemp döndürdüğünü gözlemlemesidir; SYSTEM kimliği dışında bir şey olarak çalışan çağıranlar ise yöntemin var olan değerini döndürmeye devam ettiğini gözlemler.
Uygulamanız aşağıdaki ölçütlerin tümünü karşılıyorsa, bu değişiklik sizi etkileyebilir:
-
Uygulamanız önceki "Uygulanabilir Yazılım" başlığı altında listelenen bir çalışma zamanı ve işletim sistemi platformu kullanır; ve
-
Uygulamanız SYSTEM kimliği olarak çalışır; ve
-
Standart geçici dosya konumunu yeniden yönlendirmek için %TMP% veya %TEMP% ortam değişkenini el ile ayarlarsınız. (Win32 GetTempPath API belgelerinin Açıklamalar bölümüne bakın.)
Tüm bu ölçütleri karşılıyorsanız, Windows KB'leri yüklendikten sonra uygulamanızın hedeflediğiniz dizin dışında bir geçici dizine yazıldığında gözlemleyebilirsiniz.
Bu davranış değişikliği herhangi bir .NET Framework veya aracılığıyla görülebilir. Net tarafından sağlanan VE sonunda GetTempPath2'ye dayalı API. En yaygın giriş noktaları şunlardır:
Bu, KB'ler yüklendikten sonra davranışları değişebilecek yöntemlerin kapsamlı bir listesi olarak tasarlanmamıştır.
Bir uygulamanın SYSTEM kimliği altında çalıştırılıp çalıştırılmayacağını belirleme
bir .NET Framework veya .NET uygulamasının kimliğini belirlemek için birkaç farklı mekanizma vardır
IIS tabanlı web uygulamaları
IIS, SISTEM kimliğini "LOCALSYSTEM" olarak ifade eder. IIS Yöneticisi'nde (inetmgr.exe), tüm uygulama havuzlarını ve ilişkili kimliklerini görmek için Uygulama Havuzları sekmesine gidin. LocalSYSTEM kimliği olarak çalışan uygulama havuzlarını görmeyi kolaylaştırmak için Gruplandırma ölçütü açılan listesinden "Kimlik" seçeneğini de belirleyebilirsiniz.
Aşağıdaki ekran görüntüsünde LOCALSYSTEM olarak çalışacak şekilde yapılandırılmış bir uygulama havuzu ("MyAppPool") örneği gösterilmektedir. Bu uygulama havuzu içinde çalışan tüm uygulamalar SYSTEM kimliği olarak çalışır.
Aşağıdaki betiği kullanarak bu bilgilere yükseltilmiş bir PowerShell oturumundan program aracılığıyla da erişebilirsiniz.
Import-Module IISAdministration Get-IISAppPool | where {$_.ProcessModel.IdentityType -eq "LocalSystem"}
Yukarıdaki ekran görüntüsünde gösterildiği gibi SYSTEM düzeyinde "MyAppPool" uygulama havuzuyla yapılandırılmış bir makinede, bu PowerShell betiği aşağıdakileri yazdırır ve "MyAppPool" öğesinin SYSTEM kimliği altında çalıştığını gösterir.
Name Status CLR Ver Pipeline Mode Start Mode ---- ------ ------- ------------- ---------- MyAppPool Started v4.0 Integrated OnDemand
Windows hizmetleri
veya .NET Framework. NET tabanlı uygulama Bir Windows Hizmeti olarak kaydedilir, ilişkili kimliğini görüntülemek için Services yöneticisini kullanabilirsiniz.
Yükseltilmiş komut isteminden services.mscçalıştırın. Bu, Services manager kullanıcı arabirimini görüntüler.
Farklı Oturum Aç sütununda hizmet kimliği için "Yerel Sistem" listeleniyorsa, hizmet SYSTEM kimliği altında çalışıyor demektir.
Get-Service cmdlet'ini kullanarak bu verileri PowerShell aracılığıyla da sorgulayabilirsiniz. Örneğin, MyServiceadlı bir hizmet için bu bilgileri sorgulamak için aşağıdaki komutu kullanın.
(Get-Service MyService).UserName -ieq "LocalSystem"
Hizmet SYSTEM kimliği altında çalışacak şekilde kayıtlıysa, bu işlem konsola True yazdırır.
Diğer mekanizmalar
Görev Yöneticisi (taskmgr.exe) veya Sysinternals İşlem Gezgini gibi araçlar da bir uygulamanın SYSTEM kimliği altında çalışıp çalışmadığını size söyleyebilir.
Görev Yöneticisi'nde, sistemdeki tüm çalışan işlemleri listelemek için Ayrıntılar görünümünü kullanın, ardından ilgilendiğiniz işlemi bulun ve Kullanıcı adı sütununun altındaki girdiye bakın.
Kullanıcı adı değeri "SYSTEM" değerini okursa, işlem SYSTEM kimliği altında çalışır.
Veya Sysinternals İşlem Gezgini'nde ilgilendiğiniz işlemi bulun ve Özellikler görünümüne girin, ardından Görüntü sekmesinin altındaki Kullanıcı alanına bakın.
Kullanıcı değeri "NT AUTHORITY\SYSTEM" değerini okursa, işlem SYSTEM kimliği altında çalışır.
SYSTEM düzeyinde işlemler için geçici yolu değiştirme
Aşağıdaki PowerShell betiği, yeni bir dizin C:\NewSystemTemp\ oluşturmayı ve dizin erişimini yalnızca SYSTEM kimliği altında çalışan işlemlerle kısıtlamayı gösterir. Zaten dosyalarla doldurulmuş bir dizinin ACL'lerini değiştirmeyi denemeyin.
Bu betik yükseltilmiş bir PowerShell oturumundan çalıştırılmalıdır.
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
komutunu çalıştırarak bu işlemin başarılı olduğunu onaylayabilirsiniz
icacls C:\NewSystemTemp\
Bu, başarıyı gösteren aşağıdaki çıkışı oluşturur:
C:\NewSystemTemp\ NT AUTHORITY\SYSTEM:(OI)(CI)(F) BUILTIN\Administrators:(OI)(CI)(F) Successfully processed 1 files; Failed processing 0 files
Dizin oluşturulduktan sonra sistem düzeyi kapsamına sahip %SYSTEMTEMP% ortam değişkenini ayarlayın. Bunu Sistem Denetim Masası kullanıcı arabirimi aracılığıyla veya PowerShell aracılığıyla program aracılığıyla ayarlayabilirsiniz:
[Environment]::SetEnvironmentVariable("SYSTEMTEMP", "C:\NewSystemTemp", [EnvironmentVariableTarget]::Machine)
Ardından makineyi yeniden başlatın.
%SYSTEMTEMP% ortam değişkeninin değiştirilmesi, SYSTEM dışında bir kimlik olarak çalışan .NET Framework ve .NET uygulamaları için System.IO.Path.GetTempPath() dönüş değerini değiştirmez. Bu uygulamalar, %TMP% veya varsa ortam değişkenlerini %TEMP% dahil olmak üzere her zaman sahip oldukları çözüm mantığını izlemeye devam eder.
Benzer şekilde, %TMP% veya %TEMP% ortam değişkeninin ayarlanması, SYSTEM kimliği olarak çalışan .NET Framework ve .NET uygulamaları için System.IO.Path.GetTempPath() dönüş değerini değiştirmez.
Daha fazla bilgi için
.NET Framework ve .NET davranışları hakkında daha fazla bilgi için Path.GetTempPath üzerindeki .NET belgelerine bakın.
Temel alınan Windows işletim sistemi davranışı hakkında daha fazla bilgi için Win32 GetTempPath2 API'sinin Windows belgelerine bakın.