martes, 27 de mayo de 2008

Protegiendo el ssh con DenyHosts

SSH (Secure SHell)

Es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos.

SSH trabaja de forma similar a como se hace con telnet. La diferencia principal es que SSH usa técnicas de cifrado que hacen que la información que viaja por el medio de comunicación vaya de manera no legible y ninguna tercera persona pueda descubrir el usuario y contraseña de la conexión ni lo que se escribe durante toda la sesión.

Ahora entiendo que mediante el protocolo ssh, se puede obtener el completo manejo de una máquina, muchos intentarán robar su contraseña, mediante varios métodos, donde los más comunes son

Ataque de fuerza bruta
En criptografía, se denomina ataque de fuerza bruta a la forma de recuperar una clave probando todas las combinaciones posibles hasta encontrar aquella que permite el acceso.

Ataque de diccionario
Un ataque de diccionario es un método de cracking que consiste en intentar con un listado de palabras, probándolas todas hasta dar con la contraseña o password. Un ataque de diccionario suele ser más eficiente que un ataque de fuerza bruta ya que los usuarios suelen utilizar contraseñas débiles. Tienen pocas probabilidades de éxito con sistemas que utilizan contraseñas fuertes con letras en mayúsculas y minúsculas mezcladas con números.

Existen variantes que comprueban también algunas de las típicas sustituciones (determinadas letras por números, intercambio de dos letras, abreviaciones) así como distintas combinaciones de mayúsculas y minúsculas.


En síntesis, dado lo valioso y provechoso de tener acceso ssh a una máquina, muchas personas utilizarán varios métodos para hacerse con acceso a su máquina probando diferentes usuarios y miles de combinaciones de contraseñas.


Como se 've' un ataque ssh

Realizando un análisis en el archivo auth.log
Vemos una entrada como la siguiente

Apr 7 17:30:08 servidor sshd[90935]: Invalid user dvp from 59.36.99.246
Apr 7 17:30:11 servidor sshd[90937]: Invalid user cvp from 59.36.99.246
Apr 7 17:30:14 servidor sshd[90940]: User root from 59.36.99.246

Evidentemente se trata de un ataque porque
  • Esta intentando ingresar como root
  • Es una dirección IP desconocida
  • Trata de realizar conexiones con diferentes nombres de usuarios


Qué es DenyHosts


Es un programa o script escrito en lenguaje de programación python y su función es prevenir el ataque a el servicio o demonio SSH por métodos como fuerza bruta o diccionario.

Muy importante mencionar que DenyHosts NO ES UN FIREWALL o CORTA FUEGOS, ya que únicamente protege el servicio o demonio SSH, SIEMPRE debe de acompañarse de un firewall.

Requerimientos
  • Python v2.3 o una versión superior
  • Un servidor sshd con soporte para tcp_wrappers habilitado

Instalación

Para la instalación y configuración vamos a indicar los pasos necesarios tanto para Freebsd como para Gnu/Linux Debian.


En Freebsd
  • Actualizar el árbol de ports
  • Instalar el port ports/security/denyhosts (make install clean)

En Gnu/Linux Debian
  • Actualizar la lista de paquetes (apt-get update)
  • Instalar DenyHosts (apt-get install denyhosts)

Configuración de DenyHosts

En freebsd
  • Añade, en el fichero /etc/rc.conf las líneas:
    • denyhosts_enable="YES"
      syslogd_flags="-c"
La primera línea es para que inicie el programa al iniciar el sistema. La otra es para que syslogd no agrupe mensajes de log repetidos, así sabremos cuantos intentos se han realizado
  • Edite el archivo /etc/hosts.allow y agregar
    • sshd : /etc/hosts.deniedssh : deny
      sshd : ALL : allow

  • Cree el archivo /etc/hosts.deniedssh
    • touch /etc/hosts.deniedssh
      chmod 644 /etc/hosts.deniedssh
      chown root:wheel /etc/hosts.deniedssh

Editando el archivo de configuración de DenyHosts

Dependiendo del Sistema operativo que se utilice, la ubicación del archivo de configuración de DenyHosts, varia.

SO Ubicación
Freebsd /usr/local/etc/denyhosts.conf
Gnu/Linux Debian /etc/denyhosts.conf
CentOS /usr/share/denyhosts/denyhosts.cfg

Los primeros parámetros del archivo son la ubicación del archivo que contiene la información de los accesos ssh y la ubicación del archivo que contiene las direcciones ip de las máquinas que no deben tener acceso,los cuales varían según el Sistema Operativo que se utilice, para lo cual el archivo de configuración trae las opciones para cada uno de ellos.

Solo se comentarán los cambios que se le hicieron a el archivo, siéntase en la libertad de modificar el archivo a sus necesidades, cada parámetro del archivo esta internamente documentado

Nunca vaciar la lista de hosts prohibidos
# never purge:
PURGE_DENY =

Ńumero de intentos fallidos antes de bloquear el host o ip
DENY_THRESHOLD_INVALID = 3

Dirección de correo donde se envían las notificaciones de bloqueo
ADMIN_EMAIL = correo@email.com

Asunto del mensaje
SMTP_SUBJECT = DenyHosts Report

Importante
Al realizar una conexión existosa, la cuenta de 3 se regresa a 0
RESET_ON_SUCCESS = yes


Seguidamente, luego de los cambios en el archivo de configuración se debe reiniciar el servicio DenyHost, y ver como se va llenando el archivo de hosts prohibidos :)

Recomendaciones adicionales sobre el protocolo ssh

  • No permitir el acceso de el usuario root mediante ssh
  • Cambiar el puerto estandar (22)donde 'escucha' ssh
  • Editar la lista de usuarios que pueden realizar conexiones ssh al equipo
  • Utilizar la autentificación mediante el uso de claves DSA/RSA y no mediante usuario y contraseña.


Resultados

Luego de un buen tiempo de uso se han bloqueado un total de 3271 direcciones ip.

No hay comentarios: