Aracılığıyla paylaş


İşlem Güvenliği ve Erişim Hakları

Microsoft Windows güvenlik modeli, işlem nesnelerine erişimi denetlemenizi sağlar. Güvenlik hakkında daha fazla bilgi için bkz. model Access-Control.

Kullanıcı oturum açtığında, sistem kimlik doğrulama işlemi sırasında kullanıcıyı benzersiz olarak tanımlayan bir veri kümesi toplar ve erişim belirtecinde depolar. Bu erişim belirteci, kullanıcıyla ilişkili tüm işlemlerin güvenlik bağlamını açıklar. Bir işlemin güvenlik bağlamı, işleme veya işlemi oluşturan kullanıcı hesabına verilen kimlik bilgileri kümesidir.

CreateProcessWithTokenW işlevini kullanarak bir işlemin geçerli güvenlik bağlamını belirtmek için belirteç kullanabilirsiniz. CreateProcess, CreateProcessAsUserveya CreateProcessWithLogonWişlevini çağırdığınızda bir işlem içingüvenlik tanımlayıcısı belirtebilirsiniz. NULLbelirtirseniz, işlem varsayılan bir güvenlik tanımlayıcısı alır. Bir işlemin varsayılan güvenlik tanımlayıcısı içindeki ACL'ler, oluşturucunun birincil veya kimliğe bürünme belirtecinden gelir.

Bir işlemin güvenlik tanımlayıcısını almak için GetSecurityInfo işlevini çağırın. Bir işlemin güvenlik tanımlayıcısını değiştirmek için SetSecurityInfo işlevini çağırın.

İşlem nesneleri için geçerli erişim hakları, standart erişim hakları ve işleme özgü bazı erişim haklarını içerir. Aşağıdaki tabloda tüm nesneler tarafından kullanılan standart erişim hakları listelenir.

Değer Anlam
DELETE (0x00010000L) Nesneyi silmek için gereklidir.
READ_CONTROL (0x00020000L) SACL'deki bilgileri dahil etmek yerine nesnenin güvenlik tanımlayıcısında bilgi okumak için gereklidir. SACL'yi okumak veya yazmak için ACCESS_SYSTEM_SECURITY erişim hakkı istemeniz gerekir. Daha fazla bilgi için bkz. SACL Erişim Sağ.
EŞITLEME (0x00100000L) Eşitleme için nesnesini kullanma hakkı. Bu, bir iş parçacığının nesne sinyalli duruma gelene kadar beklemesini sağlar.
WRITE_DAC (0x00040000L) Nesnenin güvenlik tanımlayıcısında DACL'yi değiştirmek için gereklidir.
WRITE_OWNER (0x00080000L) Nesnenin güvenlik tanımlayıcısında sahibini değiştirmek için gereklidir.

 

Aşağıdaki tabloda işleme özgü erişim hakları listelenmiştir.

