Bienvenidos a este capítulo del Curso de Linux para Hackers – SSH: Protocolo y explotación. Comparte este articulo y síguenos para recibir más capítulos y cursos gratis.

Esta guía es parte de un curso mucho más grande en donde te enseñamos a convertirte en hacker de 0 a 100. Desde los conocimientos más básicos hasta conseguir empleo.

En esta guía veremos desde cero un tema tan amplio como es Linux y lo haremos desde el punto de vista del hacking y la ciberseguridad.

Para saber más comente a continuación, respondemos todos y cada uno de los comentarios.

Índice

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Lo que aprenderás en este artículo

  1. Fundamentos del protocolo SSH: Su propósito, seguridad y cómo reemplazó a protocolos inseguros como Telnet.
  2. Funciones y usos de SSH: Administración de servidores remotos, transferencia de archivos segura y otros casos de uso práctico.
  3. Comando SSH en Linux: Aprender la sintaxis básica y opciones para conectarse de forma segura a un servidor.
  4. Gestión de claves SSH: Generación y configuración de claves públicas y privadas para autenticación segura.
  5. SSH vs. OpenSSH: Diferencias entre las versiones comerciales y de código abierto de SSH.
  6. Ataques comunes a SSH y estrategias de defensa: Identificación y prevención de amenazas como ataques de fuerza bruta, Man-in-the-Middle (MitM) y robo de claves.
  7. Mejores prácticas de seguridad en SSH: Configuraciones y pasos para asegurar SSH en servidores Linux.

SSH (Secure Shell)

La seguridad desempeña siempre un papel central en Internet. De ahí que el procedimiento de seguridad SSH está firmemente anclado en la pila de protocolos TCP/IP. Implementado en 1995 y revisado varias veces desde entonces, el protocolo SSH permite a los usuarios establecer una conexión segura entre dos PCs. A continuación nos adentraremos en los detalles del protocolo SSH y mostraremos cómo realiza el cifrado.

¿Para qué sirve SSH?

El protocolo SSH permite que dos computadoras establezcan una conexión segura y directa dentro de una red potencialmente insegura como Internet. Este protocolo es necesario para que no puedan acceder terceros al flujo de datos que se transfiere a través de la conexión y la información sensible no caiga en manos equivocadas.

Antes de que apareciera Secure Shell, también era posible establecer conexiones directas entre dos PCs, pero las aplicaciones que se utilizaban, Telnet, Remote Shell o rlogin, eran inseguras. SSH encripta la conexión entre dos computadoras y permite operar una de ellas desde la otra.

SSH no solo garantiza una conexión cifrada, sino también que solo se establezcan conexiones entre los PCs destinados a este fin (es decir, que no sea posible ningún ataque del tipo man-in the-middle) y que los datos no puedan manipularse en su camino hacia el destinatario. Originariamente, el acceso al PC remoto se realizaba siempre a través de la línea de comandos, con la que se enviaban comandos al equipo remoto. Entretanto, ya es posible también reflejar una interfaz gráfica de usuario (que no siempre está disponible en los servidores) en tu propio PC con la ayuda de Virtual Network Computing (VNC) y así controlar el otro PC.

SSH tiene muchas aplicaciones diferentes:

  • Gestión de servidores a los que no se puede acceder localmente
  • Transferencia segura de archivos
  • Creación de copias de seguridad
  • Conexión entre dos PCs con encriptación de extremo a extremo
  • Mantenimiento remoto desde otros PCs

El desarrollo de SSH también ha influido en otros protocolos. Por ejemplo, el inseguro protocolo FTP, con el que es posible cargar archivos en un servidor y descargarlos desde allí, se ha desarrollado aún más hasta transformarlo en el Protocolo de Transferencia de Archivos SSH (SFTP).

Una ventaja de SSH es que el protocolo se ejecuta en todos los sistemas operativos comunes. Dado que en sus orígenes era una aplicación Unix, también se implementa por defecto en todas las distribuciones de Linux y en macOS. Sin embargo, SSH también se puede usar en Windows si instalas el programa apropiado.

Comando SSH

En Linux, ssh es un protocolo que significa Secure Shell o Secure Socket Shell. El secure shell es útil para la seguridad al conectarse a un servidor remoto. El comando ssh utiliza un protocolo ssh , que es un protocolo seguro, ya que la transferencia de datos entre el cliente y el host se realiza de forma cifrada. Transfiere la entrada a través del cliente al host y devuelve la salida transferida por el host. Se ejecuta a través del puerto TCP/IP 22.

La conexión cifrada también se utiliza para ejecutar comandos en un servidor Linux , reenvío de puertos , tunelización y más.

Hay muchos clientes SSH disponibles tanto de forma comercial como gratuita. OpenSSH es el cliente más utilizado. Está disponible para todas las plataformas más utilizadas, como Windows, Linux, macOS, OpenBSD y más.

Sintaxis:

ssh nombre_usuario@host (IP/nombre_de_dominio)  

El comando anterior le pedirá la contraseña, escríbala y presione la tecla ENTER.

Si estamos realizando una conexión por primera vez, nos pedirá continuar con la conexión, escribiremos sí y pulsaremos Enter. Agregará una clave ECDSA (Elliptical Curve Digital Signature Algorithm) y nos conectará a un servidor remoto.

Ahora puede controlar y administrar una máquina remota mediante su terminal. Si tiene alguna dificultad para establecer una conexión, tenga en cuenta los siguientes puntos:

  • Si la dirección IP proporcionada de la máquina remota es válida.
  • El puerto que escucha el demonio SSH no está bloqueado por un firewall ni se reenvía incorrectamente.
  • El nombre de usuario y la contraseña que ingresó son correctos.
  • El software SSH está instalado correctamente.

    Componentes del comando ssh

    El comando ssh consta de tres tipos diferentes de componentes:

    • Comando ssh: indica a la máquina que cree una conexión cifrada segura con el sistema host.
    • Nombre de usuario: El nombre de usuario es el nombre del usuario de Linux al que accede la máquina host.
    • Host: un host es una máquina a la que accede el usuario, como una computadora o un enrutador. Un nombre de dominio o una dirección IP también se denominan Host.

    Comandos SSH

    El cliente ssh tiene muchas funciones para el comando ssh, como crear una clave, configurar una clave, abrir un servidor SSH, mantener una clave para inicio de sesión único, cliente de transferencia de archivos y más. Algunos de los comandos ssh más útiles son los siguientes:

    • ssh-keygen: Se utiliza para crear un par de claves para establecer una conexión y autenticación de clave pública.
    • ssh-copy-id: Se utiliza para configurar una clave pública como un usuario válido en un servidor.
    • ssh-agent: se utiliza para crear un agente que guarde la clave privada para el inicio de sesión único.
    • ssh-add: Es una herramienta para agregar una clave al agente.
    • scp: es un cliente de transferencia de archivos que proporciona una interfaz de línea de comandos similar a RCP.
    • sftp: es un comando de transferencia de archivos que proporciona una interfaz de línea de comandos similar a FTP.
    • sshd: Es un servidor OpenSSH para el sistema Linux.

    Opciones: Hay muchas opciones de línea de comandos disponibles para especificar las distintas especificaciones de salida de SSH. Algunas opciones útiles son las siguientes:

    • -c: Se utiliza para especificar la clase de consulta para datos que no son IN.
    • -C: Se utiliza para comparar registros SOA en servidores de nombres autorizados.
    • -d: Esta opción se considera equivalente a -v.
    • -i: Se utiliza para búsquedas inversas de IP6.INT.
    • -l: Se utiliza para listar todos los hosts de un dominio mediante AXFR.
    • -m: esta opción establece el indicador de depuración de memoria, como trace|record|usage.
    • -N: Se utiliza para cambiar la cantidad de puntos permitidos antes de que se realice la búsqueda de raíz.
    • -r: Se utiliza para deshabilitar el procesamiento recursivo.
    • -R: Especifica el número de reintentos para los paquetes UDP.
    • -s: Se utiliza para que una respuesta SERVFAIL detenga la consulta.
    • -t: Se utiliza para especificar el tipo de consulta.
    • -T: Se utiliza para habilitar el modelo TCP/IP.
    • -v: Se utiliza para salida detallada.
    • -V: Se utiliza para imprimir el número de versión y salir.
    • -w: se utiliza para especificar la espera eterna para una respuesta.
    • -W: Se utiliza para especificar cuánto tiempo esperar una respuesta.
    • -4: Se utiliza solo para el transporte de consultas IPv4.
    • -6: Se utiliza solo para el transporte de consultas IPv6.

    SSH vs. OpenSSH

    Secure Shell fue creado en 1995 como un proyecto de código abierto. Ese mismo año, el desarrollador Tatu Ylönen fundó una empresa para seguir desarrollando el protocolo. Así, el proyecto inicialmente abierto se fue convirtiendo cada vez más en software propietario. Sin embargo, la comunidad de la red no se limitó a aceptar su comercialización y desarrolló una bifurcación abierta basada en el protocolo SSH-1: OpenSSH. Sin embargo, dado que la empresa SSH Communication Security sigue trabajando en Secure Shell, ahora existen dos protocolos que son competencia. Uno de ellos es el protocolo propietario SSH-2 (un desarrollo posterior desde que se conocieron las vulnerabilidades de seguridad en SSH-1) y el otro es OpenSSH.

    OpenSSH y el SSH comercial son equivalentes tanto en funcionalidad como en alcance. La diferencia radica sobre todo en el coste, pero también en el servicio de soporte. Si eliges el producto de SSH Communication Security, también recibirás asistencia las 24 horas del día, los 7 días de la semana, lo que puede ser particularmente útil para empresas grandes con gerentes de TI que cambian a menudo. OpenSSH, por otro lado, ofrece la ventaja de que cuenta con una gran comunidad que participa en el constante desarrollo del proyecto.

    Instalar el cliente OpenSSH en Linux

    El cliente OpenSSH es una herramienta de conectividad para que los sistemas conecten dos sistemas con el protocolo ssh. También se lo denomina ssh y se puede invocar desde la terminal de Linux. Este paquete de cliente contiene otras utilidades SSH como sftp, scp y ssh que se instalan de manera predeterminada con el comando ssh. Realiza operaciones remotas utilizando estas utilidades ssh.

    El cliente OpenSSH viene preinstalado en la mayoría de distribuciones Linux. Si algún sistema Linux no tiene el cliente ssh, podemos instalarlo manualmente mediante el administrador de paquetes.

    Para instalar el cliente OpenSSH, ejecute el siguiente comando:

    sudo apt  update

      El comando sudo anterior actualizará el paquete del sistema Linux. Observe la siguiente captura de pantalla del resultado:

      Después de actualizar el sistema Linux, ejecute el siguiente comando para instalar el cliente OpenSSH:

      sudo apt install Cliente OpenSSH  

        El comando anterior instalará el último paquete del cliente OpenSSH. Observe el resultado siguiente:

        Como podemos ver en el resultado anterior, se está ejecutando un proceso demonio para instalar el cliente OpenSSH. Como en nuestra máquina, el cliente OpenSSH ya está instalado, se ha mostrado el mensaje «openssh-client ya es la versión más reciente».

        Instalar el servidor OpenSSH en Linux

        Para realizar una conexión SSH, necesitamos tener la parte del lado del servidor del software SSH en nuestra máquina.

        Para comprobar el estado de instalación del servidor, abra la terminal y ejecute el siguiente comando:

        ssh  localhost

          Si nuestra máquina no tiene el kit de herramientas de servidor del cliente OpenSSH, entonces mostrará la salida de la siguiente manera:

          En el caso anterior, tenemos que instalar el servidor OpenSSH.

          Para instalar el servidor SSH, ejecute el siguiente comando:

          sudo apt-get install openssh-server ii  

            El comando anterior solicitará la contraseña de administrador del sistema. Escriba la contraseña y presione la tecla ENTER para iniciar el proceso de instalación. A continuación, confirmará la instalación, escriba la tecla ‘y’ y presione la tecla ENTER. Considere el siguiente resultado:

            Después de confirmar la instalación, se iniciará un proceso demonio que instalará el servidor OpenSSH en su máquina.

            Para verificar la instalación, ejecute el siguiente comando:

            service ssh status

              El comando anterior mostrará el estado de la instalación. Si la instalación se realizó correctamente, se mostrará el resultado de la siguiente manera:

              El comando anterior verificará el tipo de conectividad » sí» para continuar. Considere el siguiente resultado:

              Ahora hemos instalado con éxito el servidor OpenSSH en nuestra máquina.

              Generación de claves SSH

              Para crear una conexión con el cliente host, necesitamos una clave específica para una conexión cifrada. Iniciar sesión en la computadora host remota mediante una clave ssh es más seguro que usar una contraseña. Después de iniciar sesión en la computadora host, los comandos de la computadora solo funcionarán si se escriben directamente en la computadora host.

              Para generar la clave ssh, ejecute el siguiente comando:

              ssh-keygen

              El comando anterior generará las claves pública y privada para crear una conexión con el sistema host. Considere el siguiente resultado:

              Podemos ver en el resultado anterior que se generaron las claves SSH. El comando ssh-keygen crea dos archivos, key@ssh y key@ssh.pub , que contienen la clave privada y pública, respectivamente.

              Se recomienda ocultar la clave privada por motivos de seguridad y copiar la clave pública al host remoto. Después de copiar esta clave al host remoto, podemos establecer una conexión utilizando la clave SSH, no mediante la contraseña.

              ¿Cómo funciona SSH? Una breve explicación

              Secure Shell utiliza varias técnicas de cifrado y autenticación. Por un lado, esto garantiza que los flujos de datos no puedan leerse ni manipularse. Por otra parte, solo los participantes autorizados pueden ponerse en contacto entre sí.

              Autentificación

              En un primer paso, el servidor SSH y el cliente se autentican mutuamente. El servidor envía un certificado al cliente para verificar que realmente es el servidor correcto. Solo en el primer contacto existe el peligro de que un tercero logre conectarse entre los dos participantes e intercepte la conexión. Dado que el propio certificado también está encriptado, no puede ser imitado. Una vez que el cliente sabe cuál es el certificado correcto, nadie más puede hacer contacto a través del servidor correspondiente.

              Después de la autenticación del servidor, el cliente también debe demostrar ante el servidor que está autorizado para acceder a él. Esta información se almacena en el servidor. Como resultado, los usuarios deben introducir la contraseña cada vez que se conectan a otro servidor durante la misma sesión. Debido a esto, existe la posibilidad alternativa de autenticación del lado del cliente utilizando el conjunto de claves formado por la clave pública y la privada.

              La clave privada se crea individualmente para tu propio PC con una contraseña que debe ser más larga que una al uso. La clave privada se almacena exclusivamente en tu PC y siempre permanece secreta. Si deseas establecer una conexión SSH, introduce primero la contraseña que abre el acceso a la clave privada.

              En el servidor (así como en el propio cliente) también hay claves públicas. El servidor crea un problema criptográfico con su clave pública y lo envía al cliente. Este, a su vez, descifra el problema con su propia clave privada, devuelve la solución e informa al servidor de que está permitido establecer una conexión segura.

              Durante una sesión, solo necesitas introducir la contraseña una vez para conectarte a cualquier número de servidores. Al final de la conexión, los usuarios cierran la sesión en sus equipos locales para asegurarse de que ningún tercero que tenga acceso físico al equipo local pueda conectarse al servidor.

              Codificación

              Después de la autenticación mutua, los dos participantes de la comunicación establecen una conexión cifrada. Para ello, se genera una clave de sesión que expira una vez finalizada la conexión –no debe confundirse con los pares de claves públicas/privadas, que solo se utilizan para el intercambio de claves. La clave que se utiliza para el cifrado simétrico solo es válida para esta sesión. Tanto el cliente como el servidor tienen la misma clave, por lo que cualquier mensaje que se intercambie puede ser cifrado y descifrado. El cliente y el servidor crean la clave simultáneamente, pero de forma independiente el uno del otro. En el llamado algoritmo de intercambio de claves, ambas partes utilizan cierta información pública y secreta para crear la contraseña.

              Otra forma de encriptación se produce gracias al SSH por hashing. Un hash es una especie de firma que se genera para los datos transmitidos. El proceso es el siguiente: se utiliza un algoritmo para generar un hash único a partir de los datos. Si se manipulan los datos, el valor del hash también cambia automáticamente, lo que permite al destinatario reconocer si los datos han sido modificados por terceros. Los valores del hash están diseñados de tal manera que no pueden ser simplemente simulados. Idealmente, nunca es posible generar dos transmisiones diferentes con el mismo hash: a esto se le llama seguridad de colisión.

              Puertos SSH

              Los puertos TCP son puntos finales abiertos por los servidores y los clientes para permitir la comunicación. Como en un puerto marítimo, los participantes en la comunicación reciben y envían aquí los paquetes de datos. TCP tiene un espacio de direcciones de 16 bits y por lo tanto tiene disponibles 65535 puertos. Sin embargo, la entidad Internet Assigned Numbers Authority (IANA) ha asignado algunos puertos (exactamente 1024) para ciertas aplicaciones, incluyendo el puerto SSH. Por defecto, todas las conexiones SSH se ejecutan en el puerto 22.

              Debido a que el puerto a través del cual pasan las conexiones SSH es muy conocido y se sabe que se utiliza para transmitir datos sensibles, suele ser uno de los destinos favoritos de los ciberdelincuentes. Por lo tanto, algunos usuarios piensan que tiene sentido reubicar el puerto SSH para evitar ataques, aunque esta solución solo ofrece protección a corto plazo. Con un escáner de puertos es posible encontrar cualquier puerto utilizado por un PC.

              Con SSH, el reenvío de puertos también es posible: el puerto SSH de un cliente o un servidor es utilizado por otro participante dentro de una red local para crear una conexión segura a través de Internet. Para ello, los participantes crean un túnel: los datos se reciben a través del puerto 22 y se envían al cliente a través de la red local.

              Clientes SSH

              El cliente SSH suele ser tu propio PC o el que utilices para establecer una conexión con el servidor. Para lograr esto, puedes o debes (dependiendo del sistema operativo) instalar un software separado que establezca una conexión SSH. Estos programas también suelen llamarse clientes SSH. De mano de la misma SSH Communication Security podemos encontrar el cliente de pago Tectia SSH, que además proporciona un software de servidor. Además, hay muchas alternativas libres, como el software de código abierto PuTTy para Windows y Linux o lsh, que funciona en todos los sistemas operativos basados en Unix.

              Algunos programas proporcionan a los usuarios una interfaz gráfica que simplifica la configuración y la implementación de SSH. En principio, Secure Shell también puede ejecutarse desde la línea de comandos, incluso sin necesidad de instalación adicional, en macOS y otros sistemas operativos similares a Unix.

              Servidor SSH

              El servidor SSH es la parte opuesta al cliente. El término también se utiliza en este contexto para el software en sí. Gran parte del software cliente también funciona en servidores. Además, hay programas diseñados exclusivamente para servidores SSH y es común iniciar SSH en servidores en el momento del arranque, lo que garantiza que puedes acceder al servidor desde fuera en cualquier momento a través de SSH.

              Por otra parte, no es necesario que el servidor SSH sea en realidad un servidor en sentido estricto, es decir, que se encuentre en un centro de datos remoto. Los usuarios también pueden instalar un servidor SSH en su propio PC en casa para beneficiarse de las ventajas del reenvío de puertos, por ejemplo.

              Técnicas del protocolo SSH

              El protocolo SSH es más seguro en comparación con otros protocolos como Telnet y las técnicas de cifrado son bastante mejores que las de otros protocolos. Existen tres técnicas de cifrado principales que utiliza SSH, que son las siguientes:

              1. Hashing: El hash es una técnica de autenticación que se utiliza para garantizar si los datos recibidos provienen de un remitente genuino y no han sido alterados. Utiliza una función hash para generar un código hash a partir de los datos recibidos. Sin embargo, no es posible regenerar los datos a partir del valor hash. Este valor hash se verifica tanto en el extremo del remitente como en el del receptor. Si coincide, los datos se autentican.
              2. Cifrado simétrico: esta técnica genera una clave única para el cifrado y el descifrado. La clave generada se distribuye entre los hosts y los clientes y crea una conexión segura. Es la técnica de cifrado más básica. Funciona mejor cuando los datos se cifran y descifran en la misma máquina.
              3. Cifrado asimétrico: La técnica de cifrado asimétrico se considera más segura que otras tecnologías, ya que utiliza las claves ssh (claves públicas y privadas) para el cifrado. La clave pública se distribuye a otras máquinas para crear una conexión segura, mientras que la clave privada solo la utiliza la máquina cliente. La conexión segura se establece mediante las claves pública y privada.

              Ataque y Defensa del Protocolo SSH

              El protocolo SSH (Secure Shell) es una herramienta esencial para la administración segura de sistemas y redes. SSH permite a los administradores y usuarios autenticarse y ejecutar comandos de forma remota en servidores, todo ello de manera cifrada. A pesar de su diseño robusto, SSH no es inmune a ataques si no se configura y gestiona adecuadamente. En este artículo, se explorarán en detalle los tipos de ataques más comunes dirigidos a SSH y las mejores prácticas de defensa para asegurar este protocolo crítico.

              SSH fue desarrollado para reemplazar protocolos inseguros como Telnet, proporcionando una forma segura de comunicación y administración remota. SSH opera en la capa de aplicación del modelo OSI y utiliza el puerto TCP 22 por defecto. Ofrece tres capas principales de seguridad:

              1. Transporte: Proporciona confidencialidad, integridad y autenticación del servidor utilizando criptografía.
              2. Autenticación de Usuario: Permite la autenticación segura de usuarios mediante contraseñas, claves públicas, o autenticación multifactor.
              3. Conexión: Administra la capa de sesión, permitiendo la multiplexación de múltiples canales lógicos sobre una sola conexión SSH.

              1. Ataques de Fuerza Bruta

              Descripción: Los ataques de fuerza bruta son uno de los métodos más comunes utilizados para comprometer SSH. En estos ataques, los atacantes intentan repetidamente adivinar el nombre de usuario y la contraseña hasta que encuentran una combinación correcta. SSH es particularmente vulnerable a estos ataques si se utilizan contraseñas débiles o predeterminadas.

              Métodos de Ejecución:

              • Automatización: Herramientas como Hydra, Medusa y Burp Suite pueden ser utilizadas para automatizar intentos de autenticación con miles de combinaciones de usuario y contraseña.

              Consecuencias:

              • Acceso No Autorizado: Una vez que el atacante adivina las credenciales correctas, puede obtener acceso completo al sistema, lo que podría resultar en la ejecución de comandos maliciosos, robo de datos, o incluso un compromiso completo del servidor.

              Defensa Contra Ataques de Fuerza Bruta:

              • Contraseñas Fuertes y Complejas: Implementar políticas de contraseñas que requieran el uso de caracteres alfanuméricos, mayúsculas, minúsculas y símbolos.
              • Autenticación Basada en Claves Públicas: Utilizar claves SSH en lugar de contraseñas para la autenticación. Las claves públicas son mucho más difíciles de adivinar o comprometer.
              • Limitar Intentos de Inicio de Sesión: Configurar el servidor SSH para bloquear temporalmente o permanentemente una cuenta después de un número determinado de intentos fallidos.
              • Fail2Ban: Utilizar herramientas como Fail2Ban para monitorizar intentos de acceso fallidos y bloquear automáticamente las direcciones IP sospechosas.

              Ataque por fuerza bruta con Hidra y MS

              Este tipo de ataque se realiza fácilmente con herramientas como Hydra, Medusa o Patator.

              Un comando típico con Hydra para atacar un servidor SSH podría ser:

              hydra -l usuario -P /ruta/al/diccionario.txt ssh://192.168.1.100

              Aquí, Hydra intenta acceder al servidor 192.168.1.100 con el usuario usuario probando todas las contraseñas del archivo de diccionario.

              Metasploit tiene una función auxiliar que usaremos en el servicio SSH que se ejecuta en el puerto 22. Una vez que obtengamos nuestra sesión a través de él, lo actualizaremos a Meterpreter.

              Este módulo probará los inicios de sesión ssh en una variedad de máquinas e informará los inicios de sesión exitosos. Si ha cargado un complemento de base de datos y se ha conectado a una base de datos, este módulo registrará los inicios de sesión y los hosts exitosos para que pueda realizar un seguimiento de su acceso.

              2. Ataques de Hombre en el Medio (MitM)

              Descripción: Un ataque MitM contra SSH ocurre cuando un atacante intercepta y potencialmente altera la comunicación entre el cliente y el servidor SSH. Aunque SSH utiliza cifrado, si un atacante logra hacerse pasar por el servidor o el cliente, puede capturar datos sensibles o modificar la información transmitida.

              Métodos de Ejecución:

              • Suplantación de Clave del Servidor: Un atacante puede presentar una clave pública falsa al cliente, haciéndose pasar por el servidor SSH legítimo, y capturar el tráfico en texto claro antes de reenviarlo al servidor real.

              Consecuencias:

              • Intercepción de Datos Sensibles: El atacante puede capturar credenciales de autenticación, comandos ejecutados, y datos transferidos entre el cliente y el servidor.
              • Modificación de Tráfico: El atacante puede alterar los comandos enviados por el cliente o las respuestas del servidor, lo que podría resultar en la ejecución de acciones no autorizadas.

              Defensa Contra Ataques MitM:

              • Verificación de Claves del Servidor: Configurar los clientes SSH para que verifiquen la huella digital (fingerprint) del servidor SSH antes de establecer la conexión, asegurando que la clave pública del servidor no ha sido cambiada.
              • SSH Fingerprint Validation: Utilizar métodos adicionales de validación, como la verificación manual de la huella digital del servidor en la primera conexión.
              • Certificados SSH: Implementar un sistema de autoridades de certificación (CA) para emitir y verificar certificados SSH, garantizando la autenticidad de las claves del servidor.

              3. Robo de Claves Privadas

              Descripción: Las claves SSH son un método preferido de autenticación debido a su seguridad superior en comparación con las contraseñas. Sin embargo, si una clave privada es comprometida, el atacante puede utilizarla para acceder a cualquier servidor que acepte esa clave.

              Métodos de Ejecución:

              • Exfiltración de Claves Privadas: Los atacantes pueden utilizar malware, phishing o técnicas de ingeniería social para robar la clave privada almacenada en el sistema del usuario.
              • Acceso Físico: Si un atacante obtiene acceso físico a un dispositivo donde se almacena una clave privada sin cifrar, puede copiarla y utilizarla para acceder a servidores remotos.

              Consecuencias:

              • Acceso No Autorizado a Múltiples Sistemas: Si la clave privada es utilizada en varios servidores, el atacante podría obtener acceso no autorizado a múltiples sistemas, comprometiendo una gran parte de la infraestructura.
              • Escalada de Privilegios: Con acceso a servidores remotos, el atacante podría escalar sus privilegios y obtener control total sobre los sistemas afectados.

              Defensa Contra el Robo de Claves Privadas:

              • Cifrado de Claves Privadas: Asegurarse de que todas las claves privadas estén cifradas con una contraseña segura, de modo que incluso si son robadas, no puedan ser utilizadas sin la contraseña de descifrado.
              • Uso de Agentes SSH: Utilizar agentes SSH para gestionar claves privadas y evitar que estén expuestas en la memoria o en archivos sin cifrar.
              • Implementación de MFA: Complementar la autenticación basada en claves con un segundo factor de autenticación para aumentar la seguridad.

              4. Ataques de Fuerza Bruta Inversa

              Descripción: En un ataque de fuerza bruta inversa, el atacante conoce la clave privada del usuario pero intenta adivinar los nombres de usuario válidos en el servidor. Esto es particularmente peligroso si la clave privada se ha filtrado o ha sido robada.

              Métodos de Ejecución:

              • Adivinación de Nombres de Usuario: El atacante utiliza la clave privada para intentar iniciar sesión en el servidor SSH con diferentes combinaciones de nombres de usuario.

              Consecuencias:

              • Acceso No Autorizado: Si el atacante encuentra un nombre de usuario válido que coincide con la clave privada, puede obtener acceso al servidor.

              Defensa Contra Fuerza Bruta Inversa:

              • Restringir el Uso de Claves Públicas: Configurar el servidor para aceptar solo claves públicas para nombres de usuario específicos y conocidos.
              • Monitoreo de Acceso SSH: Implementar herramientas de monitoreo para detectar patrones de ataque de fuerza bruta inversa y bloquear IPs sospechosas.

              5. Explotación de Vulnerabilidades en Implementaciones de SSH

              Descripción: A pesar de ser un protocolo seguro, las implementaciones de servidores SSH pueden contener vulnerabilidades que, si no se parchean, pueden ser explotadas por atacantes para comprometer el servidor.

              Métodos de Ejecución:

              • Explotación de Vulnerabilidades: Los atacantes pueden utilizar exploits disponibles públicamente para aprovechar vulnerabilidades específicas en versiones no parcheadas de servidores SSH.

              Consecuencias:

              • Compromiso del Servidor: El atacante podría obtener acceso completo al servidor, ejecutar código malicioso, o interrumpir los servicios.
              • Denegación de Servicio (DoS): Un ataque exitoso podría deshabilitar el servidor SSH, impidiendo que los usuarios legítimos accedan al sistema.

              Defensa Contra Explotación de Vulnerabilidades:

              • Actualización Regular del Software: Asegurarse de que el software del servidor SSH esté actualizado con los últimos parches de seguridad.
              • Reducción de Superficie de Ataque: Deshabilitar características de SSH que no sean necesarias, como el reenvío de X11 o el acceso por contraseña, para minimizar el riesgo de explotación.

              Mejores Prácticas para Asegurar SSH

              1. Uso de Claves SSH en Lugar de Contraseñas
                • Descripción: Las claves SSH ofrecen una mayor seguridad que las contraseñas debido a su complejidad y la dificultad de adivinarlas mediante ataques de fuerza bruta.
                • Implementación: Configurar el servidor para aceptar solo la autenticación basada en claves, deshabilitando completamente el uso de contraseñas.
              2. Limitación de Acceso a SSH
                • Descripción: Restringir el acceso SSH a direcciones IP específicas o rangos de IP mediante listas de control de acceso (ACL) en firewalls o routers.
                • Beneficios: Limitar el acceso reduce significativamente la superficie de ataque y la exposición a intentos de acceso no autorizados.

              Cómo Asegurar SSH en Linux

              Para proteger SSH de posibles ataques, es crucial seguir ciertas mejores prácticas de seguridad. A continuación, algunos de los pasos más importantes para asegurar tu servidor SSH:

              1. Deshabilitar el Acceso de Root

              Es una práctica común deshabilitar el acceso directo al usuario root a través de SSH, lo que obliga a los administradores a iniciar sesión con un usuario no privilegiado antes de escalar permisos. Para deshabilitar el acceso root, modifica el archivo de configuración SSH /etc/ssh/sshd_config y cambia la siguiente línea:

              PermitRootLogin no

              2. Autenticación basada en Claves Públicas

              La autenticación por clave pública/privada es mucho más segura que las contraseñas. En lugar de ingresar una contraseña, los usuarios deben tener una clave privada que coincida con una clave pública registrada en el servidor. Esto hace que sea prácticamente imposible para los atacantes realizar ataques de fuerza bruta.

              Para configurar la autenticación por claves:

              Genera un par de claves en tu máquina local:

              ssh-keygen -t rsa

              Luego, copia la clave pública al servidor:

              ssh-copy-id usuario@servidor_remoto

              Asegúrate de que el archivo de configuración SSH en el servidor (/etc/ssh/sshd_config) esté configurado para aceptar solo autenticación por claves:

              PasswordAuthentication no
              PubkeyAuthentication yes

                3. Usar Puertos No Estándar

                Cambiar el puerto por defecto de SSH (22) a otro menos común puede reducir la cantidad de ataques automatizados de fuerza bruta. Aunque esto no es una medida de seguridad fuerte por sí misma, ayuda a reducir la exposición a escáneres de red. Para cambiar el puerto, edita el archivo de configuración /etc/ssh/sshd_config y cambia la siguiente línea:

                Port 2222

                4. Implementar Autenticación de Dos Factores (2FA)

                SSH puede configurarse para requerir autenticación de dos factores, lo que añade una capa adicional de seguridad. Herramientas como Google Authenticator pueden integrarse con SSH para solicitar un segundo factor, como un código de verificación temporal.

                5. Restringir el Acceso por IP

                Usa un firewall como iptables o ufw para limitar el acceso al puerto SSH solo a IPs de confianza. También puedes configurar el archivo /etc/hosts.allow y /etc/hosts.deny para permitir o denegar conexiones SSH de ciertas direcciones IP.

                6. Configurar el Tiempo de Expiración de Sesiones Inactivas

                Para prevenir que sesiones SSH inactivas permanezcan abiertas y accesibles, puedes configurar un tiempo de expiración. En el archivo /etc/ssh/sshd_config, añade o ajusta los siguientes parámetros:

                ClientAliveInterval 300
                ClientAliveCountMax 0

                Esto cierra sesiones inactivas después de 5 minutos.

                Resumen detallado del artículo

                1. ¿Qué es SSH y para qué se utiliza?

                • Propósito de SSH: Establecer conexiones seguras entre dos computadoras dentro de redes inseguras (como Internet) mediante cifrado.
                • Aplicaciones de SSH:
                  • Administración remota de servidores.
                  • Transferencia de archivos segura (por SFTP).
                  • Mantenimiento y copias de seguridad remotas.
                  • Conexión segura entre dispositivos con cifrado de extremo a extremo.

                2. Comando SSH en Linux

                • Sintaxis básica: ssh nombre_usuario@host (IP o nombre_de_dominio)
                • Componentes del comando SSH:
                  • Comando ssh: Solicita crear una conexión cifrada.
                  • nombre_usuario: Usuario de acceso en el sistema remoto.
                  • host: Dirección IP o dominio del servidor remoto.
                • Comandos SSH adicionales:
                  • ssh-keygen: Genera pares de claves.
                  • ssh-copy-id: Copia la clave pública al servidor.
                  • scp y sftp: Herramientas para transferencia de archivos seguras.

                3. SSH vs. OpenSSH

                • SSH comercial: Desarrollado por SSH Communication Security, con soporte y servicios adicionales.
                • OpenSSH: Versión de código abierto ampliamente usada y desarrollada por la comunidad.
                • Principales diferencias: El SSH comercial ofrece soporte 24/7 y algunas características propietarias, mientras que OpenSSH es gratuito y más accesible para usuarios y desarrolladores.

                4. Instalación de SSH en Linux

                • Cliente OpenSSH: sudo apt update && sudo apt install openssh-client
                • Servidor OpenSSH: sudo apt install openssh-server service ssh status # Verificar la instalación y el estado del servidor SSH

                5. Generación y uso de claves SSH

                • Crear un par de claves SSH: ssh-keygen
                  • Genera un par de claves pública (id_rsa.pub) y privada (id_rsa).
                • Configurar autenticación por clave:
                  • Copiar la clave pública al servidor: ossh-copy-id usuario@servidor_remoto
                  • Configuración recomendada en el servidor (/etc/ssh/sshd_config): PasswordAuthentication no PubkeyAuthentication yes

                6. Seguridad en SSH: Cifrado y autenticación

                • Autenticación mutua: El servidor y el cliente se autentican entre sí mediante claves.
                • Cifrado simétrico y asimétrico:
                  • Simétrico: Se usa una única clave de sesión para cifrar y descifrar durante la conexión.
                  • Asimétrico: Involucra una clave pública y una privada, proporcionando seguridad avanzada.
                • Hashing: Genera firmas únicas para cada paquete transmitido para detectar modificaciones no autorizadas.

                7. Ataques comunes y defensa en SSH

                • Ataques de fuerza bruta:
                  • Descripción: Intentos de adivinar contraseñas mediante múltiples combinaciones.
                  • Defensa: Implementar autenticación por clave, limitar intentos fallidos y usar herramientas como Fail2Ban.
                • Man-in-the-Middle (MitM):
                  • Descripción: Intercepción de comunicaciones entre cliente y servidor SSH.
                  • Defensa: Verificación de claves del servidor y usar certificados SSH para autenticación.
                • Robo de claves privadas:
                  • Descripción: Acceso no autorizado mediante robo de claves SSH privadas.
                  • Defensa: Cifrar claves privadas y usar autenticación multifactor (MFA).
                • Explotación de vulnerabilidades en SSH:
                  • Descripción: Aprovechar errores en implementaciones de servidores SSH sin parches.
                  • Defensa: Actualizar regularmente el software y deshabilitar funciones no necesarias.

                8. Mejores prácticas para asegurar SSH

                • Deshabilitar el acceso root: Prevenir acceso directo al usuario root cambiando PermitRootLogin a no en /etc/ssh/sshd_config.
                • Usar puertos no estándar: Cambiar el puerto predeterminado 22 para evitar ataques automatizados.
                • Limitar acceso por IP: Configurar firewalls para permitir solo direcciones IP confiables.
                • Configurar tiempo de inactividad: Establecer límites para cerrar automáticamente conexiones inactivas: ClientAliveInterval 300 ClientAliveCountMax 0
                • Autenticación de dos factores: Configurar autenticación de múltiples factores (MFA) para mayor seguridad.

                9. Clientes SSH y servidores SSH

                • Clientes SSH populares: OpenSSH (Linux/macOS), PuTTy (Windows y Linux), Tectia SSH (comercial).
                • Servidor SSH: Normalmente sshd, que acepta conexiones y maneja la autenticación.

                Conclusión

                SSH es una herramienta esencial para conexiones remotas seguras, ofreciendo cifrado y autenticación avanzados que reemplazan los antiguos y vulnerables protocolos como Telnet. Sin embargo, para maximizar su seguridad, es crucial configurar correctamente el servidor SSH, emplear autenticación de clave pública, y proteger las claves privadas.

                Las prácticas de seguridad detalladas aquí contribuyen a crear un entorno de administración remota más seguro, previniendo ataques de fuerza bruta, MitM y robo de claves. Con estas prácticas, los administradores pueden aprovechar las ventajas de SSH mientras aseguran una comunicación remota robusta y confiable.

                Pon en práctica lo aprendido

                Ahora pon a prueba lo aprendido con estas preguntas y ejercicios.

                Preguntas sobre el uso y seguridad del protocolo SSH:

                1. ¿Qué función cumple el protocolo SSH en la comunicación entre dispositivos?
                2. ¿Por qué SSH es considerado más seguro que Telnet?
                3. ¿Cuál es el puerto TCP predeterminado para el protocolo SSH y por qué algunos administradores eligen cambiarlo?
                4. ¿Qué es OpenSSH y en qué se diferencia del SSH comercial?
                5. ¿Cómo se genera una clave SSH en un sistema Linux y por qué es importante usarla en lugar de contraseñas?
                6. ¿Qué es un ataque de fuerza bruta en SSH y qué herramientas suelen utilizarse para ejecutarlo?
                7. ¿Cómo se puede configurar SSH para evitar ataques de fuerza bruta en Linux?
                8. ¿Qué papel cumple el reenvío de puertos en SSH?
                9. ¿Qué técnicas de cifrado utiliza SSH para garantizar una conexión segura?
                10. ¿Qué es un ataque de hombre en el medio (MitM) y cómo se puede prevenir en conexiones SSH?

                Ejercicios para practicar el uso de SSH y asegurar sus conexiones:

                1. Instalar y verificar SSH en una máquina Linux:
                  • Instala el cliente SSH y el servidor OpenSSH. Luego, verifica el estado del servidor SSH.
                2. Conectar a un servidor remoto usando SSH:
                  • Establece una conexión SSH con un servidor remoto utilizando el comando ssh usuario@direccion_IP.
                3. Generar un par de claves SSH:
                  • Usa el comando ssh-keygen para crear claves públicas y privadas, y verifica su ubicación en el sistema.
                4. Configurar autenticación sin contraseña:
                  • Copia tu clave pública al servidor remoto con ssh-copy-id usuario@direccion_IP y accede sin usar una contraseña.
                5. Deshabilitar el acceso SSH para el usuario root:
                  • Modifica el archivo de configuración SSH (/etc/ssh/sshd_config) para evitar el acceso directo de root y refuerza la seguridad.
                6. Cambiar el puerto de SSH:
                  • Configura el servidor SSH para escuchar en un puerto diferente al 22 y verifica la conexión en el nuevo puerto.
                7. Implementar autenticación de dos factores (2FA) en SSH:
                  • Instala y configura Google Authenticator para añadir autenticación de dos factores a las sesiones SSH.
                8. Aplicar restricciones de acceso basadas en IP:
                  • Configura ufw o iptables para permitir conexiones SSH solo desde IPs de confianza.
                9. Configurar tiempo de expiración para sesiones SSH inactivas:
                  • Ajusta los parámetros ClientAliveInterval y ClientAliveCountMax en /etc/ssh/sshd_config para cerrar sesiones inactivas automáticamente.
                10. Monitorear intentos de conexión fallidos:
                  • Revisa los intentos fallidos de acceso SSH en /var/log/auth.log y configura fail2ban para bloquear IPs que realicen intentos fallidos reiterados.

                Respuestas detalladas a las preguntas sobre SSH:

                1. Función del protocolo SSH: SSH permite una conexión segura entre dispositivos en una red, proporcionando cifrado, autenticación y privacidad en la comunicación, especialmente útil para acceso remoto y administración de servidores.
                2. Seguridad de SSH frente a Telnet: SSH cifra los datos transmitidos entre el cliente y el servidor, mientras que Telnet envía todo en texto plano, lo que hace que SSH sea mucho más seguro contra interceptación y ataques MitM.
                3. Puerto TCP predeterminado de SSH: SSH usa el puerto TCP 22 de forma predeterminada. Sin embargo, los administradores a menudo cambian este puerto para dificultar ataques automatizados de fuerza bruta dirigidos a este puerto conocido.
                4. OpenSSH vs. SSH comercial: OpenSSH es una implementación de código abierto y gratuita del protocolo SSH, mientras que SSH comercial es una versión propietaria con soporte dedicado. Ambas tienen funcionalidades similares, aunque el SSH comercial puede ofrecer soporte 24/7.
                5. Generación de claves SSH en Linux: La clave SSH se genera con el comando ssh-keygen. Usar claves en lugar de contraseñas mejora la seguridad, ya que las claves son mucho más complejas y difíciles de adivinar o interceptar.
                6. Ataque de fuerza bruta en SSH: Es un intento de adivinar las credenciales mediante múltiples combinaciones de usuario y contraseña. Herramientas como Hydra y Medusa son comunes para ejecutar estos ataques.
                7. Configuración de SSH para evitar ataques de fuerza bruta: Es posible limitar los intentos de inicio de sesión y habilitar autenticación con clave pública. Herramientas como fail2ban pueden bloquear IPs con demasiados intentos fallidos.
                8. Reenvío de puertos en SSH: Permite que una aplicación en una máquina remota acceda a la red local del cliente, creando un túnel seguro a través de SSH para el tráfico de red.
                9. Técnicas de cifrado de SSH: SSH usa cifrado simétrico (para la sesión), cifrado asimétrico (para la autenticación) y hashing (para integridad), garantizando que solo los participantes autorizados puedan leer o modificar los datos transmitidos.
                10. Ataque de MitM y prevención en SSH: Un ataque MitM intercepta la comunicación entre el cliente y el servidor. SSH previene este ataque mediante la validación de huellas digitales del servidor y el uso de cifrado robusto.

                Respuestas detalladas a los ejercicios sobre SSH:

                1. Instalación y verificación de SSH: sudo apt update sudo apt install openssh-client openssh-server sudo systemctl status ssh
                2. Conexión SSH a servidor remoto: ssh usuario@direccion_IP Este comando abre una sesión remota segura en el servidor usando el nombre de usuario y la dirección IP especificados.
                3. Generar un par de claves SSH: ssh-keygen Las claves se almacenan por defecto en ~/.ssh/id_rsa (clave privada) y ~/.ssh/id_rsa.pub (clave pública).
                4. Configurar autenticación sin contraseña: ssh-copy-id usuario@direccion_IP Este comando copia la clave pública al servidor remoto, permitiendo la autenticación sin contraseña en sesiones futuras.
                5. Deshabilitar el acceso SSH de root:
                  • Edita /etc/ssh/sshd_config y cambia: PermitRootLogin no
                  • Luego reinicia SSH: sudo systemctl restart ssh
                6. Cambiar el puerto SSH:
                  • Cambia el puerto en /etc/ssh/sshd_config: Port 2222
                  • Reinicia el servicio SSH: sudo systemctl restart ssh
                7. Implementar autenticación de dos factores (2FA):
                  • Instala Google Authenticator: sudo apt install libpam-google-authenticator
                  • Configura SSH para solicitar el código 2FA junto con la clave SSH o la contraseña.
                8. Restricción de acceso por IP:
                  • Usa ufw para permitir solo ciertas IPs: sudo ufw allow from direccion_IP to any port 22
                9. Configurar expiración de sesiones SSH inactivas:
                  • Ajusta estos parámetros en /etc/ssh/sshd_config: ClientAliveInterval 300 ClientAliveCountMax 0
                  • Reinicia SSH para aplicar los cambios.
                10. Monitorear intentos de conexión fallidos:
                  • Usa tail para revisar los registros de autenticación sudo tail -f /var/log/auth.log
                  • Configura fail2ban para bloquear IPs que intenten múltiples accesos fallidos: sudo apt install fail2ban sudo systemctl start fail2ban

                No te detengas, sigue avanzando

                Aquí tienes un propósito que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera! El mundo necesita más hackers…

                ¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

                Sobre los autores

                Álvaro Chirou

                Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes seguirme en mis redes:

                Laprovittera Carlos

                Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

                Hacker de 0 a 100 desde las bases hasta conseguir empleo

                ¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/hacker-de-0-a-100-desde-las-bases-hasta-conseguir-empleo/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

                Hemos creado una ruta de 0 a 100. Un plan de desarrollo que va desde las bases: cómo aprender hacking, qué aprender, en qué orden; pasando por las areas técnicas necesarias como Linux, Redes, Programación y los conocimientos necesarios en ciber seguridad, hacking, pentesting hasta la práctica y el inicio laboral: Crear tu propio laboratorio, certificaciones, adquirir experiencia e iniciarse laboralmente.

                Este es un mega post. Una guía con más de 250 artículos que te llevaran por el camino del hacker. Esta guía es gratuita y esta creada gracias al esfuerzo y al trabajo combinado de Alvaro Chirou y mío (Laprovittera Carlos).

                Creamos esta guía (futuro curso) para que puedas iniciarte en este mundo. Puedes arrancar ahora, GRATIS, solo necesitas un PC, conexión a internet y paciencia (Ser hacker NO ES un camino de la noche a la mañana).

                El Hacking y la ciberseguridad es una carrera divertida, emocionante y gratificante que te recompensará y desafiará por igual. Sin embargo, para quienes buscan adentrarse en este campo en auge y en constante evolución, puede resultar difícil saber por dónde empezar. ¡Ahí es donde entra en juego nuestra guía en ciberseguridad!

                Esta es la hoja de ruta hacia el trabajo de ciberseguridad de tus sueños. Te ayudará a entender qué conocimientos, habilidades y certificados son necesarios para alcanzar tus metas profesionales y tener una carrera próspera. Si quieres ser consultor de ciberseguridad, analista de malware, evaluador de penetración, analista de SOC o cualquier otro puesto de ciberseguridad, esta guía es lo que necesitas.

                SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

                Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

                Compartimos estos recursos para ayudar a la comunidad de hacking y ciberseguridad. COMPARTE y Siéntete libre de agregar más sugerencias en los comentarios a continuación, respondemos todos y cada uno de los comentarios.

                Saludos amigos y happy hacking!!!