mejorando la seguridad del servicio ssh - hardening

28
Mejorando la seguridad del servicio SSH Antonio Ognio [email protected] GRUPO DE USUARIOS DE LINUX DEL PERU -//- FEBRERO 2010

Upload: antonio-ognio

Post on 03-Jul-2015

7.274 views

Category:

Technology


2 download

DESCRIPTION

Una introducción de nivel intermedio al "hardening" o mejoramiento de las políticas que afectan la seguridad de un servicio SSH.Presentada en las reuniones del Grupo de Usuarios de Linux del Perú el mes de Febrero de 2010. Más información en http://www.linux.org.pe

TRANSCRIPT

Page 1: Mejorando la seguridad del servicio SSH - Hardening

Mejorando la seguridaddel servicio SSH

Antonio [email protected]

GRUPO DE USUARIOS DE LINUX DEL PERU -//- FEBRERO 2010

Page 2: Mejorando la seguridad del servicio SSH - Hardening

InstalaciónUbuntu, Debian y distros derivadas:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

$ sudo apt-get install ssh

RHEL, CentOS, Fedora y distros derivadas:

$ sudo yum install ssh

Page 3: Mejorando la seguridad del servicio SSH - Hardening

Uso básico:Acceso a la shell en un servidor remoto:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

usuario@desktop:~$ ssh [email protected]@servidor.com's password:Linux host.servidor.com 2.6.18.8-srv #1 SMP Tue Nov 10 16:12:12 UTC 2009 i686

The programs included with the Ubuntu system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted byapplicable law.

To access official Ubuntu documentation, please visit:http://help.ubuntu.com/Last login: Fri Feb 19 22:27:15 2010 from desktop.empresa.com.peusuario@host:~$

Page 4: Mejorando la seguridad del servicio SSH - Hardening

Otros usos comunes:Ejecutar comandos en un servidor remoto:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

usuario@desktop:~$ ssh mail.miempresa.com "uptime"12:18:15 up 2 days, 1:57, 0 users, load average: 0.00, 0.01, 0.00

Copiar archivos a / desde un servidor remoto:

usuario@desktop:~$ scp -r carpeta1 [email protected]:/ruta

usuario@desktop:~$ scp -r otro.servidor.com:carpeta1 .

Cliente del servicio de FTP seguro (sftp):

usuario@desktop:~$ sftp [email protected] sftp> pwdRemote working directory /home/usuario5sftp> _

Page 5: Mejorando la seguridad del servicio SSH - Hardening

SSH nos permite:● Administrar servidores remotamente por la línea de comandos

● Ejecutar comandos individuales● Iniciar una sesión interactiva

● Transferir archivos● scp (secure copy)● sftp (secure file transfer protocol)

● Abrir túneles● Puerto remoto disponible en un puerto local● Puerto local disponible localmente en servidor remoto

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Page 6: Mejorando la seguridad del servicio SSH - Hardening

Potenciales problemas de seguridad:● Acceso por parte de usuarios no autorizados

● Usuarios de correo que siguen una shell activa● Muchas veces es la misma contraseña

● Ex-trabajadores que aún mantienen una cuenta● Atacante interno que averigua la clave:

● Por ingeniería social (ej. haciéndose pasar por el jefe)● Mirando sobre los hombros del administrador

● Ataques desde Internet● Fuerza bruta (probar muchas contraseñas hasta que ligue)● Exploits del servicio SSH (se aprovecha de bugs)

● SSH es un programa más y puede tener bugs● Man-in-the-middle

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Page 7: Mejorando la seguridad del servicio SSH - Hardening

Detalles por corregir:● Utilizar solo la versión más segura del protocolo

● Deshabilitar el acceso como root● Utilizar sudo para convertirse en root

● Limitar el acceso solo a cuentas autorizadas

● Deshabilitar por completo el uso de contraseñas● Utilizar llaves criptográficas (DSA / RSA)

● Utilizar un puerto distinto● Despistar a muchos atacantes no muy sofisticados

● Advertir adecuadamente a potenciales usuarios no autorizados● Colocar un banner que mencione las leyes locales

● Abrir el puento solo a IPs autorizadas● TCP wrappers● Port knocking● Single Packet Authorization

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Page 8: Mejorando la seguridad del servicio SSH - Hardening

¿Dónde hacer los cambios?

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Respaldamos el actual archivo de configuración:

sudo cp /etc/ssh/sshd_config /etc/ssh/ssd_config.bak

Editamos el archivo de configuración:

sudo vi /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

Page 9: Mejorando la seguridad del servicio SSH - Hardening

Defaults de una buena distro:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Si no los tiene cambiarlos de inmediato:

# Solo el protocolo en su versión 2Protocol 2

# Separación de privilegios en el demonio sshUsePrivilegeSeparation yes

# Venta de tiempo para intentar iniciar sesiónLoginGraceTime 120

# No permitir acceso a carpetas $HOME en las que # terceros usuarios tiene permiso de escrituraStrictModes yes

En Ubuntu y Debian como en otras distros vienen por omisión.

Page 10: Mejorando la seguridad del servicio SSH - Hardening

Escoger quien tiene acceso:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Mejoras a realizar en cualquier sistema UNIX:

Dejamos fuera a usuarios de correo y otros usuarios de UNIX

# Deshabilitar el acceso como root

PermitRootLogin no

# Limitar acceso a solo una lista # de cuentas de usuario o grupos

AllowUsers jperez mgarciaAllowGroups administradores

Page 11: Mejorando la seguridad del servicio SSH - Hardening

Deshabilitar contraseñas:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Eliminamos ataques de fuerza bruta comunes:

# Autenticación usando contraseñasPasswordAuthentication no

# Uso de llaves criptográficasRSAAuthentication yesPubkeyAuthentication yes

# Ruta del archivo con llaves autorizadas por usuarioAuthorizedKeysFile %h/.ssh/authorized_keys

Page 12: Mejorando la seguridad del servicio SSH - Hardening

Generando una llave criptográfica:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Eliminamos ataques de fuerza bruta comunes:

$ ssh-keygen -t dsa

