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: 

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. 

Cuplikan layar 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. 

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 . 

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 . 

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.

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.