Windows - Use a conta Serviço local e / ou Serviço de rede para um serviço Windows

18

Eu criei o serviço de uma janela que monitora arquivos em um diretório específico em nosso sistema operacional Windows. Quando um arquivo é detectado, o serviço realiza alguma E / S de arquivo, lê os arquivos, cria subdiretórios etc. Esse serviço também usa a conectividade do banco de dados para conectar-se a outro servidor. Meu plano é que o serviço seja executado como a conta "Serviço local" padrão. Como preciso permitir privilégios de gravação / leitura, que aparentemente a conta "Serviço local" não faz por padrão, vou definir explicitamente privilégios de "Controle total" para a conta "Serviço local" na pasta em que estou leitura / gravação de e para.

Eu acredito que o acima é um bom. Minha pergunta é: para a pasta em que estou lendo e gravando, preciso configurar uma função "Serviço de Rede" com acesso total ao controle? Estou pensando em como meu serviço usa conectividade de banco de dados com outro servidor, se vou precisar da configuração da conta "Serviço de Rede".

Talvez eu esteja entendendo mal o que a conta "Serviço de Rede" faz.

contactmatt
fonte

Respostas:

18

A NT AUTHORITY\NetworkServiceconta é necessária apenas quando você está se comunicando com outros computadores em um domínio que precisa das credenciais da sua máquina para controle de acesso. Não é necessário para o acesso simples à Internet / rede. É necessário apenas para fins específicos em um domínio do Active Directory.

Além disso, o ponto principal da NT AUTHORITY\LocalServiceconta é que ela possui privilégios mínimos no sistema. A concessão de mais privilégios diminui a segurança de muitos serviços em seu sistema, projetados para serem executados no nível de privilégios baixo que foram projetados para oferecer. Se o seu serviço exigir privilégios acima e além desses, você deve criar uma nova conta para ele com os privilégios necessários e configurá-la na guia Logon das propriedades do serviço. (Isso também pode ser feito através de programação.)

Você também pode executá-lo usando a NT AUTORITY\LocalSystemconta , que tem acesso ilimitado ao seu sistema, mas suponho que você queira usar a LocalServiceconta para aumentar a segurança que ela oferece.

Patches
fonte
1
Como o controle total da conta LocalService em uma pasta (e subpastas) diminui a segurança dos outros serviços?
contactmatt
1
@ user19185 Não diminui a segurança em si , mas aumenta o perfil de ataque. Se um serviço em execução LocalServiceestiver comprometido, ele terá acesso a qualquer coisa que você abriu LocalService, enquanto que normalmente ele não terá acesso a nada. Esse é um procedimento operacional de segurança de computador padrão desde os anos 70 .
Patches
1
Só quero salientar que LocalSystemtem mais direitos e privilégios do que contas de administrador regulares.
Stein Åsmul
@Stein Åsmul: obrigado pela correção! Eu atualizei minha resposta para refletir isso.
Patches
2

A resposta anterior não pareceu abordar as perguntas diretamente, então pensei em adicioná-la.

  1. Meu plano é que o serviço seja executado como a conta "Serviço local" padrão. Vou definir explicitamente privilégios de "Controle total" para a conta "Serviço local" na pasta na qual estou lendo / gravando. Eu acredito que o acima é um bom plano.

Pessoalmente, não vejo um grande problema com este plano. Com BUILTINs, a escolha é entre:

  1. Executando como LOCALSYSTEM - portanto, se esse serviço for comprometido, o invasor será o proprietário de Tudo e imediatamente.
  2. Executando como LOCALSERVICE - portanto, se este serviço, ou qualquer um dos muitos outros serviços executados sob esta conta, estiver comprometido, o invasor terá acesso a um diretório extra. *

