El mejor método de seguridad para el acceso SSH

1

Recientemente he empezado a pensar en la seguridad un poco más en profundidad y he recibido algunas preguntas sobre las que realmente valoraría las opiniones.

Durante años he tenido el mismo SSH Keypair para acceder a mis propios servidores, github, etc. He asegurado mi clave privada y la he mantenido de esa manera. Tengo la clave privada entre varias máquinas, portátil de trabajo, portátil privado y dispositivo móvil. Ahora, aunque no veo esto como un problema porque nunca sé desde dónde debo conectarme para resolver problemas, etc. Recientemente, mientras leía algunos blogs sobre cómo un empleador sin escrúpulos escaneaba y recolectaba claves privadas en sus computadoras portátiles de empleados, me hizo pensar en quién potencialmente podría tener acceso a mis máquinas. mi empleador actual hace una copia de seguridad de sus computadoras portátiles, por lo que, en esencia, mi clave privada podría almacenarse en cualquier lugar de sus sistemas y permitir que cualquier persona que tenga acceso a estos sistemas acceda a mi clave.

Entonces, ¿cuál es la mejor manera de solucionar este problema? Necesito mis llaves en múltiples máquinas / dispositivos, ¿cómo manejo esto y los mantengo a todos seguros? He leído acerca de la separación de claves para dispositivos individuales, servidores y usuarios

  • Usuario1 - > Server1 (1x Keypair)
  • Usuario1 - > Server2 (1x Keypair)
  • Usuario1 - > Server3 (1x Keypair)

Esto realmente no resuelve nada, ya que solo significa más claves para administrar sin apenas beneficios de seguridad.

La siguiente opción sería cambiar los inicios de sesión de autenticación basada en clave a autenticación TOTP (nombre de usuario, contraseña y contraseña de un solo uso basada en el tiempo). Esto eliminaría la necesidad de tener un par de llaves privado, pero aún así permitiría el acceso a mis servidores. Por supuesto, todavía necesitaría claves para sitios como GitHub, etc.

¿Alguien tiene alguna otra opinión sobre esto?

    
pregunta Tony 27.01.2016 - 15:14
fuente

5 respuestas

2

Puede cifrar su archivo de clave y ssh le pedirá que descifre la contraseña cuando se conecte a su servidor.

ssh-keygen -p [-f keyfile]

ssh-keygen solicitará una contraseña utilizada para cifrar la clave.

    
respondido por el maowtm 27.01.2016 - 15:28
fuente
0

Incluso con la frase de contraseña, es probable que sea una cuestión de tiempo antes de que se descifre. También tendrás que integrar el servicio totp, que podría no ser posible si no eres el administrador. Desafortunadamente la rotación de llaves se convierte en una necesidad.

    
respondido por el Munchen 27.01.2016 - 16:56
fuente
0

Si bien no hay nada que pueda imaginar que lo proteja de una persona realmente determinada con acceso de administrador a sus máquinas, una alternativa a las frases de acceso de los archivos almacenados localmente es usar una tarjeta inteligente: hay soporte en PuTTY, WinSCP y para ssh / scp / sftp en Linux y probablemente también otro sistema operativo.

    
respondido por el symcbean 27.01.2016 - 17:42
fuente
0

Continuando con mi obsesión por los tokens de hardware y los dispositivos NEO de YubiKey, generé una clave GPG en el token, exporté la clave pública y usé gpgkey2ssh para convertirlo al formato que se encuentra en mi archivo authorized_keys .

En lugar de usar ssh-agent para descifrar mi archivo clave del disco, conecto mi token de seguridad y uso gpg-agent . El acceso ahora requiere que la clave se encuentre físicamente en la computadora y no se pueda copiar.

Totalmente compatible con GitHub, no requiere cambios en la configuración del servidor que no sea la rotación de la llave, y requiere la instalación mínima de gpg-agent para utilizarla en el cliente.

En cuanto a la necesidad de la clave en varias máquinas, use el reenvío del agente ( ssh -A ) para mantener ese beneficio de acceso temporal de requerir que el token de hardware esté en su lugar.

    
respondido por el Jeff Ferland 27.01.2016 - 18:35
fuente
0

Uso una clave por computadora cliente, y todos los servidores remotos a los que necesito acceder tienen una o más líneas en su archivo authorized_keys , dependiendo de a qué clientes se les debe permitir el acceso.

Entonces, si tiene una computadora portátil doméstica, una móvil doméstica y una computadora portátil de trabajo, cada una de ellas tendrá un par de llaves. Luego, carga cada clave pública en cada computadora remota a la que se le debe permitir el acceso a cada una de ellas. Por ejemplo, el servidor al que presiona las copias de seguridad de su hogar probablemente obtendría la clave pública de ambas computadoras domésticas, pero no su computadora de trabajo; un servidor web que admita para el trabajo, pero que necesite acceder desde su teléfono móvil cuando esté de guardia obtendrá las claves públicas para su computadora portátil de trabajo y su teléfono móvil.

Ahora has creado un nuevo problema para ti: administración de claves. Pero mientras el número de computadoras cliente siga siendo pequeño, puede administrarlo manualmente.

Cada vez que aprovisione una computadora nueva, parte de su configuración ahora es crear un nuevo par de llaves para ella y presionar la clave pública (probablemente usando una de las computadoras existentes) a todos los servidores que debería poder administrar. Cuando retira una computadora, sale y elimina todas sus claves públicas (si la retira "de forma segura" y la clave privada se destruye, esto puede no ser una tarea urgente). Cuando una computadora ya no es de confianza (por ejemplo, se da cuenta de que las claves de su computadora de trabajo han sido respaldadas aunque intentó prevenirla, y luego accidentalmente buscó en Google la frase de contraseña que las protege), puede eliminar la clave pública de esa computadora en todas partes y generar una nuevo par de llaves para esa computadora.

    
respondido por el drewbenn 27.01.2016 - 19:15
fuente

Lea otras preguntas en las etiquetas