Keamanan Proses dan Hak Akses

Model keamanan Microsoft Windows memungkinkan Anda mengontrol akses ke objek proses. Untuk informasi selengkapnya tentang keamanan, lihat Model Kontrol Akses.

Saat pengguna masuk, sistem mengumpulkan sekumpulan data yang secara unik mengidentifikasi pengguna selama proses autentikasi, dan menyimpannya dalam token akses. Token akses ini menjelaskan konteks keamanan semua proses yang terkait dengan pengguna. Konteks keamanan proses adalah sekumpulan kredensial yang diberikan untuk proses atau akun pengguna yang membuat proses.

Anda dapat menggunakan token untuk menentukan konteks keamanan saat ini untuk proses menggunakan fungsi CreateProcessWithTokenW . Anda dapat menentukan deskriptor keamanan untuk proses saat memanggil fungsi CreateProcess, CreateProcessAsUser, atau CreateProcessWithLogonW . Jika Anda menentukan NULL, prosesnya akan mendapatkan pendeskripsi keamanan default. ACL dalam deskriptor keamanan default untuk proses berasal dari token utama atau peniruan dari pembuat.

Untuk mengambil deskriptor keamanan proses, panggil fungsi GetSecurityInfo . Untuk mengubah pendeskripsi keamanan proses, panggil fungsi SetSecurityInfo .

Hak akses yang valid untuk objek proses mencakup hak akses standar dan beberapa hak akses khusus proses. Tabel berikut mencantumkan hak akses standar yang digunakan oleh semua objek.

Nilai Makna
HAPUS (0x00010000L) Diperlukan untuk menghapus objek.
READ_CONTROL (0x00020000L) Diperlukan untuk membaca informasi dalam deskriptor keamanan untuk objek , tidak termasuk informasi dalam SACL. Untuk membaca atau menulis SACL, Anda harus meminta hak akses ACCESS_SYSTEM_SECURITY . Untuk informasi selengkapnya, lihat Hak Akses SACL.
SINKRONKAN (0x00100000L) Hak untuk menggunakan objek untuk sinkronisasi. Ini memungkinkan utas untuk menunggu hingga objek dalam status disinyalkan.
WRITE_DAC (0x00040000L) Diperlukan untuk mengubah DACL di deskriptor keamanan untuk objek .
WRITE_OWNER (0x00080000L) Diperlukan untuk mengubah pemilik dalam deskriptor keamanan untuk objek.

 

Tabel berikut mencantumkan hak akses khusus proses.