Sem dúvida, é preferível adicionar algumas ACLs extras para poder usar a segunda opção. Sim, a opção mais segura para um serviço de baixo privilégio, mas altamente sensível à segurança, seria executada em uma conta de serviço personalizada e de baixo privilégio. Mas, a menos que você deseje criar uma nova conta / gerenciar senhas para cada serviço implantado, usar o LocalService para tarefas menores não sensíveis não é uma coisa tão terrível. Você só precisa tomar uma decisão responsável com base nessas considerações, como o conteúdo desse diretório ou banco de dados, o impacto se elas forem violadas, etc.

Embora, novamente, de acordo com o princípio do menos privilégio, você só deva definir Full Controlse Modifynão for realmente suficiente.

2. Minha pergunta é: para a pasta em que estou lendo e gravando, preciso configurar uma função "Serviço de Rede" com acesso total ao controle? Estou pensando em como meu serviço usa conectividade de banco de dados com outro servidor, se vou precisar da configuração da conta "Serviço de Rede".

Se seu banco de dados exigisse login no Windows Integrated / SSPI, sim, você precisaria usar o NetworkService (ou uma conta de serviço de domínio) em qualquer lugar, como RunAs e permissões de diretório. Supondo que você também concedeu ao seu nome de computador $ ou acesso à conta de domínio esse banco de dados. Duvido que você esteja fazendo isso, portanto, se ele usa autenticação normal por nome de usuário / senha, você deve poder fazer tudo com o LocalService. Você precisa conceder apenas um direito de conta nesse diretório, o que você usa nos seus RunAs, não ambos.

3.Pode estar entendendo mal o que a conta "Serviço de Rede" faz.

LocalService / NetworkService são contas quase idênticas no computador local. A diferença é principalmente o que eles podem fazer na rede. O NS pode acessar alguns recursos de rede porque eles aparecem na rede como uma conta real (computador). Mas o LS aparecerá como ANÔNIMO; portanto, será negado principalmente tudo na rede.

A propósito, você deve usar uma Tarefa agendada para isso, não um serviço.

* A partir do Vista, devido ao isolamento do serviço , um processo LocalService comprometido não pode facilmente atacar outro. Cada processo / instância de serviço LocalService / NetworkService obtém sua própria SID de sessão de logon exclusiva (proprietário exclusivo), diferente do Windows 2003. Mas não tenho certeza se isso é perfeito e atenua totalmente a vulnerabilidade DACL em arquivos e recursos. SIDs restritos e tokens restritos à gravação são mencionados neste contexto.

Amit Naidu
fonte
2

As outras respostas confirmam o que você diz sobre o uso do Serviço Local. Para resumir, o Serviço Local é a conta recomendada para uso com o seu serviço, a menos que você precise dos recursos extras de SSPI do Active Directory do Serviço de Rede.

Para restringir o acesso de leitura / gravação a uma pasta específica, você pode fazer melhor do que apenas dar acesso à conta genérica do Serviço local. O problema, como outros já apontaram, é que isso também daria acesso de leitura / gravação a todos os outros serviços em execução como Serviço Local e, se todos os serviços fizessem isso, gradualmente, o Serviço Local teria acesso a recursos cada vez mais importantes.

A solução é ACL sua pasta usando seu serviço específico SID. Somente seu próprio processo de serviço tem seu SID de serviço associado, portanto, isso bloqueia ainda mais seus recursos. Você pode visualizar o serviço SID usando sc showsid <service name>. O SID do serviço é gerado a partir do nome do serviço, portanto será o mesmo em todas as máquinas.

Para habilitar o uso do SID do serviço pelo seu serviço, use ChangeServiceConfig2com a SERVICE_SID_INFOestrutura a ser configurada SERVICE_SID_TYPE_UNRESTRICTED. Você também pode definir SERVICE_SID_TYPE_RESTRICTEDum SID ainda mais restrito, que permita apenas o acesso de gravação a recursos explicitamente permitidos com o SID do serviço.

Este link possui as descrições de alto nível dos SIDs de serviço e SIDs de serviço restrito: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = ws.10)

zhuman - MSFT
fonte