Administración de llaves SSH para aplicaciones
-
Upload
rodolfo-pilas -
Category
Software
-
view
165 -
download
1
description
Transcript of Administración de llaves SSH para aplicaciones
Presentación de manejo de llaves SSH y cómo asegurarlas cuando son utilizadas por aplicaciones.
(nivel inicial-intermedio)
1. 01 - Validando destino2. 02 - Validando orígen3. 03 - Resumen esquema de seguridad (estándar)4. 04 - Uso ssh para comandos remotos5. 05. Automatizar mis procesos y la seguridad6. 06. Asegurar en destino7. 07. Resumen esquema de seguridad para aplicaciones
Rodolfo Pilas @pilasguru http://pilas.guru [email protected]
.
01 - Validando destino( asignando confianza en mi usuario de origen para conectar en el servidor como el usuario destino )
$ ssh [email protected]
The authenticity of host '104.131.165.19 (104.131.165.19)' can't be established.RSA key fingerprint is f7:d1:2c:22:9c:f3:2d:2a:fc:be:9f:ec:2b:2f:e8:cd.Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '104.131.165.19' (RSA) to the list of known hosts.
Linux techmeetupUY 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64
root@techmeetupUY:~#
Archivo ~/.ssh/known_hosts contiene la llave publica del servidor destino y verificará el destino cada vez que volvamos a conectarnos.
Si nos conectamos al mismo destino y no verifica:
$ ssh [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that a host key has just been changed.The fingerprint for the RSA key sent by the remote host is8e:8b:7e:7b:35:2d:99:92:ce:3c:77:86:33:86:8b:85.Please contact your system administrator.Add correct host key in /Users/rodolfo/.ssh/known_hosts to get rid of this message.Offending RSA key in /Users/rodolfo/.ssh/known_hosts:1280RSA host key for 104.131.165.19 has changed and you have requested strict checking.Host key verification failed.
Si estamos seguros que el servidor está correcto (sabemos por qué cambiaron las llaves SSH) podemos borrar del ~/.ssh/know_hosts la llave publica “vieja” y volver a conectar para proceder a registrar con YES la nueva clave pública del servidor.
02 - Validando orígenMap
( asignando confianza a mi usuario origen para ingresar como el usuario destino en el servidor )
$ ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.Enter passphrase (empty for no passphrase):Enter passphrase (empty for no passphrase):Enter same passphrase again:Enter same passphrase again:Your identification has been saved in id_ecdsa.Your public key has been saved in id_ecdsa.pub.The key fingerprint is:e4:5b:0c:c3:51:1d:13:0c:58:b7:f6:e7:80:8e:55:d7 rodolfo@barbieThe key's randomart image is:+--[ECDSA 256]---+| .+++=o || ... .oo .|| = o . E|| o + . + . || S o o o .|| o + + || . . . .|| || |+-----------------+
Llave Privada:$ ls -l ~/.ssh/id_ecdsa-rw------- 1 rodolfo staff 396 Jun 9 01:14 /Users/rodolfo/.ssh/id_ecdsa
Llave Pública:$ ls -l ~/.ssh/id_ecdsa.pub-rw-r--r-- 1 rodolfo staff 396 Jun 9 01:14 /Users/rodolfo/.ssh/id_ecdsa.pub
Copiar la llave pública al servidor y agregarla en el home de usuario destino ~/.ssh/authorized_keys
$ ssh-copy-id [email protected]
[email protected]'s password:
Now try logging into the machine, with "ssh '[email protected]", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
(los servicios en la nube ya hacen esto automáticamente al crear una instancia)
03 - Resumen esquema de seguridad (estándar)Map
Valido el destino cada conexiónSe cifra el tráfico (RFC-4419)
Mi usuario autentica con el usuario destino mediante mi llave privadaLlave privada con seguridad discreta por permisos archivo ("lo que tengo”)Llave privada con seguridad alta por passphrase (“lo que se”)
04 - Uso ssh para comandos remotosMapAparte de login en el servidor remoto puedo ejecutar comandos desde mi sesión local:$ ssh [email protected] cat /proc/cpuinfo
processor : 0vendor_id : GenuineIntelcpu family : 6model : 62model name : Intel(R) Xeon(R) CPU E5-2630L v2 @ 2.40GHzstepping : 4microcode : 0x1cpu MHz : 2399.998cache size : 15360 KBfpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc up arch_perfmon rep_good nopl pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm xsaveopt vnmi ept fsgsbase smep ermsbogomips : 4799.99clflush size : 64cache_alignment : 64address sizes : 40 bits physical, 48 bits virtualpower management:
$ _
La salida estándar de los comandos ejecutados remotamente es mi STDOUT, los puedo entubar (pipe)$ ssh [email protected] cat /proc/cpuinfo | grep "model name"
model name : Intel(R) Xeon(R) CPU E5-2630L v2 @ 2.40GHz
$_
Por lo tanto puedo empezar a hacer cosas interesantes:$ ssh [email protected] "tar czf - /etc/passwd" | cat > passwd.server19.tgztar: Removing leading `/' from member names$ _
$ tar tzvf passwd.server19.tgz-rw-r--r-- 0 root root 1027 Nov 15 00:40 etc/passwd$ _
05. Automatizar mis procesos y la seguridadMap
Automatizar mis procesos por SSH resulta en un compromiso de seguridad:
Quitar la passphrase -> seguridad 100% sobre archivo de llave privada
06. Asegurar en destino (llaves sin passphrase)MapEn llavero remoto tengo colección la llaves publicas:
$ cat ~/.ssh/authorized_keys
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDFI8yIG6zkMj4BOOecxZYS4p5Mp7Ozjtd1lo8bgAQCEQvGP7d6IPbR6DfrW8tcwCdd1UUYhFhfdFSyLwir8+8E= rodolfo@origen
Asegurar orígen:
$ cat ~/.ssh/authorized_keys
from=204.23.11.12from=204.23.11.12 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDFI8yIG6zkMj4BOOecxZYS4p5Mp7Ozjtd1lo8bgAQCEQvGP7d6IPbR6DfrW8tcwCdd1UUYhFhfdFSyLwir8+8E= rodolfo@origen
Asegurar comando:
$ cat ~/.ssh/authorized_keys
from=204.23.11.12,command="/bin/tar czf - /etc/paswd"command="/bin/tar czf - /etc/paswd" ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDFI8yIG6zkMj4BOOecxZYS4p5Mp7Ozjtd1lo8bgAQCEQvGP7d6IPbR6DfrW8tcwCdd1UUYhFhfdFSyLwir8+8E= rodolfo@origen
$ ssh [email protected] “ls" | cat > passwd.server19.tgztar: Removing leading `/' from member names$ _
Asegurar del todo:
$ cat ~/.ssh/authorized_keys
from=204.23.11.12,command="/bin/tar czf - /etc/paswd”,no-pty,no-agent-from=204.23.11.12,command="/bin/tar czf - /etc/paswd”,no-pty,no-agent-forwarding,forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc no-port-forwarding,no-X11-forwarding,no-user-rc ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDFI8yIG6zkMj4BOOecxZYS4p5Mp7Ozjtd1lo8bgAQCEQvGP7d6IPbR6DfrW8tcwCdd1UUYhFhfdFSyLwir8+8E= rodolfo@origen
07. Resumen esquema de seguridad para aplicacionesMap
Valido el destino cada conexiónSe cifra el tráfico (RFC-4419)
Mi usuario autentica con el usuario destino mediante mi llave privadaLlave privada con seguridad discreta por permisos archivo ("lo que tengo”)Llave privada no tiene passphrase
Riesgo de seguridad controlado con:
Llave privada solo aceptada desde servidor origen específicoLlave privada solo permitida para comando específicoLlave privada no valida para login (ni otros usos)
08. Un paso másMap
cert-authority
man sshd
Security of Automated Access Management Using Secure Shell (SSH)NISTIR 7966 (Draft) Agosto 2014National Institute of Standard and Technology (NIST)Automation - Monitoring - Expiration
.