Nilai Makna
PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) | SINKRONKAN (0x00100000L) | 0xFFFF) Semua kemungkinan hak akses untuk objek proses. Windows Server 2003 dan Windows XP: Ukuran bendera PROCESS_ALL_ACCESS meningkat pada Windows Server 2008 dan Windows Vista. Jika aplikasi yang dikompilasi untuk Windows Server 2008 dan Windows Vista dijalankan pada Windows Server 2003 atau Windows XP, bendera PROCESS_ALL_ACCESS terlalu besar dan fungsi yang menentukan bendera ini gagal dengan ERROR_ACCESS_DENIED. Untuk menghindari masalah ini, tentukan set minimum hak akses yang diperlukan untuk operasi. Jika PROCESS_ALL_ACCESS harus digunakan, atur _WIN32_WINNT ke sistem operasi minimum yang ditargetkan oleh aplikasi Anda (misalnya, #define _WIN32_WINNT _WIN32_WINNT_WINXP). Untuk informasi selengkapnya, lihat Menggunakan Header Windows.
PROCESS_CREATE_PROCESS (0x0080) Diperlukan untuk menggunakan proses ini sebagai proses induk dengan PROC_THREAD_ATTRIBUTE_PARENT_PROCESS.
PROCESS_CREATE_THREAD (0x0002) Diperlukan untuk membuat utas dalam proses.
PROCESS_DUP_HANDLE (0x0040) Diperlukan untuk menduplikasi handel menggunakan DuplicateHandle.
PROCESS_QUERY_INFORMATION (0x0400) Diperlukan untuk mengambil informasi tertentu tentang proses, seperti token, kode keluar, dan kelas prioritasnya (lihat OpenProcessToken).
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) Diperlukan untuk mengambil informasi tertentu tentang proses (lihat GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Handel yang memiliki hak akses PROCESS_QUERY_INFORMATION secara otomatis diberikan PROCESS_QUERY_LIMITED_INFORMATION. Windows Server 2003 dan Windows XP: Hak akses ini tidak didukung.
PROCESS_SET_INFORMATION (0x0200) Diperlukan untuk mengatur informasi tertentu tentang proses, seperti kelas prioritasnya (lihat SetPriorityClass).
PROCESS_SET_QUOTA (0x0100) Diperlukan untuk mengatur batas memori menggunakan SetProcessWorkingSetSize.
PROCESS_SUSPEND_RESUME (0x0800) Diperlukan untuk menangguhkan atau melanjutkan proses.
PROCESS_TERMINATE (0x0001) Diperlukan untuk mengakhiri proses menggunakan TerminateProcess.
PROCESS_VM_OPERATION (0x0008) Diperlukan untuk melakukan operasi pada ruang alamat proses (lihat VirtualProtectEx dan WriteProcessMemory).
PROCESS_VM_READ (0x0010) Diperlukan untuk membaca memori dalam proses menggunakan ReadProcessMemory.
PROCESS_VM_WRITE (0x0020) Diperlukan untuk menulis ke memori dalam proses menggunakan WriteProcessMemory.
SINKRONKAN (0x00100000L) Diperlukan untuk menunggu proses dihentikan menggunakan fungsi tunggu.

 

Untuk membuka handel ke proses lain dan mendapatkan hak akses penuh, Anda harus mengaktifkan hak istimewa SeDebugPrivilege . Untuk informasi selengkapnya, lihat Mengubah Hak Istimewa dalam Token.

Handel yang dikembalikan oleh fungsi CreateProcess memiliki akses PROCESS_ALL_ACCESS ke objek proses. Saat Anda memanggil fungsi OpenProcess , sistem memeriksa hak akses yang diminta terhadap DACL dalam pendeskripsi keamanan proses. Saat Anda memanggil fungsi GetCurrentProcess , sistem mengembalikan pseudohandle dengan akses maksimum yang diizinkan DACL kepada pemanggil.

Anda dapat meminta hak akses ACCESS_SYSTEM_SECURITY ke objek proses jika Anda ingin membaca atau menulis SACL objek. Untuk informasi selengkapnya, lihat Daftar Kontrol Akses (ACL) dan Hak Akses SACL.

Peringatan

Proses yang memiliki beberapa hak akses yang dicatat di sini dapat menggunakannya untuk mendapatkan hak akses lainnya. Misalnya, jika proses A memiliki handel untuk memproses B dengan akses PROCESS_DUP_HANDLE , proses tersebut dapat menduplikasi handel semu untuk proses B. Ini membuat handel yang memiliki akses maksimum ke proses B. Untuk informasi selengkapnya tentang handel semu, lihat GetCurrentProcess.

 

Proses yang Dilindungi

Windows Vista memperkenalkan proses yang dilindungi untuk meningkatkan dukungan untuk Manajemen Hak Digital. Sistem membatasi akses ke proses yang dilindungi dan utas proses yang dilindungi.

Hak akses standar berikut tidak diizinkan dari proses ke proses yang dilindungi:

  • DELETE
  • READ_CONTROL
  • WRITE_DAC
  • WRITE_OWNER

Hak akses khusus berikut ini tidak diizinkan dari proses ke proses yang dilindungi:

  • PROCESS_ALL_ACCESS
  • PROCESS_CREATE_PROCESS
  • PROCESS_CREATE_THREAD
  • PROCESS_DUP_HANDLE
  • PROCESS_QUERY_INFORMATION
  • PROCESS_SET_INFORMATION
  • PROCESS_SET_QUOTA
  • PROCESS_VM_OPERATION
  • PROCESS_VM_READ
  • PROCESS_VM_WRITE

Hak PROCESS_QUERY_LIMITED_INFORMATION diperkenalkan untuk memberikan akses ke subset informasi yang tersedia melalui PROCESS_QUERY_INFORMATION.