Conexiones SSH


Conexiones SSH (Secure Shell)

¿Qué es SSH?

SSH (Secure Shell) es un protocolo de red que permite a los usuarios acceder y administrar de forma segura un servidor o dispositivo a través de una red insegura. SSH proporciona autenticación fuerte, comunicación encriptada y la integridad de los datos, asegurando que las comunicaciones entre el cliente y el servidor sean confidenciales y a prueba de manipulaciones.

Componentes Clave de SSH

  1. Cliente SSH:

    • Un software que inicia la conexión con el servidor SSH.
    • Ejemplos: ssh en Linux, PuTTY en Windows.
  2. Servidor SSH:

    • Un software que acepta conexiones desde clientes SSH.
    • Ejemplos: sshd en Linux.
  3. Autenticación:

    • Métodos para verificar la identidad del cliente.
    • Ejemplos: contraseñas, claves públicas/privadas, autenticación de dos factores.
  4. Encriptación:

    • Cifrado de datos para asegurar la privacidad y la integridad de la comunicación.
    • Ejemplos de algoritmos de cifrado: AES, Blowfish.
  5. Túneles SSH:

    • Canales seguros que permiten el redireccionamiento de tráfico a través de la conexión SSH.
    • Tipos: túnel local, túnel remoto, túnel dinámico.

Funcionalidades Principales de SSH

  1. Acceso Remoto Seguro:

    • Permite a los usuarios acceder y controlar máquinas remotas de forma segura.
    • Comando: ssh usuario@servidor
  2. Transferencia Segura de Archivos:

    • SCP (Secure Copy Protocol): Transferencia segura de archivos.
      • Comando: scp archivo_local usuario@servidor:/ruta/remota
    • SFTP (SSH File Transfer Protocol): Transferencia interactiva de archivos.
      • Comando: sftp usuario@servidor
  3. Túneles SSH:

    • Túnel Local: Redirige el tráfico desde un puerto local a un servidor remoto.
      • Comando: ssh -L puerto_local:host_remoto:puerto_remoto usuario@servidor
    • Túnel Remoto: Redirige el tráfico desde un puerto remoto a una máquina local.
      • Comando: ssh -R puerto_remoto:host_local:puerto_local usuario@servidor
    • Túnel Dinámico: Crea un proxy SOCKS que puede redirigir el tráfico a múltiples destinos.
      • Comando: ssh -D puerto_local usuario@servidor

Ejemplos Prácticos

1. Conexión SSH Básica

Conéctate a un servidor remoto utilizando SSH:

ssh usuario@servidor_remoto

2. Uso de Claves SSH

Genera un par de claves SSH (pública y privada):

ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa

Copia la clave pública al servidor remoto:

ssh-copy-id usuario@servidor_remoto

Conéctate al servidor utilizando la clave SSH:

ssh -i ~/.ssh/id_rsa usuario@servidor_remoto

3. Transferencia de Archivos con SCP

Copia un archivo local a un servidor remoto:

scp archivo.txt usuario@servidor_remoto:/ruta/remota

Copia un archivo desde un servidor remoto a tu máquina local:

scp usuario@servidor_remoto:/ruta/remota/archivo.txt /ruta/local

4. Túnel Local

Redirige el tráfico desde el puerto local 8080 a un servidor web remoto en el puerto 80:

ssh -L 8080:www.ejemplo.com:80 usuario@servidor_remoto

5. Túnel Remoto

Redirige el tráfico desde el puerto 9090 en el servidor remoto a un servidor web local en el puerto 80:

ssh -R 9090:localhost:80 usuario@servidor_remoto

6. Túnel Dinámico

Crea un proxy SOCKS en el puerto local 1080:

ssh -D 1080 usuario@servidor_remoto

Configura tu navegador para usar localhost:1080 como un proxy SOCKS para redirigir el tráfico a través del servidor SSH.

Seguridad en SSH

  1. Autenticación de Claves Públicas/Privadas:

    • Más segura que el uso de contraseñas.
    • Implica generar un par de claves y almacenar la clave pública en el servidor.
  2. Desactivar el Acceso Root Directo:

    • Mejora la seguridad al evitar que el usuario root inicie sesión directamente.
    • Configuración en /etc/ssh/sshd_config:
      PermitRootLogin no
  3. Cambio del Puerto por Defecto:

    • El puerto por defecto para SSH es el 22. Cambiarlo puede reducir los intentos de intrusión automatizados.
    • Configuración en /etc/ssh/sshd_config:
      Port 2222
  4. Autenticación de Dos Factores (2FA):

    • Añade una capa adicional de seguridad.
    • Puede configurarse utilizando herramientas como Google Authenticator.
  5. Firewall y Limitación de Acceso:

    • Usar firewalls para limitar el acceso al puerto SSH.
    • Configurar iptables o ufw para permitir solo direcciones IP específicas.

Conclusión

SSH es una herramienta esencial para la administración remota de sistemas y la transferencia segura de datos. Ofrece múltiples capas de seguridad, incluyendo autenticación de claves públicas, encriptación de datos y soporte para túneles seguros. La comprensión y el uso adecuado de SSH permiten a los administradores de sistemas y a los usuarios finales interactuar de manera segura y eficiente con los recursos de la red.


Link de la pagina para practicar

image

ssh bandit0@bandit.labs.overthewire.org -p 2220

Recuerda que la contraseña para el usuario ‘bandit0‘ es ‘bandit0‘.

export TERM=xter

Nivel 1

image

Nivel 2

image

Nivel 3

image

Nivel 4

image

Nivel 5

