Registramos o procedimento para acesso de emergĂȘncia a hosts SSH com chaves de hardware





Nesta postagem, desenvolveremos um procedimento para acesso de emergĂȘncia a hosts SSH usando chaves de segurança offline. Essa Ă© apenas uma abordagem e vocĂȘ pode adaptĂĄ-la por si mesmo. Armazenaremos a CA SSH para nossos hosts em uma chave de segurança de hardware. Esse esquema funcionarĂĄ em praticamente qualquer OpenSSH, incluindo SSH com logon Ășnico.



Por que tudo isso? Bem, esta Ă© uma opção de Ășltimo recurso. Este Ă© um backdoor que permitirĂĄ acessar seu servidor caso, por algum motivo, nada mais ajude.



Por que usar certificados em vez de chaves pĂșblicas / privadas para acesso de emergĂȘncia?



  • , . , 1 5 . . .
  • ​​ «» .




  • , .

    — , . - PIN-. , — . , , , USB- Yubikey 5. , . , .
  • .
  • OpenSSH 8.2 , . Ubuntu 20.04 OpenSSH 8.2.
  • (opcional, mas desejĂĄvel) ferramenta CLI para verificação de certificados.


Treinamento



Primeiro, vocĂȘ precisa criar uma autoridade de certificação que residirĂĄ na chave de segurança do 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), apontei para yubikey-9-512-742@smallstep.com para não esquecer a qual chave de segurança essa CA pertence.



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 na chave de segurança,
  2. sk-user-ca.pub, que serĂĄ a chave pĂșblica da sua CA.


Mas nĂŁo se preocupe, o Yubikey tem outra chave privada que nĂŁo pode ser recuperada. Portanto, tudo Ă© confiĂĄvel aqui.



Nos hosts como raiz, adicione (se ainda não tiver sido adicionado) à sua configuração SSHD (/ etc / ssh / sshd_config) o seguinte:



TrustedUserCAKeys /etc/ssh/ca.pub


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



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 a ser associado ao certificado:



$ ssh-keygen -t ecdsa -f emergency


Certificados e pares SSH

Às vezes, Ă© tentador usar um certificado como substituto de um par de chaves pĂșblica / privada. Mas para autenticação do usuĂĄrio, um certificado nĂŁo Ă© suficiente. Cada certificado tambĂ©m possui uma chave privada associada. É por isso que precisamos gerar esse par de chaves "de emergĂȘncia" antes de podermos emitir um certificado. O importante Ă© que mostremos o certificado assinado para o servidor, indicando o par de chaves para o qual temos uma chave privada.



Assim, a troca de chaves pĂșblicas ainda estĂĄ viva e bem. Funciona mesmo com certificados. Os certificados simplesmente eliminam a necessidade de o servidor armazenar chaves pĂșblicas.


Em seguida, crie o prĂłprio certificado. Preciso de autorização de usuĂĄrio do ubuntu em 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 sua impressĂŁo digital. VocĂȘ pode adicionar nomes de usuĂĄrio adicionais separados por vĂ­rgulas, por exemplo -n ubuntu, carl, ec2-user



É isso, agora vocĂȘ tem um certificado! Em seguida, vocĂȘ precisa especificar as permissĂ”es corretas:



$ chmod 600 emergency-cert.pub


Depois disso, vocĂȘ pode se familiarizar com o conteĂșdo do seu certificado:



$ step ssh inspect emergency-cert.pub




É assim que a minha se parece:



emergency-cert.pub
        Type: ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate
        Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
        Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
        Key ID: "test-key"
        Serial: 0
        Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
        Principals:
                ubuntu
        Critical Options: (none)
        Extensions:
                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 a CA estĂĄ associada ao 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 confie na sua CA.
  2. VocĂȘ pode remover a emergĂȘncia. VocĂȘ pode manter o sk-user-ca, mas nĂŁo precisa disso, pois tambĂ©m estĂĄ na chave de segurança. VocĂȘ tambĂ©m pode remover a chave pĂșblica PEM original de seus hosts (por exemplo, em ~ / .ssh / allowed_keys para o usuĂĄrio do ubuntu) se a tiver usado 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


Isso adicionarĂĄ a chave pĂșblica e o descritor de chave da CA ao agente SSH.



Agora exporte a chave pĂșblica para fazer o certificado:



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


Crie um certificado com uma data de validade de, 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 SSH novamente:



$ ssh -i emergency username@host


Se o seu arquivo .ssh / config estiver causando problemas de conexĂŁo, vocĂȘ poderĂĄ executar o ssh com a opção -F none. Se vocĂȘ precisar enviar um certificado para um colega, a opção mais fĂĄcil e segura Ă© o Magic Wormhole . Isso requer apenas dois arquivos - no nosso caso, sĂŁo emergency e emergency-cert.pub.



O que eu amo nessa abordagem Ă© o suporte de hardware. VocĂȘ pode colocar as chaves de segurança no cofre e elas nĂŁo irĂŁo a lugar algum.






Publicidade



Servidores Ă©picos sĂŁo VPS baratos com processadores poderosos da AMD, freqĂŒĂȘncia de nĂșcleo da CPU de atĂ© 3,4 GHz. A configuração mĂĄxima permite resolver praticamente qualquer problema - 128 nĂșcleos de CPU, 512 GB RAM, 4000 GB NVMe. Junte-se a nĂłs!






All Articles