Processsäkerhet och åtkomsträttigheter
Med Microsoft Windows-säkerhetsmodellen kan du styra åtkomsten till processobjekt. Mer information om säkerhet finns i Access-Control Model.
När en användare loggar in samlar systemet in en uppsättning data som unikt identifierar användaren under autentiseringsprocessen och lagrar dem i en åtkomsttoken. Den här åtkomsttoken beskriver säkerhetskontexten för alla processer som är associerade med användaren. Säkerhetskontexten för en process är den uppsättning autentiseringsuppgifter som ges till processen eller användarkontot som skapade processen.
Du kan använda en token för att ange den aktuella säkerhetskontexten för en process med hjälp av funktionen CreateProcessWithTokenW. Du kan ange en säkerhetsbeskrivning för en process när du anropar funktionen CreateProcess, CreateProcessAsUsereller CreateProcessWithLogonW. Om du anger NULL-hämtar processen en standardsäkerhetsbeskrivning. ACL:erna i standardsäkerhetsbeskrivningen för en process kommer från skaparens primära token eller personifieringstoken.
Om du vill hämta en process säkerhetsbeskrivning anropar du funktionen GetSecurityInfo. Om du vill ändra en process säkerhetsbeskrivning anropar du funktionen SetSecurityInfo.
De giltiga åtkomsträttigheterna för processobjekt omfattar standardåtkomsträttigheter och vissa processspecifika åtkomsträttigheter. I följande tabell visas de standardåtkomsträttigheter som används av alla objekt.
Värde | Betydelse |
---|---|
DELETE (0x00010000L) | Krävs för att ta bort objektet. |
READ_CONTROL (0x00020000L) | Krävs för att läsa information i säkerhetsbeskrivningen för objektet, inte inklusive informationen i SACL. Om du vill läsa eller skriva SACL:en måste du begära ACCESS_SYSTEM_SECURITY åtkomsträtt. Mer information finns i SACL-åtkomsträtt. |
SYNKRONISERA (0x00100000L) | Rätten att använda objektet för synkronisering. Detta gör att en tråd kan vänta tills objektet är i signalerat tillstånd. |
WRITE_DAC (0x00040000L) | Krävs för att ändra DACL i säkerhetsbeskrivningen för objektet. |
WRITE_OWNER (0x00080000L) | Krävs för att ändra ägaren i säkerhetsbeskrivningen för objektet. |
I följande tabell visas de processspecifika åtkomsträttigheterna.
Värde | Betydelse |
---|---|
PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) | SYNKRONISERA (0x00100000L) | 0xFFFF) | Alla möjliga åtkomsträttigheter för ett processobjekt.Windows Server 2003 och Windows XP: Storleken på flaggan PROCESS_ALL_ACCESS ökade på Windows Server 2008 och Windows Vista. Om ett program som kompilerats för Windows Server 2008 och Windows Vista körs på Windows Server 2003 eller Windows XP är flaggan PROCESS_ALL_ACCESS för stor och funktionen som anger den här flaggan misslyckas med ERROR_ACCESS_DENIED. För att undvika det här problemet anger du den minsta uppsättning åtkomsträttigheter som krävs för åtgärden. Om PROCESS_ALL_ACCESS måste användas anger du _WIN32_WINNT till det lägsta operativsystem som programmet har som mål (till exempel #define _WIN32_WINNT _WIN32_WINNT_WINXP ). Mer information finns i Using the Windows Headers. |
PROCESS_CREATE_PROCESS (0x0080) | Krävs för att använda den här processen som överordnad process med PROC_THREAD_ATTRIBUTE_PARENT_PROCESS. |
PROCESS_CREATE_THREAD (0x0002) | Krävs för att skapa en tråd i processen. |
PROCESS_DUP_HANDLE (0x0040) | Krävs för att duplicera ett handtag med DuplicateHandle-. |
PROCESS_QUERY_INFORMATION (0x0400) | Krävs för att hämta viss information om en process, till exempel dess token, slutkod och prioritetsklass (se OpenProcessToken). |
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) | Krävs för att hämta viss information om en process (se GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). En referens som har åtkomstbehörigheten PROCESS_QUERY_INFORMATION beviljas automatiskt PROCESS_QUERY_LIMITED_INFORMATION.Windows Server 2003 och Windows XP: Den här åtkomstbehörigheten stöds inte. |
PROCESS_SET_INFORMATION (0x0200) | Krävs för att ange viss information om en process, till exempel dess prioritetsklass (se SetPriorityClass). |
PROCESS_SET_QUOTA (0x0100) | Krävs för att ange minnesgränser med SetProcessWorkingSetSize. |
PROCESS_SUSPEND_RESUME (0x0800) | Krävs för att pausa eller återuppta en process. |
PROCESS_TERMINATE (0x0001) | Krävs för att avsluta en process med TerminateProcess-. |
PROCESS_VM_OPERATION (0x0008) | Krävs för att utföra en åtgärd på adressutrymmet för en process (se VirtualProtectEx och WriteProcessMemory). |
PROCESS_VM_READ (0x0010) | Krävs för att läsa minne i en process med hjälp av ReadProcessMemory. |
PROCESS_VM_WRITE (0x0020) | Krävs för att skriva till minnet i en process med hjälp av WriteProcessMemory. |
SYNKRONISERA (0x00100000L) | Krävs för att vänta tills processen avslutas med hjälp av väntefunktioner. |
Om du vill öppna en referens till en annan process och få fullständig åtkomstbehörighet måste du aktivera SeDebugPrivilege- behörighet. Mer information finns i Ändra behörigheter i en token.
Referensen som returneras av funktionen CreateProcess har PROCESS_ALL_ACCESS åtkomst till processobjektet. När du anropar funktionen OpenProcess kontrollerar systemet de begärda åtkomsträttigheterna mot DACL:en i processens säkerhetsbeskrivning. När du anropar funktionen GetCurrentProcess returnerar systemet en pseudohandle med den maximala åtkomst som DACL tillåter till anroparen.
Du kan begära ACCESS_SYSTEM_SECURITY åtkomst till ett processobjekt om du vill läsa eller skriva objektets SACL. Mer information finns i Access-Control listor (ACL: er) och SACL-åtkomsträtt.
Varning
En process som har vissa av de åtkomsträttigheter som anges här kan använda dem för att få andra åtkomsträttigheter. Om process A till exempel har ett handtag för att bearbeta B med PROCESS_DUP_HANDLE åtkomst kan den duplicera pseudoreferensen för process B. Detta skapar ett handtag som har maximal åtkomst till process B. Mer information om pseudoreferenser finns i GetCurrentProcess.
Skyddade processer
Windows Vista introducerar skyddade processer för att förbättra stödet för Digital Rights Management. Systemet begränsar åtkomsten till skyddade processer och trådarna i skyddade processer.
Följande standardåtkomsträttigheter tillåts inte från en process till en skyddad process:
- DELETE
- READ_CONTROL
- WRITE_DAC
- WRITE_OWNER
Följande specifika åtkomsträttigheter tillåts inte från en process till en skyddad process:
- 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
Den PROCESS_QUERY_LIMITED_INFORMATION rättigheten infördes för att ge åtkomst till en delmängd av den information som är tillgänglig via PROCESS_QUERY_INFORMATION.