Segurança do Serviço e Direitos de Acesso
O modelo de segurança do Windows permite controlar o acesso ao SCM (gerenciador de controle de serviço) e aos objetos de serviço. As seções a seguir fornecem informações detalhadas:
- Direitos de Acesso para o Gerenciador de Controle de Serviços
- direitos de acesso para um de serviço
Direitos de acesso para o Gerenciador de Controle de Serviços
Veja a seguir os direitos de acesso específicos para o SCM.
Acesso à direita | Descrição |
---|---|
SC_MANAGER_ALL_ACCESS (0xF003F) | Inclui STANDARD_RIGHTS_REQUIRED, além de todos os direitos de acesso nesta tabela. |
SC_MANAGER_CREATE_SERVICE (0x0002) | Necessário para chamar a função CreateService para criar um objeto de serviço e adicioná-lo ao banco de dados. |
SC_MANAGER_CONNECT (0x0001) | Necessário para se conectar ao gerenciador de controle de serviço. |
SC_MANAGER_ENUMERATE_SERVICE (0x0004) | Necessário para chamar a função EnumServicesStatus ou EnumServicesStatusEx para listar os serviços que estão no banco de dados. Necessário para chamar a função NotifyServiceStatusChange para receber notificação quando qualquer serviço for criado ou excluído. |
SC_MANAGER_LOCK (0x0008) | Necessário para chamar a funçãoLockServiceDatabase para adquirir um bloqueio no banco de dados. |
SC_MANAGER_MODIFY_BOOT_CONFIG (0x0020) | Necessário para chamar a funçãoNotifyBootConfigStatus. |
SC_MANAGER_QUERY_LOCK_STATUS (0x0010) | Necessário para chamar a função QueryServiceLockStatus para recuperar as informações de status de bloqueio do banco de dados. |
Veja a seguir os de direitos de acesso genéricos para o SCM.
Acesso à direita | Descrição |
---|---|
GENERIC_READ |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS |
GENERIC_WRITE |
SC_MANAGER_CREATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG |
GENERIC_EXECUTE |
SC_MANAGER_CONNECT SC_MANAGER_LOCK |
GENERIC_ALL |
|
Um processo com os direitos de acesso corretos pode abrir um identificador para o SCM que pode ser usado nas funções OpenService, EnumServicesStatusExe queryServiceLockStatus. Somente processos com privilégios de Administrador podem abrir identificadores para o SCM que podem ser usados pelas funçõesCreateService e LockServiceDatabase.
O sistema cria o descritor de segurança para o SCM. Para obter ou definir o descritor de segurança para o SCM, use as funções QueryServiceObjectSecurity e SetServiceObjectSecurity com um identificador para o objeto SCManager.
Windows Server 2003 e Windows XP: Diferentemente da maioria dos outros objetos protegíveis, o descritor de segurança do SCM não pode ser modificado. Esse comportamento foi alterado a partir do Windows Server 2003 com o Service Pack 1 (SP1).
Os direitos de acesso a seguir são concedidos.
Conta | Direitos de acesso |
---|---|
Usuários autenticados remotos |
|
Usuários autenticados locais (incluindo LocalService e NetworkService) |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
LocalSystem |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
Administradores |
|
Observe que usuários remotos autenticados pela rede, mas não conectados interativamente, podem se conectar ao SCM, mas não executar operações que exijam outros direitos de acesso. Para executar essas operações, o usuário deve estar conectado interativamente ou o serviço deve usar uma das contas de serviço.
Windows Server 2003 e Windows XP: usuários autenticados remotos recebem os direitos de acesso SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, SC_MANAGER_QUERY_LOCK_STATUSe STANDARD_RIGHTS_READ. Esses direitos de acesso são restritos conforme descrito na tabela anterior a partir do Windows Server 2003 com SP1
Quando um processo usa a função OpenSCManager para abrir um identificador para um banco de dados de serviços instalados, ele pode solicitar direitos de acesso. O sistema executa uma verificação de segurança no descritor de segurança do SCM antes de conceder os direitos de acesso solicitados.
Direitos de acesso para um serviço
Veja a seguir os direitos de acesso específicos para um serviço.
Acesso à direita | Descrição |
---|---|
SERVICE_ALL_ACCESS (0xF01FF) | Inclui STANDARD_RIGHTS_REQUIRED além de todos os direitos de acesso nesta tabela. |
SERVICE_CHANGE_CONFIG (0x0002) | Necessário para chamar a função ChangeServiceConfig ou ChangeServiceConfig2 para alterar a configuração do serviço. Como isso concede ao chamador o direito de alterar o arquivo executável executado pelo sistema, ele deve ser concedido somente aos administradores. |
SERVICE_ENUMERATE_DEPENDENTS (0x0008) | Necessário para chamar a função EnumDependentServices para enumerar todos os serviços dependentes do serviço. |
SERVICE_INTERROGATE (0x0080) | Necessário para chamar a função ControlService para solicitar que o serviço relate seu status imediatamente. |
SERVICE_PAUSE_CONTINUE (0x0040) | Necessário para chamar a função ControlService para pausar ou continuar o serviço. |
SERVICE_QUERY_CONFIG (0x0001) | Necessário para chamar oQueryServiceConfig e funções QueryServiceConfig2 para consultar a configuração do serviço. |
SERVICE_QUERY_STATUS (0x0004) | Necessário para chamar a função QueryServiceStatus ou queryServiceStatusEx para perguntar ao gerenciador de controle de serviços sobre o status do serviço. Necessário para chamar a função NotifyServiceStatusChange para receber notificação quando um serviço altera o status. |
SERVICE_START (0x0010) | Necessário para chamar a função StartService para iniciar o serviço. |
SERVICE_STOP (0x0020) | Necessário para chamar a função ControlService para interromper o serviço. |
SERVICE_USER_DEFINED_CONTROL(0x0100) | Necessário para chamar a função ControlService para especificar um código de controle definido pelo usuário. |
Veja a seguir os de direitos de acesso padrão para um serviço.
Acesso à direita | Descrição |
---|---|
ACCESS_SYSTEM_SECURITY | Necessário para chamar a função QueryServiceObjectSecurity ou setServiceObjectSecurity para acessar o SACL. A maneira adequada de obter esse acesso é habilitar o privilégio SE_SECURITY_NAME no token de acesso atual do chamador, abrir o identificador para ACCESS_SYSTEM_SECURITY acesso e desabilitar o privilégio. |
EXCLUIR (0x10000) | Necessário para chamar a função DeleteService para excluir o serviço. |
READ_CONTROL (0x20000) | Necessário para chamar a função QueryServiceObjectSecurity para consultar o descritor de segurança do objeto de serviço. |
WRITE_DAC (0x40000) | Necessário para chamar a funçãoSetServiceObjectSecurity para modificar o Dacl membro do descritor de segurança do objeto de serviço. |
WRITE_OWNER (0x80000) | Necessário para chamar a função SetServiceObjectSecurity para modificar o Owner e Group membros do descritor de segurança do objeto de serviço. |
Veja a seguir os de direitos de acesso genéricos para um serviço.
Acesso à direita | Descrição |
---|---|
GENERIC_READ |
SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS |
GENERIC_WRITE |
SERVICE_CHANGE_CONFIG |
GENERIC_EXECUTE |
SERVICE_START SERVICE_STOP SERVICE_PAUSE_CONTINUE SERVICE_USER_DEFINED_CONTROL |
O SCM cria o descritor de segurança de um objeto de serviço quando o serviço é instalado pela função CreateService. O descritor de segurança padrão de um objeto de serviço concede o seguinte acesso.
Conta | Direitos de acesso |
---|---|
Usuários autenticados remotos | Não concedido por padrão.Windows Server 2003 com SP1: SERVICE_USER_DEFINED_CONTROL Windows Server 2003 e Windows XP: Os direitos de acesso para usuários autenticados remotos são os mesmos para usuários autenticados locais. |
Usuários autenticados locais (incluindo LocalService e NetworkService) |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_USER_DEFINED_CONTROL |
LocalSystem |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_PAUSE_CONTINUE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_START SERVICE_STOP SERVICE_USER_DEFINED_CONTROL |
Administradores |
READ_CONTROL SERVICE_ALL_ACCESS WRITE_DAC WRITE_OWNER |
Para executar quaisquer operações, o usuário deve estar conectado interativamente ou o serviço deve usar uma das contas de serviço.
Para obter ou definir o descritor de segurança para um objeto de serviço, use as funções QueryServiceObjectSecurity e SetServiceObjectSecurity. Para obter mais informações, consulte Modificando a DACL para um serviço.
Quando um processo usa a função OpenService, o sistema verifica os direitos de acesso solicitados no descritor de segurança do objeto de serviço.
Conceder certos direitos de acesso a usuários não confiáveis (como SERVICE_CHANGE_CONFIG ou SERVICE_STOP) pode permitir que eles interfiram na execução do serviço e, possivelmente, permitir que eles executem aplicativos na conta localsystem.
Quando função EnumServicesStatusEx for chamada, se o chamador não tiver o direito de acesso SERVICE_QUERY_STATUS a um serviço, o serviço será silenciosamente omitido da lista de serviços retornados ao cliente.