Prescribimos un procedimiento para el acceso de emergencia a hosts SSH con claves de hardware

Prescribimos un procedimiento para el acceso de emergencia a hosts SSH con claves de hardware

En esta publicación, desarrollaremos un procedimiento para el acceso de emergencia a hosts SSH utilizando claves de seguridad de hardware sin conexión. Este es sólo un enfoque y puede adaptarlo a sus necesidades. Almacenaremos la autoridad de certificación SSH para nuestros hosts en la clave de seguridad del hardware. Este esquema funcionará en casi cualquier OpenSSH, incluido SSH con inicio de sesión único.

¿Para qué es todo esto? Bueno, esta es una opción de último recurso. Esta es una puerta trasera que le permitirá acceder a su servidor cuando, por alguna razón, nada más funciona.

¿Por qué utilizar certificados en lugar de claves públicas/privadas para el acceso de emergencia?

  • A diferencia de las claves públicas, los certificados pueden tener una vida útil muy corta. Puede generar un certificado que sea válido por 1 minuto o incluso 5 segundos. Después de este período, el certificado quedará inutilizable para nuevas conexiones. Esto es ideal para acceso de emergencia.
  • Puede crear un certificado para cualquier cuenta en sus hosts y, si es necesario, enviar dichos certificados "únicos" a sus colegas.

Que necesitas

  • Claves de seguridad de hardware que admiten claves residentes.
    Las claves residentes son claves criptográficas que se almacenan íntegramente dentro de la clave de seguridad. En ocasiones están protegidos por un PIN alfanumérico. La parte pública de la clave residente se puede exportar desde la clave de seguridad, opcionalmente junto con el identificador de clave privada. Por ejemplo, las memorias USB de la serie Yubikey 5 admiten claves residentes y se recomienda que estén destinadas únicamente al acceso de emergencia al host. Para esta publicación solo usaré una clave, pero deberías tener una adicional como respaldo.
  • Un lugar seguro para guardar esas llaves.
  • OpenSSH versión 8.2 o superior en su computadora local y en los servidores a los que desea tener acceso de emergencia. Ubuntu 20.04 se envía con OpenSSH 8.2.
  • (opcional, pero recomendado) Una herramienta CLI para verificar certificados.

Formación

Primero, debe crear una autoridad de certificación que se ubicará en la clave de seguridad del hardware. Inserta la clave y ejecuta:

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

Como comentario (-C) indiqué [email protected]para que no olvides a qué clave de seguridad pertenece esta autoridad certificadora.

Además de agregar la clave al Yubikey, se generarán dos archivos localmente:

  1. sk-user-ca, un identificador de clave que hace referencia a la clave privada almacenada en la clave de seguridad,
  2. sk-user-ca.pub, que será la clave pública de su autoridad certificadora.

Pero no te preocupes, Yubikey almacena otra clave privada que no se puede recuperar. Por tanto, aquí todo es fiable.

En los hosts, como root, agregue (si aún no lo ha hecho) lo siguiente a su configuración SSHD (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

Luego, en el host, agregue la clave pública (sk-user-ca.pub) a /etc/ssh/ca.pub

Reinicie el demonio:

# /etc/init.d/ssh restart

Ahora podemos intentar acceder al host. Pero primero necesitamos un certificado. Cree un par de claves que se asociará con el certificado:

$ ssh-keygen -t ecdsa -f emergency

Certificados y pares SSH
A veces resulta tentador utilizar un certificado como sustituto de un par de claves pública/privada. Pero un certificado por sí solo no es suficiente para autenticar a un usuario. Cada certificado también tiene una clave privada asociada. Es por eso que necesitamos generar este par de claves de "emergencia" antes de emitirnos un certificado. Lo importante es que mostremos el certificado firmado al servidor, indicando el par de claves del que tenemos una clave privada.

Así que el intercambio de claves públicas sigue vivo y coleando. Esto funciona incluso con certificados. Los certificados simplemente eliminan la necesidad de que el servidor almacene claves públicas.

A continuación, cree el certificado. Necesito autorización de usuario de Ubuntu en un intervalo de 10 minutos. Puedes hacerlo a tu manera.

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

Se le pedirá que firme el certificado con su huella digital. Puede agregar nombres de usuario adicionales separados por comas, por ejemplo -n ubuntu,carl,ec2-user

Eso es todo, ¡ahora tienes un certificado! A continuación debe especificar los permisos correctos:

$ chmod 600 emergency-cert.pub

Después de esto, podrá ver el contenido de su certificado:

$ step ssh inspect emergency-cert.pub

Así es como se ve el mío:

emergency-cert.pub
        Type: [email protected] 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

Aquí la clave pública es la clave de emergencia que creamos y sk-user-ca está asociada con la autoridad de certificación.

Finalmente estamos listos para ejecutar el comando SSH:


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

  1. Ahora puede crear certificados para cualquier usuario en un host que confíe en su autoridad de certificación.
  2. Puedes eliminar la emergencia. Puede guardar sk-user-ca, pero no es necesario ya que también está en la clave de seguridad. También es posible que desees eliminar la clave pública PEM original de tus hosts (por ejemplo en ~/.ssh/authorized_keys para el usuario de ubuntu) si la usaste para acceso de emergencia.

Acceso de emergencia: plan de acción

Pegue la clave de seguridad y ejecute el comando:

$ ssh-add -K

Esto agregará la clave pública y el descriptor de clave de la autoridad certificadora al agente SSH.

Ahora exporte la clave pública para crear un certificado:

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

Cree un certificado con una fecha de vencimiento de, por ejemplo, no más de una 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

Y ahora SSH nuevamente:

$ ssh -i emergency username@host

Si su archivo .ssh/config está causando algunos problemas al conectarse, puede ejecutar ssh con la opción -F none para evitarlo. Si necesita enviar un certificado a un colega, la opción más sencilla y segura es Agujero de gusano mágico. Para hacer esto, solo necesita dos archivos: en nuestro caso, emergencia y emergencia-cert.pub.

Lo que me gusta de este enfoque es el soporte de hardware. Puedes guardar tus llaves de seguridad en una caja fuerte y no irán a ninguna parte.

Sobre los derechos de publicidad

Servidores épicos - es VPS barato con potentes procesadores de AMD, frecuencia del núcleo de la CPU de hasta 3.4 GHz. La configuración máxima le permite resolver casi cualquier problema: 128 núcleos de CPU, 512 GB de RAM, 4000 GB NVMe. ¡Únete a nosotros!

Prescribimos un procedimiento para el acceso de emergencia a hosts SSH con claves de hardware

Fuente: habr.com

Añadir un comentario