Escrevendo o procedimento de acesso de emergência a hosts SSH com chaves de hardware

Escrevendo o procedimento de acesso de emergência a hosts SSH com chaves de hardware

Neste post, vamos desenvolver um procedimento para acesso de emergência a hosts SSH, utilizando chaves de segurança de hardware offline. Este é apenas um dos métodos, e você pode adaptá-lo conforme necessário. Vamos armazenar a autoridade certificadora SSH para nossos hosts em uma chave de segurança de hardware. Este esquema funcionará em praticamente qualquer OpenSSH, incluindo SSH com login único.

Por que tudo isso? Bem, é uma opção para situações extremas. É uma porta dos fundos que permitirá que você acesse seu servidor caso, por algum motivo, nada mais funcione.

Por que usar certificados em vez de chaves públicas / privadas para acesso de emergência?

  • Ao contrário das chaves públicas, os certificados podem ter um período de validade muito curto. Você pode gerar um certificado válido por 1 minuto ou até mesmo 5 segundos. Após esse prazo, o certificado não será mais válido para novas conexões. Isso é perfeito para acesso de emergência.
  • Você pode criar um certificado para qualquer conta em seus hosts e, se necessário, enviar esses certificados 'de uso único' para seus colegas.

O que você vai precisar

  • Chaves de segurança de hardware que suportam chaves residentes.
    Chaves residentes são chaves criptográficas que são totalmente armazenadas dentro da chave de segurança. Às vezes, elas são protegidas por um PIN alfanumérico. A parte pública da chave residente pode ser exportada da chave de segurança, se necessário, juntamente com o descritor da chave privada. O suporte a chaves residentes é fornecido, por exemplo, por pen drives da série Yubikey 5. É desejável que sejam destinados apenas para acesso de emergência ao host. Para este post, usarei apenas uma chave, mas você deve ter uma adicional para backup.
  • Um local seguro para armazenar essas chaves.
  • OpenSSH versão 8.2 ou superior em seu computador local e nos servidores aos quais você deseja acessar em emergência. O Ubuntu 20.04 vem com OpenSSH 8.2.
  • (opcional, mas recomendado) Ferramenta de CLI para verificar certificados.

Preparação

Para começar, você precisa criar uma autoridade certificadora, que será armazenada na chave de segurança de hardware. Insira a chave e execute:

$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]

Como comentário (-C) eu indiquei yubikey-9-512-742@smallstep.com para não me esquecer a qual chave de segurança este centro de certificação está relacionado.

Além de adicionar a chave ao Yubikey, dois arquivos serão gerados localmente:

  1. sk-user-ca, um descritor de chave que se refere à chave privada armazenada no dispositivo de segurança,
  2. sk-user-ca.pub, que será a chave pública para o seu centro de certificação.

Mas não se preocupe, outra chave privada está armazenada no Yubikey que não pode ser extraída. Portanto, está tudo seguro aqui.

Nos hosts sob o nome de usuário root, adicione (caso ainda não tenha adicionado) à configuração do seu SSHD (/etc/ssh/sshd_config) o seguinte:

TrustedUserCAKeys /etc/ssh/ca.pub

Em seguida, adicione a chave pública (sk-user-ca.pub) ao /etc/ssh/ca.pub no host

Reinicie o daemon:

# /etc/init.d/ssh restart

Agora podemos tentar acessar o host. Mas primeiro, precisamos de um certificado. Crie um par de chaves que estará vinculado ao certificado:

$ ssh-keygen -t ecdsa -f emergency

Certificados e pares de SSH
Às vezes, é tentador usar um certificado como substituto de um par de chave pública / chave privada. Mas para a autenticação do usuário, um único certificado não é suficiente. Cada certificado também possui uma chave privada associada a ele. É por isso que precisamos gerar este par de chaves "emergenciais" antes de emitirmos um certificado para nós mesmos. A parte importante é que o certificado assinado é apresentado ao servidor, indicando o par de chaves para o qual temos a chave privada.

Dessa forma, a troca de chaves públicas ainda está viva e saudável. Isso até funciona com certificados. Os certificados simplesmente livram o servidor da necessidade de armazenar chaves públicas.

A seguir, crie o próprio certificado. Preciso da autorização do usuário ubuntu dentro de um intervalo de 10 minutos. Você pode fazer do seu jeito.

$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency

Você será solicitado a assinar o certificado com a impressão digital. Você pode adicionar nomes de usuários adicionais, separados por vírgulas, como -n ubuntu,carl,ec2-user

Isso é tudo, agora você possui um certificado! A próxima etapa é definir as permissões corretas:

$ chmod 600 emergency-cert.pub

Depois disso, você pode verificar o conteúdo do seu certificado:

$ step ssh inspect emergency-cert.pub

Aqui está como o meu se parece:

emergency-cert.pub
        Tipo: ecdsa-sha2-nistp256-cert-v01@openssh.com certificado do usuário
        Chave pública: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
        CA de assinatura: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
        ID da chave: "test-key"
        Serial: 0
        Válido: de 2020-06-24T16:53:03 até 2020-06-24T17:03:03
        Principais:
                ubuntu
        Opções Críticas: (nenhuma)
        Extensões:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc

Aqui, a chave pública é a chave de emergência que criamos, e ela está vinculada à CA sk-user-ca.

Finalmente, estamos prontos para executar o comando SSH:


$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$

  1. Agora você pode criar certificados para qualquer usuário no host que confia na sua CA.
  2. Você pode excluir emergency. Você pode manter sk-user-ca, mas não precisa, pois também está na chave de segurança. Você pode também querer remover a chave pública PEM original dos seus hosts (por exemplo, em ~/ .ssh/authorized_keys para o usuário ubuntu), se você a utilizou para acesso de emergência.

Acesso de Emergência: Plano de Ação

Insira a chave de segurança e execute o comando:

$ ssh-add -K

Assim, você adicionará a chave pública da CA e o descritor da chave ao agente SSH.

Agora exporte a chave pública para criar o certificado:

$ ssh-add -L | tail -1 > sk-user-ca.pub

Crie um certificado com um tempo de validade, por exemplo, não mais que uma hora:

$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub

E agora novamente SSH:

$ ssh -i emergency username@host

Se seu arquivo .ssh/config causar algum problema ao se conectar, você pode executar ssh com a opção -F none para ignorá-lo. Se precisar enviar o certificado para um colega, a maneira mais simples e segura é Magic Wormhole. Para isso, você precisará de apenas dois arquivos — neste caso, são emergency e emergency-cert.pub.

O que gosto nesse método é o suporte de hardware. Você pode guardar as chaves de segurança em um cofre, e elas não vão a lugar nenhum.

Em nome da publicidade

Servidores épicos seja VPS baratos com potentes processadores da AMD, frequência do núcleo de CPU até 3,4 GHz. A configuração máxima permite resolver praticamente qualquer tarefa — 128 núcleos de CPU, 512 GB de RAM, 4000 GB de NVMe. Junte-se a nós!

Escrevendo o procedimento de acesso de emergência a hosts SSH com chaves de hardware

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster