SSH (Secure Shell - puerto 22) es esencial para la administración de un servidor remoto. En esta publicación te guiaremos a través de algunas de las opciones disponibles para fortalecer (hardening) OpenSSH.
Hardening Básico SSH
Configuración del servidor OpenSSH
El archivo de configuración de OpenSSH en Ubuntu 16.04 se encuentra en
/etc/ssh/sshd_config
Deberá ser root o usar sudo para editar y controlar el servidor SSH.
Archivo de configuración de respaldo
Siempre es una buena idea hacer una copia de seguridad de los archivos de configuración antes de editarlos.
cp /etc/ssh/sshd_config /etc/ssh/backup.sshd_config
Editar el archivo de configuración
Puedes usar nano para editar archivos de configuración.
nano /etc/ssh/sshd_config
Prueba de configuración SSH
Después de editar el archivo de configuración, debe probar que sea válido antes de volver a cargar el servicio.
sshd -t
Vuelva a cargar el archivo de configuración
Una vez que crea que sus ediciones son buenas, vuelva a cargar el demonio SSH.
sudo systemctl reload sshd
Ver el Protocolo
Nuestra primera edición será muy sencilla. Realmente es más una doble verificación que una edición. Abra / etc / ssh / sshd_config y verifique la línea que comienza con Protocol. Asegúrese de que esté configurado en 2 y no en 1. El valor predeterminado actual es 2.
Protocol 2
Deshabilitar acceso root
En lugar de usar root, deberíamos usar la conexión como usuario con permiso sudo. Asegúrese de tener sudo configurado correctamente antes de continuar. Desactivemos la capacidad de root para iniciar sesión mediante SSH. Dentro del archivo de configuración, busque la línea:
PermitRootLogin yes
Cambia eso a no:
PermitRootLogin no
Desactivar re-envio de tráfico
Pueden utilizar ssh para redireccionar tráfico
AllowTCPForwarding No
Desconectar sesiones inactivas
Las sesiones inactivas pueden ser peligrosas. Es una buena idea cerrar la sesión de las personas después de una cantidad determinada de inactividad. ClientAliveInterval es la cantidad de tiempo en segundos antes de que el servidor envíe un mensaje activo al cliente después de que no se hayan recibido datos. ClientAliveCountMax es el número de veces que comprobará antes de desconectarse. En el siguiente ejemplo, el servidor verificará al cliente después de 5 minutos de inactividad. Lo hará dos veces y luego se desconectará.
ClientAliveInterval 300
ClientAliveCountMax 2
Usuarios de la lista blanca
Podemos limitar los usuarios que pueden iniciar sesión en SSH. Esta es una lista blanca. Solo se permitirán los usuarios de esta lista. A todos los demás se les negará. Digamos que quiero permitir que el usuario elhackernet inicie sesión de forma remota a través de SSH. Agregaremos la línea:
AllowUsers elhackernet
No olvides agregar su nombre de usuario a la lista AllowUser.
Cambiar puertos
Otra forma menos favorita de reforzar SSH es cambiar el puerto predeterminado. Normalmente, SSH se ejecuta en el puerto 22. La idea es que la mayoría de los script kiddies solo apunten a ese puerto. Si cambias el puerto predeterminado, tal vez los ataques disminuyan. Pero recuerda que la seguridad por oscuridad no sirve de nada. No es una buena recomendación, En el archivo de configuración, busca la línea:
Port 22
Cambiar el puerto por otro disponible como quizás 2222.
Port 2222
Utilizar Llaves SSH en vez de contraseñas
De forma predeterminada, inicia sesión en el sistema a través de SSH con un nombre de usuario y una contraseña. Estos pueden ser de fuerza bruta. La gente probará una enorme cantidad de combinaciones de nombre de usuario y contraseña hasta que encuentre una que funcione. Entonces, en lugar de usar contraseñas, deberíamos usar claves SSH.
Generando un par de claves
Si ya tienes un par de claves, continúe.
Vamos a hacer algunas claves públicas de cifrado. Vienen en parejas. Privado y publico.
Ejecute el siguiente comando para generar sus claves en la máquina cliente. No ejecutes este comando sudo. Le pedirá una frase de contraseña para proteger la clave. Puede dejarlo en blanco, pero no lo recomiendo. Cualquier persona que posea esa clave puede utilizar una clave SSH privada sin protección de contraseña para acceder al servidor.
ssh-keygen
Comparte tu clave pública
Utiliza ssh-copy-id para enviar su clave pública al servidor.
ssh-copy-id ns2@192.168.0.5
Ahora intenta iniciar sesión. Es posible que te solicite tu contraseña.
ssh ns2@192.168.0.5
Deberías recibir un mensaje que también se vea similar a:
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
ECDSA key fingerprint is ff:fd:d5:f9:66:fe:73:84:e1:56:cf:d6:ff:ff.
Are you sure you want to continue connecting (yes/no)?¿Está seguro de que desea continuar conectándose (sí / no)?
Di que sí y deberías iniciar sesión sin contraseña.
Deshabilitar la autenticación con contraseña
Si tenemos claves SSH en funcionamiento, podemos deshabilitar todas las autenticaciones de contraseña. Encuentra la línea:
PasswordAuthentication yes
Y cámbialo por no:
PasswordAuthentication no
Deshabilitar el reenvío X11
X11Forwarding yes
X11Forwarding no
Fail2Ban
apt-get install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
/etc/fail2ban/jail.local
[sshd]enabled = trueport = sshlogpath =% (sshd_log) s
service fail2ban restart
Autenticación multifactor SSH - 2FA
Añade un segundo factor de autenticación en SSH
Time-based One-time Password: TOTP
sudo apt-get install libpam-google-authenticator
O en CentOS y derivadas
yum install google-authenticator
google-authenticator
Do you want authentication tokens to be time-based (y/n)
Do you want to disallow multiple uses of the same authenticationtoken? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) yBy default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n) yIf the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n) y)
/etc/pam.d/sshd
auth required pam_google_authenticator.so
Edite el archivo de configuración de ssh.
UsePAM yesChallengeResponseAuthentication yes
systemctl restart sshd.service
Banners y MOTD
#Banner /etc/issue.net
ssh fake_user@192.168.1.1
Ubuntu 16.04.3 LTSfake_user@192.168.1.1's contraseña:
/etc/issue.net
______________________| || Bienvenido Leet Haxor || ____________________ |||(\ _ /) ||(*, *) ||(") _ (")
ssh fake_user@192.168.1.1
______________________| || Bienvenido Leet Haxor || ____________________ |||(\ _ /) ||(*, *) ||(") _ (") fake_user@192.168.1.1 password:
MOTD
Bienvenido a Ubuntu 16.04.3 LTS (GNU / Linux 4.13.17-x86_64-linode69 x86_64) * Documentación: https://help.ubuntu.com* Gestión: https://landscape.canonical.com* Soporte: https://ubuntu.com/advantageÚltimo inicio de sesión: lun 19 de febrero 16:01:33 2018 desde 192.168.1.1
cp /etc/update-motd.d/00-header /etc/update-motd.d/backup.00-header
/etc/update-motd.d/00-header
figlet "No Trespassing"
Bienvenido a Ubuntu 16.04.3 LTS (GNU / Linux 4.14.17-x86_64-linode99 x86_64) _ _ _____ _| \ | | ___ | _ _ | __ ___ ___ _ __ __ _ ___ ___ (_) _ __ __ _| \ | | / _ \ | || '__ / _ \ / __ | '_ \ / _` / __ / __ | | '_ \ / _` || | \ | (_) | | || | | __ / \ __ \ | _) | (_ | \ __ \ __ \ | | | | (_ | || _ | \ _ | \ ___ / | _ || _ | \ ___ || ___ / .__ / \ __, _ | ___ / ___ / _ | _ | | _ | \ __, || _ | | ___ / * Documentación: https://help.ubuntu.com* Gestión: https://landscape.canonical.com* Soporte: https://ubuntu.com/advantage
Hardening Avanzado
Auditoría SSH
python ssh-audit.py ns2.ehacker.net
Cambiar la preferencia de la clave de host
HostKey /etc/ssh/ssh_host_ed25519_keyHostKey /etc/ssh/ssh_host_rsa_key
Cambiar cifrados y algoritmos predeterminados
KexAlgorithms curve25519-sha256@libssh.orgCiphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctrMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
python ssh-audit.py ns2.elhacker.net
Módulos regenerados
/etc/ssh/moduli
ssh-keygen -G moduli-2048.candidates -b 2048ssh-keygen -T moduli-2048 -f moduli-2048.candidatescp moduli-2048 /etc/ssh/modulirm moduli-2048
hola, el link de ssh audit lleva a un repo obsoleto.
ResponderEliminarAqui la version actualizada :
https://github.com/jtesta/ssh-audit/