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 brutaEn
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 DenyHostsEs 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ónPara 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 DenyHostsEn 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 DenyHostsDependiendo 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.
ResultadosLuego de un buen tiempo de uso se han bloqueado un total de 3271 direcciones ip.