Amigos, en esta ocación les explicaré como podemos mejorar la seguridad del protocolo SSH, una definición de SSH se puede encontrar en Wikipedia.
SSH™ (o Secure SHell) es 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. A diferencia de otros protocolos de comunicación remota tales como FTP o Telnet, SSH encripta la sesión de conexión, haciendo imposible que alguien pueda obtener contraseñas no encriptadas. Por defecto se utiliza el puerto 22
https://es.wikipedia.org/wiki/Secure_Shell
Las siguientes configuraciones nos permitirán mejorar la seguridad de SSH
# nano /etc/ssh/sshd_config
Protocol 2
LoginGraceTime 30
PermitRootLogin no
StrictModes yes
AllowUsers gcadmin
MaxAuthTries 3
# /etc/init.d/ssh restart
Ahora explicaré que significan estas configuraciones:
Protocol
Existen 2 versiones de SSH, la versión 1 de SSH está en desuso y es suceptible a varias vulnerabilidades de seguridad. La versión 2 de SSH previene las vulnerabilidades de la versión 1. Por eso es preferible usar la versión 2.
LoginGraceTime
LoginGraceTime establece la cantidad de segundos que en la pantalla se esperará la introducción del usuario y contraseña, para la configuración propuesta, la pantalla esperará por 30 segundos.
PermitRootLogin
PermitRootLogin define si el usuraio root del servidor puede iniciar sesión por SSH, para prevenir ataques de fuerza bruta lo recomendable es establecer el valor como «no«.
StrictModes
Esta configuración define si se deben comprobar los permisos en el directorio home del usuario.
AllowUsers
Con esta configuración se define que usuarios se pueden conectar al servidor por SSH.
MaxAuthTries
MaxAuthTries indica la cantidad de veces que un usuario puede equivocarse al introducir su usuario y contraseña. Para la configuración propuesta después del tercer intento fallido se perderá la conexión por SSH.
Ocultar OpenSSH VersionBanner
El problema se presenta porque el servidor SSH muestra información de la versión de la compilación y la versión del sistema operativo.
En las versiones actuales de ubuntu 18.04 de no se puede modificar este parámetro por el archivo de configuración, se necesita cambiar desde la versión de compilación o como se verá a continuación se puede modificar el archivo binario de SSH.
Primero se realiza la comprovación de versión actual del servidor SSH:
# echo"Hello" | nc localhost 22
La respuesta obtenida será similar a esto:
SSH-2.0-OpenSSH_7.6p1Ubuntu-4
Protocol mismatch.
Para modificar estos datos se requieren utilizar hexedit y strings, para instalar estos programas se deben ejecutar los siguientes comandos:
# apt-get install hexedit
# apt install binutils
Luego de instalar hexedit, es recomendable generar un backup de la configuracion actual antes de modificar el archivo
# cp /usr/sbin/sshd /tmp/sshd.back
# cp /usr/sbin/sshd /tmp/sshd.new
Con el comando string se puede verificar si el binario de ssh muestra información del sistema operativo:
# strings/tmp/sshd.new | grep Ubuntu
OpenSSH_7.6p1 Ubuntu-4ubuntu0
Con el comando hexedit se modifica la informacion almacenada.
- Presionar TAB para cambiar entre los datos HEXADECIMALES a los datos ASCII area
- Usar CTRL+S para buscar un texto, por ejemplo ‘OpenSSH_7.6’
Se mostrará algo similar a:
Usar los cursores para posicionar sobre el caracter que se modificará. Presionar la tecla TAB para regresar al área HEXADECIMAL, escribir ’00’ para cambiar el texto ASSCII:
Grabar los cambios con CTRL+X y Y
Con el comando string nuevamente se puede verificar si el binario de ssh muestra información del sistema operativo:
Despues de es necesario reemplazar el archivo modificado y se reinicia el servicio:
# rm /usr/sbin/sshd
# cp /tmp/sshd.new /usr/sbin/sshd
# systemctl restart ssh.service
Finalmente se comprueba la versión del servidor SSH.
# echo "Hello" | nc localhost 22
Referencias:
https://kram.nz/2018/01/hide-openssh-version-banner/
Debe estar conectado para enviar un comentario.