Generating public/private dsa key pair.Enter file in which to save the key (/home/usuario/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/usuario/.ssh/id_dsa.Your public key has been saved in /home/usuario/.ssh/id_dsa.pub.The key fingerprint is:~3d:43:8e:52:ac:e1:8c:97:da:16:d4:9b:37:4d:ba:80 usuario@desktop

IMPORTANTE: Guarda tu llave privada en un lugar seguro

Page 13: Mejorando la seguridad del servicio SSH - Hardening

Observando los archivos generados:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Conozcamos como son las llaves que usa SSH:

$ ls -l .ssh/

total 28-rw-r--r-- 1 usuario usuario 531 2010-02-18 12:00 config-rw------- 1 usuario usuario 668 2008-09-05 15:15 id_dsa-rw-r--r-- 1 usuario usuario 942 2008-09-05 15:15 id_dsa.keystore-rw-r--r-- 1 usuario usuario 604 2008-09-05 15:15 id_dsa.pub-rw-r--r-- 1 usuario usuario 8470 2010-02-20 00:34 known_hosts

$ file .ssh/id_dsa.ssh/id_dsa: PEM DSA private key

$ file .ssh/id_dsa.pub .ssh/id_dsa.pub: ASCII text, with very long lines

Page 14: Mejorando la seguridad del servicio SSH - Hardening

Observando los archivos generados:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Les presento a una llave privada:

$ cat .ssh/id_dsa

-----BEGIN DSA PRIVATE KEY-----MIIBuwIBAAKBgQDp8z4vPh5em02JIoCETf2/HaP7+bfYb315Dl49rcCjH7KTvIinzOub3R1mnJx7E+f+e2hMFX6EVZRSvNLAYN8SnB0NF1SNGj1JirYDiPhFsHfoq+bm2C0KXvExIttkYDwQVTb9gFEGyGAVoaA/2DblQgerJbRUZQpcykCrC2C/FwIVALHRvgAOs7AbwfbLNAnaMp/uhAAxAoGBAKcDS1GmlM8s2qt7vC1/mNHnVAAeh7idI7wvKVsQ/jPkOa/P3mcqYt2HbK62cbTkJDbtc+Vtkun89f+QeBmPdiZ0g7C4E8vnV6RRUXA4lz/NTRXYWwLPJ5dvLnMaL8hmtSx4HhTu1GYtIs1KMJmHd5I+ZHjMiKItuX/oOsK98wRxAoGAUE6qf6rQk5DGJada9jof1Ddpq5GRuDAB4mAbfApp1MRwHeylbIlewvdo8bUNrUIGPdGwXoyzCZogzH5CLgwGtGOE8O816PdE+D6GmthZT+8Wgw9OOV8bnqWMyhN4JQbsiNmtyr6nfYeQegIaoIcP1dAoyT7kM11taoKhSwTQxS0CFBjc2TCcY+vRyigR3p5DKJibmFWA-----END DSA PRIVATE KEY-----

Page 15: Mejorando la seguridad del servicio SSH - Hardening

Observando los archivos generados:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Les presento a una llave pública:

$ cat .ssh/id_dsa.pub

ssh-dss AAAAB3NzaC1kc3MAAACBAOnzPi8+Hl6bTYkigIRN/b8do/v5t9hvfXkOXj2twKMfspO8iKfM65vdHWacnHsT5/57aEwVfoRVlFK80sBg3xKcHQ0XVI0aPUmKtgOI+EWwd+ir5ubYLQpe8TEi22RgPBBVNv2AUQbIYBWhoD/YNuVCB6sltFRlClzKQKsLYL8XAAAAFQCx0b4ADrOwG8H2yzQJ2jKf7oQAMQAAAIEApwNLUaaUzyzaq3u8LX+Y0edUAB6HuJ0jvC8pWxD+M+Q5r8/eZypi3YdsrrZxtOQkNu1z5W2S6fz1/5B4GY92JnSDsLgTy+dXpFFRcDiXP81NFdhbAs8nl28ucxovyGa1LHgeFO7UZi0izUowmYd3kj5keMyIoi25f+g6wr3zBHEAAACAUE6qf6rQk5DGJada9jof1Ddpq5GRuDAB4mAbfApp1MRwHeylbIlewvdo8bUNrUIGPdGwXoyzCZogzH5CLgwGtGOE8O816PdE+D6GmthZT+8Wgw9OOV8bnqWMyhN4JQbsiNmtyr6nfYeQegIaoIcP1dAoyT7kM11taoKhSwTQxS0= usuario@desktop

Page 16: Mejorando la seguridad del servicio SSH - Hardening

Copiando la llave pública al servidor:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Debe terminar en el archivo authorized_keys del usuario:

$ ssh-copy-id -i .ssh/id_dsa.pub [email protected]:

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.

Page 17: Mejorando la seguridad del servicio SSH - Hardening

Copiando la llave pública al servidor:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Una manera alternativa mas explícita:

$ cat ~/.ssh/id_dsa.pub |ssh equipo_remoto 'mkdir -p ~/.ssh; cat - >> ~/.ssh/authorized_keys'

Otras forma de hacerlo:

● Copiando y pegando directamente el contenido de lallave pública en el archivo de llaves autorizadas

● Copiando la llave pública al equipo remoto y luego agregándola al final del archivo de llaves autorizadas

Page 18: Mejorando la seguridad del servicio SSH - Hardening

Verificando ubicación de lleve:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Iniciamos sesión en el servidor remoto:

$ cat .ssh/authorized_keys

ssh-dss AAAAB3NzaC1kc3MAAACBAOnzPi8+Hl6bTYkigIRN/b8do/v5t9hvfXkOXj2twKMfspO8iKfM65vdHWacnHsT5/57aEwVfoRVlFK80sBg3xKcHQ0XVI0aPUmKtgOI+EWwd+ir5ubYLQpe8TEi22RgPBBVNv2AUQbIYBWhoD/YNuVCB6sltFRlClzKQKsLYL8XAAAAFQCx0b4ADrOwG8H2yzQJ2jKf7oQAMQAAAIEApwNLUaaUzyzaq3u8LX+Y0edUAB6HuJ0jvC8pWxD+M+Q5r8/eZypi3YdsrrZxtOQkNu1z5W2S6fz1/5B4GY92JnSDsLgTy+dXpFFRcDiXP81NFdhbAs8nl28ucxovyGa1LHgeFO7UZi0izUowmYd3kj5keMyIoi25f+g6wr3zBHEAAACAUE6qf6rQk5DGJada9jof1Ddpq5GRuDAB4mAbfApp1MRwHeylbIlewvdo8bUNrUIGPdGwXoyzCZogzH5CLgwGtGOE8O816PdE+D6GmthZT+8Wgw9OOV8bnqWMyhN4JQbsiNmtyr6nfYeQegIaoIcP1dAoyT7kM11taoKhSwTQxS0= usuario@desktop

Ahora ya podemos autenticarnos sin utilizar contraseñas

Page 19: Mejorando la seguridad del servicio SSH - Hardening

Recomendaciones sobre llaves:● Si no tienes cuidado puedes quedar fuera de tu propio servidor

● Deja habilitada la autenticación por contraseñas hasta que la autenticación por llaves funciones perfectamente

● Deja abierto un emulador de terminal mientras configuras● y pruebas la autenticación por contraseñas

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

● Cuida adecuadamente tu llave privada

● No utilizar un passphrase es cómodo pero inseguro● Utilizar un passphrase agrega un segundo factor de seguridad

● La llave: algo que tu tienes● El passphrase: algo que tu sabes

● Respalda tu llave en un sitio seguro

Page 20: Mejorando la seguridad del servicio SSH - Hardening

Cambiando de puerto:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Despistamos a atacantes poco sofisticados: (scanners / bots)

# Configuración del puerto del servicio SSH# Un valor entre 10000 y 65535 es bueno

Port 62131

# Solo escuchamos en la interfaz de red necesaria

Listen 208.34.51.190

# Para escuchar en todas# ListenAddress 0.0.0.0

Esta técnica es bastante efectiva a pesar de ser tan simple

Page 21: Mejorando la seguridad del servicio SSH - Hardening

Aprovechando el archivo config:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Facilita el tener que recordar usuarios, puertos, direcciones IP:

host cloudserver-18 hostname 201.230.200.47 user jperez port 62163 Compression yes

host firewall-lima hostname 192.168.1.254 user administrador port 22

Este archivo se ubica en $HOME/.ssh/config

Page 22: Mejorando la seguridad del servicio SSH - Hardening

Colocando un banner:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Puede ser necesario para reforzar la defensa legal:

# Banner /etc/motd

Banner /etc/banner-ssh

Contenido del archivo:

Ud. esta intentando acceder a un servidor privado.

Si Ud. no cuenta con autorizacion explicita para estofinalice la sesión inmediatamente para evitar que tomemos acciones legales en su contra.

Page 23: Mejorando la seguridad del servicio SSH - Hardening

Observando el banner en acción:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

El mensaje lo ve el usuario antes de iniciar sesión:

$ ssh [email protected]. esta intentando acceder a un servidor privado.

Si Ud. no cuenta con autorizacion explicita para estofinalice la sesión inmediatamente para evitar que tomemos acciones legales en su contra.

Password: _

Page 24: Mejorando la seguridad del servicio SSH - Hardening

Habilitando el puerto dinámicamente:● Port Knocking

● Consiste en enviar una secuencia de paquetes a una lista previamente conocida de puertos

● Si la secuencia es la esperada se abre el puertosolo a la IP que envió los paquetes

● Se implementa en Linux con knockd o iptables

● Single Packet Authentication● Es una técnica mas compleja que busca evitar los

problemas más comunes de port knocking● Requiere de un paquete especialmente armando para

los propósitos de autenticación● En linux se implementa con fwknop

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Page 25: Mejorando la seguridad del servicio SSH - Hardening

Restringiendo acceso por wrappers:

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Es útil si estamos en una red local hostil o como una medidageneral de seguridad:

## /etc/hosts.allow ## This file describes the names of the hosts which are# allowed to use the local INET services, as decided# by the '/usr/sbin/tcpd' server.sshd: 192.168.1.0/255.255.255.0

## /etc/hosts.denysshd: ALL

Page 26: Mejorando la seguridad del servicio SSH - Hardening

Conclusiones:● SSH es un servicio muy útil● Es necesario hacer “hardening” luego de la instalación

● Solo se debe autorizar a una lista de usuarios● Es buena idea permitir solo acceso por llaves● Es buena idea cambiar de puerto a uno no estandar

● Es buena idea colocar un banner antes del acceso

● Lo ideal es habilitar el puerto solo a la IP del administrador

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Page 27: Mejorando la seguridad del servicio SSH - Hardening

Algunos enlaces:

http://rnt.cl/tutoriales/como-crear-llaves-ssh/

http://www.linuxjournal.com/article/9565

http://www.securecentos.com/basic-security/hardening-sshd/

http://www.daemonforums.org/showthread.php?t=74

http://www.medorion.net/p/11.xhtml

http://linuxhelp.blogspot.com/2005/10/using-tcp-wrappers-to-secure-linux.html

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

Page 28: Mejorando la seguridad del servicio SSH - Hardening

Mejorando la seguridaddel servicio SSH

Antonio [email protected]

GRUPO DE USUARIOS DE LINUX DEL PERU -//- FEBRERO 2010

¡Gracias!

¿Preguntas?