Protegendo credenciais na configuração do estado desejado usando certificados

8

Eu sou novo no DSC e estou tentando descobrir como fazê-lo funcionar para nós.

O que eu estou preso é como as credenciais são realmente protegidas. Meu entendimento atual é que não é tão bom assim.

Os três grandes problemas são esses. Como o uso de uma chave pública como fonte de descriptografia realmente protege essas credenciais? Quais computadores precisam do certificado em cenários de envio e recepção? Quais são as melhores práticas para lidar com credenciais à luz desses problemas?

Usar uma chave pública de um certificado é bom para autenticar a fonte de uma transmissão. Mas usá-lo como uma chave de descriptografia significa que o acesso à chave pública do certificado determina o acesso à senha.

Se você precisar enviar o certificado para todos os computadores que precisam descriptografar arquivos MOF, o que existe para impedir que usuários comuns obtenham acesso ao certificado e possam descriptografar o MOF? Dizer segurança do diretório ativo significa que você também pode deixá-lo em texto sem formatação e apenas confiar na segurança do AD.

Alguém pode me ajudar a entender isso?

Simon Gill
fonte

Respostas:

11

A idéia básica

  1. O host a ser configurado deve ter um certificado instalado (com chave privada).
  2. Ao configurar o LCM (gerenciador de configuração local) do nó de destino, você deve especificar a impressão digital desse mesmo certificado. Isso informa ao LCM qual certificado local (ou com mais precisão qual chave privada do certificado) será usado para descriptografar a credencial.
  3. Sua configuração DSC deve apontar para um arquivo que contém apenas o certificado (chave pública) desse mesmo certificado. Isso é feito nos dados de configuração, para que você possa especificar um certificado diferente para cada nó, se pretender usar a mesma configuração para cada um.
  4. Quando o MOF é gerado, a chave pública é usada pela máquina que gera o MOF para codificar a credencial.
  5. Quando o LCM no nó de destino recupera a configuração do servidor pull (no formato MOF), ele usa a chave privada do certificado identificado pela impressão digital para descriptografar o objeto de credencial.

Em Alguns Detalhes

A chave pública não pode ser usada para descriptografar e você não está compartilhando a chave privada com a geração de configuração nem as máquinas de distribuição.

Parece que você está considerando o fluxo de trabalho como se houvesse um único certificado em uso para todas as credenciais. Você poderia fazer isso, mas acho que a ideia é que cada nó tenha seu próprio par de chaves.

"Usuários médios", que eu entendo como usuários não administrativos, não podem exportar a chave privada de um certificado (a menos que sejam concedidas as permissões) e, como você não moverá essa chave, há poucas chances de sendo exposto. Se o usuário é administrador, é claro que ele tem acesso.

É muito mais provável que o armazenamento de credenciais de texto sem formatação em uma configuração seja exposto, seja por meio da configuração do powershell não processada ou do MOF gerado. Se não estiver criptografado, você precisará proteger:

  • O local do compartilhamento de sistema de arquivos / rede em que a configuração está armazenada
  • O fs / compartilhamento em que os MOFs gerados são armazenados
  • O fs / share em que você armazena os MOFs no servidor pull
  • Verifique se o servidor pull está executando sobre SSL (você deve fazer isso de qualquer maneira)
  • Verifique se há autenticação no servidor Pull, caso contrário, qualquer consulta anônima poderá recuperar uma configuração com credenciais expostas.

Acho que as credenciais seguras no DSC são feitas de maneira bastante agradável, mas é um pouco difícil provar isso inicialmente.

O AD PKI facilita isso

Se você estiver usando a Enterprise PKI em seu ambiente do AD, há uma boa chance de que cada máquina esteja configurada para registro automático na CA. Portanto, ele já possui um certificado específico da máquina que se renova. Possui as configurações necessárias para serem usadas para esse fim.

Como estou implementando isso

Como as ferramentas estão tão vazias para o DSC agora, é provável que você crie seu próprio fluxo de trabalho para gerar configurações e escrever scripts para ajudar de qualquer maneira.

No meu caso, tenho scripts separados para gerar o meta MOF do LCM e para gerar a configuração real do nó, portanto, minhas etapas para proteger credenciais são divididas entre os dois.

No script de geração do LCM, na verdade, consultei o CA para o domínio para encontrar o certificado que corresponde ao nome do host da máquina que está sendo configurada. Recupero o certificado (a CA não possui a chave privada, apenas o público) e o salvo em um caminho para uso posterior. O meta MOF é configurado para usar a impressão digital do certificado.

No script de configuração do nó, defino os dados de configuração para usar o arquivo cert (novamente apenas chave pública). Quando o MOF é gerado, as credenciais são criptografadas com esse certificado e só podem ser descriptografadas com a chave privada no nó específico.

Referência

Mencionei minha própria experiência acima, mas este artigo foi uma grande ajuda ao longo do caminho: https://devblogs.microsoft.com/powershell/want-to-secure-credentials-in-windows-powershell-desired-state- configuração

Eu tive que preencher alguns dos buracos. Uma coisa a observar nos exemplos que mostram é que eles fornecem o Thumprintna configuração do nó. Isso não é necessário para a configuração do nó; eles estão apenas gerando a configuração e a meta-configuração do LCM ao mesmo tempo e usando os dados de configuração para armazenar a impressão digital para uso lá.

Esse último parágrafo pode ser confuso, mas faz mais sentido no contexto do artigo. Se você não está gerando as duas configurações ao mesmo tempo, o exemplo delas parece estranho. Eu testei; Thumbprintnão é necessário nos dados de configuração para criptografar credenciais. CertificateFileé necessário, porém, e deve estar nos dados de configuração; portanto, se você não estava usando dados de configuração antes, estará agora.

briantist
fonte