image

Nivel 6

image

Nivel 7

image

Nivel 8

image

Nivel 9

image

Nivel 10

image

Nivel 11

image

Nivel 12

image

Nivel 13

image

image

image

image

image

Y asi hasta el final

#!/bin/bash

function ctrl_c(){
  echo -e "\n\n[!] Saliendo...\n"
  exit 1
}

# Ctrl+C
trap ctrl_c INT

first_file_name="data.gz"
decompressed_file_name="$(7z l data.gz | tail -n 3 | head -n 1 | awk 'NF{print $NF}')"

7z x $first_file_name &>/dev/null

while [ $decompressed_file_name ]; do
  echo -e "\n[+] Nuevo archivo descomprimido: $decompressed_file_name"
  7z x $decompressed_file_name &>/dev/null
  decompressed_file_name="$(7z l $decompressed_file_name 2>/dev/null | tail -n 3 | head -n 1 | awk 'NF{print $NF}')"
done

image

Nivel 14

El manejo de pares de claves y las conexiones SSH son aspectos fundamentales para garantizar una comunicación segura entre dos máquinas en una red, especialmente en entornos de administración de sistemas y en la nube. Aquí te explico en detalle cómo funcionan los pares de claves, cómo se utilizan en conexiones SSH y cómo puedes gestionarlos.

Concepto de Pares de Claves

1. Pares de Claves

Un par de claves SSH consiste en dos claves criptográficas:

  • Clave Privada: La clave privada es secreta y debe ser guardada de forma segura por el usuario. Nunca debe ser compartida.
  • Clave Pública: La clave pública puede ser compartida libremente con cualquier servidor al que el usuario desee conectarse.

Estas claves se utilizan en un algoritmo criptográfico que asegura que la identidad del usuario pueda ser verificada por el servidor sin necesidad de enviar la clave privada a través de la red.

2. Criptografía Asimétrica

Las claves SSH utilizan criptografía asimétrica. La clave privada genera una firma digital única que solo puede ser verificada por su correspondiente clave pública. Esto permite que las comunicaciones sean seguras y que solo el poseedor de la clave privada pueda iniciar una sesión segura.

Conexiones SSH Usando Pares de Claves

Proceso de Conexión SSH

  1. Generación de Par de Claves: El primer paso es generar un par de claves usando ssh-keygen.

    ssh-keygen -t rsa -b 4096

    Esto genera una clave privada y una clave pública (por defecto, id_rsa y id_rsa.pub).

  2. Copiar la Clave Pública al Servidor: La clave pública debe ser colocada en el archivo authorized_keys del servidor.

    ssh-copy-id usuario@servidor

    Este comando copia automáticamente la clave pública al servidor en el archivo adecuado.

  3. Inicio de Sesión SSH: Cuando el usuario intenta iniciar sesión en el servidor, el servidor crea un mensaje, lo cifra con la clave pública y lo envía al cliente.

    ssh usuario@servidor

    El cliente usa la clave privada para descifrar el mensaje. Si el descifrado es exitoso, se demuestra la posesión de la clave privada y se establece la sesión sin necesidad de contraseña.

Ventajas del Uso de Pares de Claves en SSH

  • Seguridad Mejorada: Es mucho más difícil comprometer una clave criptográfica que adivinar una contraseña.
  • Automatización: Las conexiones pueden ser automatizadas sin intervención humana, ideal para scripts y tareas automatizadas.
  • Control de Acceso: Las claves pueden ser añadidas o revocadas fácilmente del servidor para permitir o restringir el acceso.

Mejores Prácticas de Seguridad

  • Proteger la Clave Privada: La clave privada debe ser guardada de forma segura, protegida por una frase de paso fuerte y solo accesible por el usuario.
  • Permisos Adecuados: Asegúrate de que los permisos de los archivos de claves privadas sean restrictivos (chmod 600 ~/.ssh/id_rsa).
  • Rotación de Claves: Las claves deben ser cambiadas regularmente para mitigar los riesgos asociados con el robo o compromiso de claves a largo plazo.
  • Uso de ssh-agent: Utiliza ssh-agent para mantener las claves cargadas en memoria y seguras, evitando tener que introducir la frase de paso cada vez.

Conclusión

El manejo efectivo de pares de claves es esencial para mantener seguras las conexiones SSH. A través del uso de criptografía asimétrica, se puede asegurar que las conexiones entre el cliente y el servidor sean confiables y seguras, minimizando el riesgo de interceptación o acceso no autorizado. Con una configuración adecuada y siguiendo las mejores prácticas de seguridad, los pares de claves SSH proporcionan una herramienta robusta para la gestión segura de servidores y automatización de tareas.

image

image image

Nivel 15

image

Nivel 16

image

Nivel 17

#!/bin/bash

function ctrl_c(){
  echo -e "\n\n[!] Saliendo...\n"
  exit 1
}

# Ctrl+C
trap ctrl_c INT

for i in $(seq 1 254); do
  timeout 1 bash -c "ping -c 1 192.168.1.$i &>/dev/null" && echo "[+] Host 192.168.1.$i - ACTIVE" &
done; wait
#!/bin/bash

function ctrl_c(){
  echo -e "\n\n[!] Saliendo...\n"
  tput cnorm; exit 1
}

# Ctrl+C
trap ctrl_c INT

tput civis # Ocultar el cursor
for port in $(seq 1 65535); do
  (echo '' > /dev/tcp/127.0.0.1/$port) 2>/dev/null && echo "[+] $port - OPEN" &
done; wait

# Recuperamos el cursor
tput cnorm