domingo, 2 de enero de 2011

Cómo proteger un servidor GNU/Linux de ataques vía SSH

Tomando una mirada en /var/log/secure en un sevirdor GNU/Linux conectado a Internet, inmediatamente entenderemos la necesidad de asegurar la cuenta de root. Los "chicos malos" están constantemente intentando logearse vía SSH u otro protocolo como root o cualquier otro usuario. Cuando usamos un password muy simple, sólo sería cuestión de tiempo que nuestro servidor se vea comprometido por un ataque de adivinación de password.

¿Qué podemos hacer?

La mejor práctica es deshabilitar la opción de que el usuario root pueda logearse vía SSH, lo que eliminaría gran parte del riesgo. El problema es que haciendo esto también eliminamos grandes ventajas que los sysadmins pueden aprovechar y complica el uso de herramientas como WinSCP para copia de ficheros desde clientes Windows a nuestro servidor GNU/Linux.
Una solución más simple sería utilizar keypairs públicos o privados para la autenticación. El key público es almacenado en el servidor y el key privado es almacenado en el cliente local Windows. Cuando se hacen intentos de conexión al servidor desde Windows, la autenticación es hecha con el keypair en lugar de un password. La autenticación por password de hecho está deshabilitada para root, por lo que ningún tipo de ataque por adivinación de password funcionará para autenticarse.

Lo haremos de la siguiente manera:

1. Descargamos PuTTY para nuestro cliente Windows y lo instalamos.

2. Ahora, debemos generar los keypairs. PuTTY tiene una aplicación llamada PuTTYgen que podemos utilizar para generar los keypairs. El instalador probablemente colocó PuTTYgen y todo lo demás en Start > All Programs >> PuTTY.


3. Cuando ejecutamos PuTTYgen por primera vez, debemos generar un nuevo keypair. En la parte inferior de la ventana están tres parámetros para elegir que son: SSH-1(RSA), SSH-2 RSA y SSH-2DSA. SSH-2 RSA es la opción por defecto con un key lenght por defecto de 1024 bits. Keys largos son más seguros pero requieren más prestaciones de procesamiento. 1024 bits es aceptable por el momento, pero no será aceptado en el futuro a medida que la capacidad de los procesadores vaya en aumento.


4. Hacemos click en el botón Generate para producir nuestra key pública y privada. Ahora debemos mover el puntero del mouse sobre el área vacía de la parte superior de la pantalla para generar algo de aleatoriedad para usarla en la producción del keypair. Solo mueve el puntero del mouse circularmente hasta que la barra de progreso se complete y PuTTYgen genere los keys.

5. Ahora podemos guardar el key privado en nuestro cliente Windows y copiar el key público en el servidor GNU/Linux.

6. Entramos y confirmamos una passphrase para proteger el key privado en los dos campos de la ventana de PuTTYgen.

7. Hacemos click en el botón Save private key y seleccionamos la ubicación en el disco local para guardar el key privado. Recuerda proteger este key guardándolo en un lugar seguro. Además guardamos el key público como archivo de texto para simplificar su uso en el futuro.

8. Copiamos el texto tipo galimatías que constituye el key público (en la parte superior de la ventana de PuTTYgen) y los pegamos en /root/.ssh/authorized_keys en el servidor (probablemente debamos crear el directorio .ssh/ y el fichero authorized_keys. Debemos tomar en cuenta que .ssh/ es un directorio oculto y debe escribirse tal como está). Si guardamos el key público como texto en el paso anterior ahora solo debemos copiar el contenido de ese fichero y pegarlo en el fichero authorized_keys.


9. En nuestro servidor GNU/Linux verificamos el fichero /etc/ssh/sshd_config para asegurarnos de que la autenticación RSA y la autenticación pública están habilitadas (yes) y no estén como un comentario (# al principio de la línea). Además debemos asegurarnos de que el camino al fichero authorized_keys esté configurado así: "%h/.ssh/authorized_keys" y descomentar la línea. Al terminar esas líneas deben verse así:

RSAAuthentication yes
PubkeyAuthentication yes 
AuthorizedKeysFile %h/.ssh/authorized_keys

10. Para que los cambios sean aplicados reiniciaremos el daemon sshd:


11. Si intentamos logearnos ahora como root y su password, el logeo será denegado:


12. Ahora debemos configurar PuTTY para que utilice el keypair público/privado para la autenticación. En el menú de la izquierda de PuTTY vamos a Connection:SSH:Auth y en la parte inferior "Private key file for authentication" le indicamos la ruta donde guardamos nuestro fichero con el key privado.


De nuevo, en el menú de la izquierda, vamos a Session. A la derecha, indicamos la dirección IP o el hostname de nuestro servidor GNU/Linux y hacemos click en Open.

13. Cuando PuTTY conecta con el servidor, entramos root para el usuario. Ahora se nos pedirá el passphrase que configuramos para nuestro key privado. Entramos este passphrase y ya debería realizarse la conexión al servidor como usuario root.


El beneficio de hacer este procedimiento es que le resultaría prácticamente imposible a un atacante logearse en nuestro servidor como root adivinando el password. Para que el atacante se disfrace de root, debería tener el key privado y saber el passphrase asociado a él.

Fuente: LinuxGazzete
Más recursos:
ElectricToolbox
Cyberciti, 2

1 comentario: