lunes, 23 de mayo de 2011

SSH Y ALGUNAS DE SUS APLICACIONES

¿QUE ES SSH ?
SSH (Secure Shell) es una aplicación y un protocolo que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor y que permite a los usuarios conectarse a un host remotamente.
¿ BENEFICIOS ?
Soporte seguro a cualquier protocolo que funcione sobre TCP. Si el servidor despeña una cierta cantidad de servicios, los protocolos que en otros casos son considerados inseguros (smtp, pop3 por ejemplo) se puede cifrar para garantizar la comunicación segura con sistemas remotos. La seguridad se basa en la utilización de mecanismo de criptografía.
El cliente puede enviar su información de autenticación al servidor, como el nombre de usuario y la contraseña, en formato cifrado.
El cliente puede lanzar aplicaciones que proporciona una interfaz gráfica segura desde el interprete de comandos (reenvío por X11).
Interceptación de la comunicación en la red (Sniffers) : Los datos transmitidos en la red no puede ser examinados, cada uno de los paquetes estan cifrados.
La firma digital de un servidor proporciona la verificación de su identidad.
No servirán los intentos de falsificar la identidad de cualquiera de los dos lados de la comunicación ya que cada paquete está cifrado por medio de una clave conocida sólo por el sistema local y el remoto.
¿ COMO FUNCIONA SSH ?
1. La conexión ssh es iniciada por parte del cliente,
2. El servidor acepta la conexión y envía información de versión.
3. EL cliente envía también la información de versión, esta información valida el tipo de conexión que se realizo y establece la versión del protocolo y del software que utiliza.
4. EL servidor envía la llave RSA del equipo y la llave del servidor que se genera cada hora .
5. El cliente genera una llave de sesión de 254 bits, esta llave es cifrada utilizando las 2 llaves RSA enviadas por el servidor y la envía con el tipo de cifrado que seleccionado.
6. Comienza el envío de datos cifrados pro medio de la llave generada y el algoritmo seleccionado.
7. El servidor envía un mensaje al cliente confirmando el algoritmo de cifrado .
8. El cliente se autentica utilizando uno de los métodos soportados.
9. El cliente envía peticiones para iniciar la sección ejemplo sesión de consola remota, entre otras soportadas.
10. La sección es finalizada cuando el servidor envía un código de terminación ejecutado al cliente.
Después de algo de  teoría  reefrente a SSH , aclarando que la mayoría de conceptos fueron investigados en la web, procedemos a ver algunas de sus aplicaciones:

1. Instalación de servidor SSH en el Sistema Operativo Debbian 6.0 Squeeze:


Abrimos  una terminal como usuario root para elevar privilegios y ejecutamos el comando 
apt-get install openssh-server.

   
Por la integridad y la seguridad de la información y de los diferentes servicios que esten corriendo en este equipo es recomendable luego de instalar el servidor SSH, des habilitar el login remoto para usuario root, con esto disminuimos el nivel ataques Bruteforce (Fuerza Bruta), provinientes de hackers piratas intentando conseguir acceso a nuestra maquina, con siguiendo elevar sus privilegios y causar daños en nuestro sistema,  para esto hacemos lo siguiente:
 

Editamos el archivo de configuración del ssh; lo abrimos con cualquier editor de texto (nano, gedit):
nano /etc/ssh/sshd_config

En este archivo buscamos la linea PermitRootLogin, que por defecto esta en yes, la cambiamos a no:


Con esto cualquier tipo de persona que utilize el login root, que viene activado por defecto en el servidor SSH.

3. SSH tiene la posibilidad de habilitar el login a usuarios pertenecientes a un mismo grupo, esto se realiza con el fin de permitir la administración remota a solo un grupo de personas permitidas para realizar este tipo de procedimientos.

Creamos un grupo nuevo en nuestro servidor: 
addgroup sshadmin:


Agregamos los usuarios que van a administrar el sistema remotamente, al grupo nuevo que creamos:
usermod -G sshadmin  (usuario):


Editamos el  archivo de configuración del servicio ssh; agregamos la linea AllowGroups especificamos el grupo que va a tener acceso remoto al sistema.
nano /etc/ssh/sshd_config


Procedemos a realizar los diferentes tipos de pruebas, estas pruebas las realize desde una maquina conectada en red con el servidor SSH, utilizando un usuario del sistema llamado felipe, podemos observar que efectivamente solo tiene acceso remoto al sistema el usuario que agregamos al grupo sshadmin.



4. Autenticacion  de usuario con llaves asimétricas:

Desde un cliente, creamos  un par de llaves RSA o DSA para la autenticación con llaves publicas para SSH, para generar las llaves en la maquina cliente digitamos el comando 

ssh-keygen -t rsa




Passphrase: frase de validación se utiliza en el momento de autenticaión  es opcional.

Automaticamente se crea una llave publica y una privada, estas llaves por defecto se almacenan en el directorio /root/.ssh/id_rsa, si los parametros al momento de crearlas no fueron modificados. 


Debemos enviar la llave publica al servidor, en este caso utilizamos scp que es un medio de transferencia segura  de archivos, que utiliza SSH para realizar sus envíos, en pocas palabras los que se envié con scp, va a viajar seguro a través de la red; esto lo hacemos de la  siguiente manera:

Ubicados en el directorio donde esta almacenada la llave publica  (/root/.ssh/) ejecutamos el siguiente comando:


scp (Nombre llave publica) (usuario@IPdelequiposervidor) : (Directorio de destino) 
scp id_rsa.pub felipe@192.168.20.158:/tmp



En el equipo servidor ingresamos al home del usuario que se va autenticar por ssh (/home/kiko) y creamos el directorio .ssh:
cd /home/kiko
mkdir .ssh



En este directorio creamos el archivo que va a almacenar la llave publica del usuario; este archivo va a ser  consultado por el SSH en el momento de autenticación:
touch authorized_keys



Copiamos el contenido de la llave publica al archivo creado anteriormente, recuerden que al enviar la llave especificamos que iva a estar almacenada en el directorio /tmp.
cat /tmp/id_rsa.pub >> /home/kiko/.ssh/autorized_keys



Reiniciamos el servicio SSH /etc/init.d/sshd restart y realizamos las prurbas correspondientes.

El comando de inicio de seccion es el siguiente:
ssh -i  ( Llave privada de usuario) (usuario@IPdelservidorSSH) 

Inicio de sección con usuario que no se le asigno llave publica:

Inicio de sección con usuario que no se le asigno llave publica.


Como podemos observar el acceso fue concedido para este usuario.

CONCLUSIONES:

SSH es un canal seguro de comunicación, cifra toda la información que es enviada a través de el. De este modo si la información  es capturada y analizada a través de la red por programas de captura de tramas, es prácticamente indescifrable y la confiabilidad de la información aumenta en un alto nivel. 

Como podemos observar utilizamos 2 tipos de autenticacion, diferentes a los  que se utilizan comúnmente con este tipo de servicio, lo que hace esto es disminuir el impacto que tienen los diferentes tipos de  ataques que existen en la actualidad, fáciles de aplicar si las configuraciones que trae el servicio por defecto son establecidas.