Değer Anlam
PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) | EŞITLE (0x00100000L) | 0xFFFF) İşlem nesnesi için tüm olası erişim hakları.Windows Server 2003 ve Windows XP: Windows Server 2008 ve Windows Vista'da PROCESS_ALL_ACCESS bayrağının boyutu artırıldı. Windows Server 2008 ve Windows Vista için derlenmiş bir uygulama Windows Server 2003 veya Windows XP'de çalıştırılırsa, PROCESS_ALL_ACCESS bayrağı çok büyük olur ve bu bayrağı belirten işlev ERROR_ACCESS_DENIEDile başarısız olur. Bu sorunu önlemek için işlem için gereken en düşük erişim hakları kümesini belirtin. PROCESS_ALL_ACCESS kullanılması gerekiyorsa, _WIN32_WINNT uygulamanızın hedeflediği en düşük işletim sistemine ayarlayın (örneğin, #define _WIN32_WINNT _WIN32_WINNT_WINXP). Daha fazla bilgi için bkz. windows üst bilgilerini kullanma .
PROCESS_CREATE_PROCESS (0x0080) bu işlemi PROC_THREAD_ATTRIBUTE_PARENT_PROCESSile üst işlem olarak kullanmak için gereklidir.
PROCESS_CREATE_THREAD (0x0002) İşlemde bir iş parçacığı oluşturmak için gereklidir.
PROCESS_DUP_HANDLE (0x0040) DuplicateHandlekullanarak bir tanıtıcıyı çoğaltmak için gereklidir.
PROCESS_QUERY_INFORMATION (0x0400) Belirteç, çıkış kodu ve öncelik sınıfı gibi bir işlemle ilgili belirli bilgileri almak için gereklidir (bkz. OpenProcessToken).
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) Bir işlem hakkında belirli bilgileri almak için gereklidir (bkz. GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). PROCESS_QUERY_INFORMATION erişim hakkı olan bir tanıtıcı PROCESS_QUERY_LIMITED_INFORMATIONotomatik olarak verilir.Windows Server 2003 ve Windows XP: Bu erişim hakkı desteklenmez.
PROCESS_SET_INFORMATION (0x0200) Bir işlem hakkında öncelik sınıfı gibi belirli bilgileri ayarlamak için gereklidir (bkz. SetPriorityClass).
PROCESS_SET_QUOTA (0x0100) SetProcessWorkingSetSizekullanarak bellek sınırları ayarlamak için gereklidir.
PROCESS_SUSPEND_RESUME (0x0800) Bir işlemi askıya almak veya sürdürmek için gereklidir.
PROCESS_TERMINATE (0x0001) TerminateProcesskullanarak bir işlemi sonlandırmak için gereklidir.
PROCESS_VM_OPERATION (0x0008) İşlemin adres alanında işlem gerçekleştirmek için gereklidir (bkz. VirtualProtectEx ve WriteProcessMemory).
PROCESS_VM_READ (0x0010) ReadProcessMemorykullanarak bir işlemdeki belleği okumak için gereklidir.
PROCESS_VM_WRITE (0x0020) WriteProcessMemorykullanarak bir işlemdeki belleğe yazmak için gereklidir.
EŞITLEME (0x00100000L) bekleme işlevlerini kullanarak işlemin sona ermesini beklemek için gereklidir.

 

Başka bir işleme tanıtıcı açmak ve tam erişim hakları elde etmek için SeDebugPrivilege ayrıcalığını etkinleştirmeniz gerekir. Daha fazla bilgi için bkz. BelirteçAyrıcalıkları Değiştirme.

CreateProcess işlevi tarafından döndürülen tanıtıcının işlem nesnesine PROCESS_ALL_ACCESS erişimi vardır. OpenProcess işlevini çağırdığınızda, sistem istenen erişim haklarını işlemin güvenlik tanımlayıcısında DACL'ye karşı denetler. GetCurrentProcess işlevini çağırdığınızda, sistem DACL'nin çağırana izin verdiği en yüksek erişime sahip bir sahte ad döndürür.

Nesnenin SACL'sini okumak veya yazmak istiyorsanız, işlem nesnesine doğrudan ACCESS_SYSTEM_SECURITY erişim isteyebilirsiniz. Daha fazla bilgi için bkz. Access-Control Listeleri (ACL'ler) ve SACL Erişim Sağ .

Uyarı

Burada belirtilen erişim haklarından bazılarına sahip olan bir işlem, bunları diğer erişim haklarını kazanmak için kullanabilir. Örneğin, A işleminin PROCESS_DUP_HANDLE erişimi olan B işlemini işlemek için bir tanıtıcısı varsa, B işlemi için sahte tanıtıcıyı çoğaltabilir. Bu, B işlemine en yüksek erişime sahip bir tanıtıcı oluşturur. Sahte tanıtıcılar hakkında daha fazla bilgi için bkz. getCurrentProcess.

 

Korumalı İşlemler

Windows Vista, Dijital Hak Yönetimi desteğini geliştirmek için korumalı işlemler sağlar. Sistem, korumalı işlemlere ve korumalı işlemlerin iş parçacıklarına erişimi kısıtlar.

Bir işlemden korumalı işleme aşağıdaki standart erişim haklarına izin verilmez:

  • DELETE
  • READ_CONTROL
  • WRITE_DAC
  • WRITE_OWNER

Aşağıdaki belirli erişim haklarına bir işlemden korumalı işleme izin verilmez:

  • 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

PROCESS_QUERY_LIMITED_INFORMATION hakkı, PROCESS_QUERY_INFORMATIONaracılığıyla sağlanan bilgilerin bir alt kümesine erişim sağlamak için sunulmuştur.