Tanggal Rilis:25 Februari 2025
Versi:.NET 8 dan yang lebih tinggi.NET Framework, semua versi
Ringkasan
Microsoft telah meluncurkan penyempurnaan keamanan untuk versi Windows terbaru. Penyempurnaan keamanan ini mengubah penanganan jalur temp dan dapat menyebabkan .NET Framework dan .NET API tertentu sepertiSystem.IO.Path.GetTempPath()untuk mengembalikan lokasi lain setelah patch diterapkan.
Tindakan diperlukan
Tidak diperlukan tindakan apa pun .NET Framework atau . Aplikasi berbasis NET. Aplikasi Anda akan secara otomatis mendapatkan manfaat dari penyempurnaan keamanan apa pun yang berlaku untuk lingkungan Anda. Sebagian besar aplikasi tidak akan mengamati perubahan perilaku apa pun.Â
Sisa artikel ini menjelaskan cara menentukan apakah penyempurnaan keamanan ini dapat memengaruhi perilaku runtime aplikasi Anda. Artikel ini juga mencantumkan langkah-langkah untuk mengkustomisasi perilaku runtime jika diinginkan
Perangkat Lunak yang Berlaku
Artikel ini berlaku untuk perangkat lunak berikut ini:Â
-
.NET 8 dan yang lebih tinggi
-
.NET Framework, semua versi, mulai pembaruan keamanan juli 2024 dan pembaruan berikutnya
Hanya ketika berjalan pada versi pembaruan Windows berikut ini:Â
-
Windows 10, versi 22H2 saat KB5052077 diinstal
-
Windows Server 2019, ketika KB5053594 diinstalÂ
-
Windows Server 2016, ketika KB5053594 diinstalÂ
Artikel ini tidak berlaku untuk .NET Framework atau .NET yang berjalan di Windows 11, Windows Server 2022, atau yang lebih baru.Â
Artikel ini tidak berlaku untuk .NET ketika berjalan di platform non-Windows.Â
Deskripsi mendetail dan pernyataan dampak
Pada KB pembaruan Windows yang disebutkan di atas, Microsoft telah mendukung API Win32 GetTempPath2 ke Windows versi di pasar yang lebih lama untuk bertindak sebagai pengganti yang lebih aman untuk API Win32 GetTempPath yang lebih lama. Secara internal, .NET Framework dan .NET mengandalkan API Win32 ini untuk menyediakan implementasi metode System.IO.Path.GetTempPath() : API win32 GetTempPath2 lebih disukai jika ada; dan API win32 GetTempPath digunakan sebagai fallback jika GetTempPath2 tidak ada.Â
Karena KB ini membuat Win32 GetTempPath2 API baru tersedia di platform yang berlaku, .NET Framework dan .NET akan mulai menggunakan GetTempPath2 setelah KB diinstal.Â
Perubahan perilaku utama adalah bahwa penelepon yang berjalan sebagai identitas SYSTEM akan mengamati metode System.IO.Path.GetTempPath() mengembalikan %WINDIR%\SystemTemp secara default, sedangkan penelepon yang berjalan sebagai apa pun selain identitas SISTEM akan mengamati metode terus mengembalikan nilai yang sudah ada.Â
Jika aplikasi Anda memenuhi semua kriteria di bawah ini, Anda mungkin terpengaruh oleh perubahan ini:Â
-
Aplikasi Anda menggunakan runtime dan platform OS yang tercantum di bawah judul "Perangkat Lunak Yang Berlaku" sebelumnya; dan
-
Aplikasi Anda berjalan sebagai identitas SISTEM; dan
-
Anda secara manual mengatur variabel lingkungan %TMP% atau %TEMP% untuk mengalihkan lokasi file temp standar. (Lihat bagian Keterangan dari dokumentasi Win32 GetTempPath API.)
Jika Anda memenuhi semua kriteria ini, maka setelah KB Windows diinstal, Anda dapat mengamati penulisan aplikasi Anda ke direktori temp selain direktori yang Anda maksudkan.Â
Perubahan perilaku ini mungkin terlihat melalui .NET Framework atau . API yang disediakan NET yang akhirnya mengandalkan GetTempPath2. Titik entri yang paling umum adalah:Â
Ini tidak dimaksudkan untuk menjadi daftar lengkap metode yang perilakunya mungkin berubah setelah KB diinstal.Â
Menentukan apakah aplikasi berjalan di bawah identitas SISTEMÂ
Ada beberapa mekanisme berbeda untuk menentukan identitas aplikasi .NET Framework atau .NET
Aplikasi web berbasis IISÂ
IIS menyebut identitas SISTEM sebagai "LOCALSYSTEM". Di Manajer IIS (inetmgr.exe), masuk ke tab Kumpulan Aplikasi untuk melihat semua kumpulan aplikasi dan identitas terkait. Anda juga dapat memilih "Identitas" dari menu menurun Kelompokkan menurut untuk memudahkan anda melihat kumpulan aplikasi yang berjalan sebagai identitas LOCALSYSTEM.Â
Cuplikan layar di bawah ini memperlihatkan contoh kumpulan aplikasi ("MyAppPool") yang dikonfigurasi untuk dijalankan sebagai LOCALSYSTEM. Aplikasi apa pun yang berjalan di dalam kumpulan aplikasi ini akan berjalan sebagai identitas SISTEM.Â
Anda juga dapat mengakses informasi ini secara terprogram dari sesi PowerShell yang ditingkatkan menggunakan skrip di bawah ini.Â
Import-Module IISAdministration Get-IISAppPool | where {$_.ProcessModel.IdentityType -eq "LocalSystem"}Â
Dalam mesin yang dikonfigurasi dengan kumpulan aplikasi "MyAppPool" tingkat SISTEM seperti yang diperlihatkan dalam cuplikan layar di atas, skrip PowerShell ini mencetak hal berikut, memperlihatkan bahwa "MyAppPool" berjalan di bawah identitas SISTEM.Â
Name                Status      CLR Ver Pipeline Mode Start Mode ----                ------      ------- ------------- ---------- MyAppPool           Started     v4.0    Integrated    OnDemandÂ
Layanan WindowsÂ
Jika .NET Framework atau . Aplikasi berbasis NET didaftarkan sebagai Layanan Windows, Anda dapat menggunakan manajer Layanan untuk melihat identitas terkaitnya.Â
Dari prompt perintah yang ditinggikan, jalankan services.msc. Tindakan ini menampilkan UI pengelola layanan.Â
Jika kolom Masuk Sebagai mencantumkan "Sistem Lokal" untuk identitas layanan, maka layanan berjalan di bawah identitas SISTEM.Â
Anda juga bisa membuat kueri data ini melalui PowerShell menggunakan cmdlet Get-Service . Misalnya, untuk membuat kueri informasi ini untuk layanan bernama MyService, gunakan perintah berikut ini.Â
(Get-Service MyService).UserName -ieq "LocalSystem"Â
Jika layanan didaftarkan untuk dijalankan di bawah identitas SISTEM, hal ini akan dicetak True ke konsol.Â
Mekanisme lainnyaÂ
Alat seperti Manajer Tugas (taskmgr.exe) atau Sysinternals Process Explorer juga dapat memberi tahu Apakah aplikasi berjalan di bawah identitas SISTEM.Â
Di Manajer Tugas, gunakan tampilan Detail untuk mencantumkan semua proses yang berjalan dalam sistem, lalu temukan proses minat dan lihat entri di bawah kolom Nama pengguna .Â
Jika nilai Nama pengguna berbunyi "SYSTEM", proses berjalan di bawah identitas SISTEM.Â
Atau, di Sysinternals Process Explorer, temukan proses minat dan masukkan tampilan Properti , lalu lihat bidang Pengguna di bawah tab Gambar .Â
Jika nilai Pengguna berbunyi "NT AUTHORITY\SYSTEM", proses berjalan di bawah identitas SISTEM.Â
Mengubah jalur temp untuk proses tingkat SISTEMÂ
Skrip PowerShell di bawah ini menunjukkan cara membuat direktori baru C:\NewSystemTemp\ dan membatasi akses direktori ke hanya proses yang berjalan di bawah identitas SISTEM. Jangan mencoba mengubah AKL direktori yang sudah diisi dengan file.Â
Skrip ini harus dijalankan dari sesi PowerShell yang ditingkatkan.Â
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Â
Anda dapat mengonfirmasi bahwa operasi ini berhasil dengan menjalankan perintahÂ
icacls C:\NewSystemTemp\Â
Yang akan menghasilkan output berikut memperlihatkan keberhasilan:Â
C:\NewSystemTemp\ NT AUTHORITY\SYSTEM:(OI)(CI)(F)Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â BUILTIN\Administrators:(OI)(CI)(F)Â Â Successfully processed 1 files; Failed processing 0 filesÂ
Setelah direktori dibuat, atur variabel lingkungan %SYSTEMTEMP% dengan lingkup tingkat sistem. Anda dapat mengaturnya melalui UI Panel Kontrol Sistem, atau mengaturnya secara terprogram melalui PowerShell:Â
[Environment]::SetEnvironmentVariable("SYSTEMTEMP", "C:\NewSystemTemp", [EnvironmentVariableTarget]::Machine)Â
Lalu boot ulang mesin.Â
Mengubah variabel lingkungan %SYSTEMTEMP%tidak akan mengubah nilai pengembalian System.IO.Path.GetTempPath() untuk aplikasi .NET Framework dan .NET yang berjalan sebagai identitas selain SISTEM. Aplikasi tersebut akan terus mengikuti logika resolusi yang sama seperti biasanya, termasuk menghormati variabel lingkungan %TMP% atau %TEMP% jika ada.Â
Demikian pula, mengatur variabel lingkungan %TMP% atau %TEMP% tidak akan mengubah nilai pengembalian System.IO.Path.GetTempPath() untuk aplikasi .NET Framework dan .NET yang berjalan sebagai identitas SISTEM.Â
Untuk informasi lebih lanjut
Untuk informasi selengkapnya tentang perilaku .NET Framework dan .NET, lihat dokumentasi .NET di Path.GetTempPath.Â
Untuk informasi selengkapnya tentang perilaku OS Windows yang mendasar, lihat dokumentasi Windows pada API Win32 GetTempPath2.