administración de llaves ssh para aplicaciones

5
Presentación de manejo de llaves SSH y cómo asegurarlas cuando son utilizadas por aplicaciones. (nivel inicial-intermedio) 1. 01 - Validando destino 2. 02 - Validando orígen 3. 03 - Resumen esquema de seguridad (estándar) 4. 04 - Uso ssh para comandos remotos 5. 05. Automatizar mis procesos y la seguridad 6. 06. Asegurar en destino 7. 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 is 8e: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:1280 RSA 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.

Upload: rodolfo-pilas

Post on 03-Jul-2015

163 views

Category:

Software


1 download

DESCRIPTION

Administración de llaves SSH cuando son utilizadas por aplicaciones. Se refiere principalmente a como lograr asegurar el uso de llaves.

TRANSCRIPT

Page 1: 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.

Page 2: Administración de llaves SSH para aplicaciones

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)

Page 3: Administración de llaves SSH para aplicaciones

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$ _

Page 4: Administración de llaves SSH para aplicaciones

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

Page 5: Administración de llaves SSH para aplicaciones

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

.