mejorando la seguridad del servicio ssh - hardening

Post on 03-Jul-2015

7.274 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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

Mejorando la seguridaddel servicio SSH

Antonio Ognioantonio@linux.org.pe

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

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

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

MEJORANDO LA SEGURIDAD DEL SERVICIO SSH FEBRERO 2010

usuario@desktop:~$ ssh usuario@servidor.comusuario@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:~$

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 usuario2@otro.servidor.com:/ruta

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

Cliente del servicio de FTP seguro (sftp):

usuario@desktop:~$ sftp usuario5@mi-otro.servidor.com sftp> pwdRemote working directory /home/usuario5sftp> _

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

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

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

¿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

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.

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

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

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

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

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

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

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 usuario@servidor.com:

Password:Now try logging into the machine, with "ssh 'usuario@servidor.com'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

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

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

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

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

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

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.

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 root@www.servidor.comUd. 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: _

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

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

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

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

Mejorando la seguridaddel servicio SSH

Antonio Ognioantonio@linux.org.pe

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

¡Gracias!

¿Preguntas?

top related