Zabezpečení procesů a přístupová práva
Model zabezpečení systému Microsoft Windows umožňuje řídit přístup k procesním objektům. Další informace o zabezpečení naleznete v tématu Access-Control Model.
Když se uživatel přihlásí, systém shromažďuje sadu dat, která jednoznačně identifikuje uživatele během procesu ověřování, a uloží ho do přístupového tokenu. Tento přístupový token popisuje kontext zabezpečení všech procesů přidružených k uživateli. Kontext zabezpečení procesu je sada přihlašovacích údajů zadaných procesu nebo uživatelský účet, který proces vytvořil.
Pomocí tokenu můžete určit aktuální kontext zabezpečení procesu pomocí funkce CreateProcessWithTokenW. Při volání funkce CreateProcess, CreateProcessAsUsernebo CreateProcessWithLogonW můžete určit popisovač zabezpečení procesu. Pokud zadáte null, proces získá výchozí popisovač zabezpečení. Seznamy ACL ve výchozím popisovači zabezpečení pro proces pocházejí z primárního tokenu nebo tokenu zosobnění tvůrce.
Chcete-li načíst popisovač zabezpečení procesu, zavolejte funkci GetSecurityInfo. Pokud chcete změnit popisovač zabezpečení procesu, zavolejte funkci SetSecurityInfo.
Platná přístupová práva pro objekty procesu zahrnují standardní přístupová práva a některá přístupová práva specifická pro proces. Následující tabulka uvádí standardní přístupová práva používaná všemi objekty.
Hodnota | Význam |
---|---|
DELETE (0x00010000L) | Vyžaduje se k odstranění objektu. |
READ_CONTROL (0x0002000L) | Vyžadováno ke čtení informací v popisovači zabezpečení objektu, nikoli informace v SACL. Chcete-li číst nebo zapisovat SACL, musíte požádat ACCESS_SYSTEM_SECURITY přístupové právo. Další informace naleznete v tématu SACL Access Right. |
SYNCHRONIZOVAT (0x0010000L) | Právo použít objekt pro synchronizaci. To umožňuje vláknu čekat, dokud objekt není v signalizačním stavu. |
WRITE_DAC (0x00040000L) | Vyžaduje se ke změně seznamu DACL v popisovači zabezpečení objektu. |
WRITE_OWNER (0x00080000L) | Vyžaduje se ke změně vlastníka v popisovači zabezpečení objektu. |
Následující tabulka uvádí přístupová práva specifická pro proces.
Hodnota | Význam |
---|---|
PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) | SYNCHRONIZOVAT (0x00100000L) | 0xFFFF) | Všechna možná přístupová práva pro objekt procesu.Windows Server 2003 a Windows XP: Velikost příznaku PROCESS_ALL_ACCESS zvýšena v systémech Windows Server 2008 a Windows Vista. Pokud je aplikace zkompilovaná pro systém Windows Server 2008 a Windows Vista spuštěna v systému Windows Server 2003 nebo Windows XP, je příznak PROCESS_ALL_ACCESS příliš velký a funkce určující tento příznak selže s ERROR_ACCESS_DENIED. Chcete-li se tomuto problému vyhnout, zadejte minimální sadu přístupových práv požadovaných pro operaci. Pokud je nutné použít PROCESS_ALL_ACCESS, nastavte _WIN32_WINNT na minimální operační systém, na který vaše aplikace cílí (například #define _WIN32_WINNT _WIN32_WINNT_WINXP ). Další informace naleznete v tématu Použití záhlaví systému Windows. |
PROCESS_CREATE_PROCESS (0x0080) | Vyžadováno pro použití tohoto procesu jako nadřazeného procesu s PROC_THREAD_ATTRIBUTE_PARENT_PROCESS. |
PROCESS_CREATE_THREAD (0x0002) | Vyžaduje se k vytvoření vlákna v procesu. |
PROCESS_DUP_HANDLE (0x0040) | Vyžaduje se duplikování popisovače pomocí DuplicateHandle. |
PROCESS_QUERY_INFORMATION (0x0400) | Vyžaduje se k načtení určitých informací o procesu, jako je jeho token, ukončovací kód a třída priority (viz OpenProcessToken). |
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) | Vyžadováno k načtení určitých informací o procesu (viz GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Popisovač, který má PROCESS_QUERY_INFORMATION přístupové právo, se automaticky uděluje PROCESS_QUERY_LIMITED_INFORMATION.Windows Server 2003 a Windows XP: Toto přístupové právo není podporováno. |
PROCESS_SET_INFORMATION (0x0200) | Vyžaduje se k nastavení určitých informací o procesu, jako je jeho třída priority (viz SetPriorityClass). |
PROCESS_SET_QUOTA (0x0100) | Vyžadováno pro nastavení limitů paměti pomocí SetProcessWorkingSetSize. |
PROCESS_SUSPEND_RESUME (0x0800) | Vyžaduje se k pozastavení nebo obnovení procesu. |
PROCESS_TERMINATE (0x0001) | Požadováno k ukončení procesu pomocí TerminateProcess. |
PROCESS_VM_OPERATION (0x0008) | Vyžaduje se k provedení operace s adresními prostory procesu (viz VirtualProtectEx a WriteProcessMemory). |
PROCESS_VM_READ (0x0010) | Vyžadováno pro čtení paměti v procesu pomocí ReadProcessMemory. |
PROCESS_VM_WRITE (0x0020) | Vyžadováno pro zápis do paměti v procesu pomocí WriteProcessMemory. |
SYNCHRONIZOVAT (0x0010000L) | Vyžadováno k čekání na ukončení procesu pomocí funkcí čekání . |
Pokud chcete otevřít popisovač pro jiný proces a získat úplná přístupová práva, musíte povolit oprávnění SeDebugPrivilege. Další informace naleznete v tématu změna oprávnění v tokenu.
Popisovač vrácený funkcí CreateProcess má PROCESS_ALL_ACCESS přístup k objektu procesu. Když zavoláte funkci OpenProcess, systém zkontroluje požadovaná přístupová práva proti seznamu DACL v popisovači zabezpečení procesu. Při volání GetCurrentProcess funkce vrátí systém pseudohandle s maximálním přístupem, který daCL umožňuje volajícímu.
Pokud chcete číst nebo zapisovat SACL objektu, můžete požádat ACCESS_SYSTEM_SECURITY přístupové právo k objektu procesu. Další informace naleznete v tématu Access-Control Seznamy (ACL) a SACL Access Right.
Varování
Proces, který má některá přístupová práva, která jsou zde uvedena, je může použít k získání dalších přístupových práv. Pokud má například proces A popisovač pro zpracování B s PROCESS_DUP_HANDLE přístupem, může duplikovat pseudo popisovač procesu B. Tím se vytvoří popisovač, který má maximální přístup ke zpracování B. Další informace o pseudo obslužných rutinách naleznete v tématu GetCurrentProcess.
Chráněné procesy
Systém Windows Vista zavádí chráněné procesy ke zvýšení podpory pro správu digitálních práv. Systém omezuje přístup k chráněným procesům a vláknům chráněných procesů.
Následující standardní přístupová práva nejsou povolena z procesu do chráněného procesu:
- ODSTRANIT
- READ_CONTROL
- WRITE_DAC
- WRITE_OWNER
Následující konkrétní přístupová práva nejsou povolena z procesu do chráněného procesu:
- 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
Právo PROCESS_QUERY_LIMITED_INFORMATION bylo zavedeno k poskytování přístupu k podmnožině informací dostupných prostřednictvím PROCESS_QUERY_INFORMATION.