Crear un chat seguro en Netcat

WiresharkWiresharkBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo establecer una comunicación segura entre dos puntos finales utilizando Netcat y OpenSSL. Practicará la creación de túneles cifrados con certificados SSL mientras configura tanto el componente de escucha como el cliente para mensajería protegida.

A través de ejercicios prácticos, generará certificados autofirmados, configurará un servidor OpenSSL y se conectará a través de Netcat para verificar el cifrado de extremo a extremo. Esta experiencia práctica mejorará su comprensión de las herramientas básicas de ciberseguridad para proteger las comunicaciones de red.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") wireshark/WiresharkGroup -.-> wireshark/decrypt_ssl_tls("Decrypting SSL/TLS") subgraph Lab Skills wireshark/packet_capture -.-> lab-549932{{"Crear un chat seguro en Netcat"}} wireshark/packet_analysis -.-> lab-549932{{"Crear un chat seguro en Netcat"}} wireshark/decrypt_ssl_tls -.-> lab-549932{{"Crear un chat seguro en Netcat"}} end

Instalar Netcat y OpenSSL

En este paso, instalará dos herramientas de red esenciales: Netcat y OpenSSL. Netcat (a menudo llamado nc) es como una navaja suiza digital para la comunicación de red: te permite leer y escribir en conexiones de red directamente desde la línea de comandos. OpenSSL es un potente conjunto de herramientas que proporciona funciones de cifrado, que usaremos para proteger nuestros mensajes de chat.

Antes de instalar cualquier software, es una buena práctica actualizar la lista de paquetes. Esto asegura que obtendrás las últimas versiones estables de las herramientas:

sudo apt update

Ahora instalemos Netcat. Este comando descargará e instalará el paquete automáticamente:

sudo apt install -y netcat

A continuación, instalaremos OpenSSL. Esto proporciona las capacidades de cifrado que necesitamos para una comunicación segura:

sudo apt install -y openssl

Después de la instalación, debemos verificar que ambas herramientas funcionen correctamente. Los siguientes comandos mostrarán información de la versión: la primera línea muestra la versión de Netcat y la segunda la de OpenSSL:

nc -h | head -n 1
openssl version

Deberías ver una salida similar a esta, aunque los números de versión pueden variar:

OpenBSD netcat (Debian patchlevel 1.217-2ubuntu1)
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

Si ves información de la versión como esta, ¡felicidades! Has instalado con éxito ambas herramientas y estás listo para pasar al siguiente paso, donde las usaremos para crear un chat seguro.

Configurar un túnel cifrado

En este paso, crearás un túnel cifrado utilizando OpenSSL para proteger tu comunicación Netcat. Este túnel cifrará todos los datos transmitidos entre dos puntos finales, brindando confidencialidad a tus comunicaciones de red. El cifrado es esencial porque evita que terceros no autorizados lean tus mensajes de chat mientras viajan a través de la red.

  1. Primero, genera un certificado SSL autofirmado y una clave privada en tu directorio de proyecto. Un certificado es como una tarjeta de identificación digital que ayuda a verificar la identidad de tu servidor de chat, mientras que la clave privada se utiliza para cifrar los datos:
cd ~/project
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"

Este comando crea dos archivos importantes: key.pem (tu clave privada) y cert.pem (tu certificado público). La opción -days 365 hace que el certificado sea válido durante un año, y -nodes significa que la clave privada no estará protegida por contraseña por simplicidad en este laboratorio.

  1. Verifica que los archivos de certificado se hayan creado correctamente listándolos:
ls -l key.pem cert.pem

Deberías ver ambos archivos con tamaños de alrededor de 3 - 4KB. La bandera -l muestra información detallada, incluyendo permisos y tamaños de archivos. Si estos archivos existen, has creado con éxito tus materiales de cifrado.

  1. Inicia el servidor OpenSSL que manejará las comunicaciones cifradas. Este servidor actuará como intermediario seguro para tu chat:
openssl s_server -quiet -key key.pem -cert cert.pem -port 12345

La bandera -quiet reduce los mensajes de salida, mientras que -key y -cert especifican los archivos que acabamos de crear. El puerto 12345 es donde el servidor escuchará las conexiones entrantes. Mantén esta terminal abierta y en ejecución; ahora está esperando comunicarse de forma segura con los clientes. En los siguientes pasos, nos conectaremos a este servidor seguro.

Iniciar un escuchador

En este paso, configurarás un escuchador Netcat que recibirá comunicaciones cifradas a través del túnel OpenSSL que creamos en el paso anterior. Este escuchador actuará como el extremo receptor de nuestro canal de comunicación seguro. Piénsalo como configurar un buzón seguro al que solo tú puedes acceder, donde todos los mensajes se bloquean automáticamente antes de la entrega.

  1. Primero, asegúrate de que tu servidor OpenSSL del Paso 2 todavía esté en ejecución en una terminal. Este servidor actúa como intermediario de cifrado/descifrado entre los participantes de nuestro chat. Si no está en ejecución, reinícialo:
cd ~/project
openssl s_server -quiet -key key.pem -cert cert.pem -port 12345

La bandera -quiet reduce el ruido de salida, mientras que -key y -cert especifican nuestras credenciales de cifrado. El puerto 12345 es donde opera nuestro túnel seguro.

  1. En una nueva ventana (o pestaña) de terminal, navega hasta tu directorio de proyecto. Esta separación ayuda a administrar los diferentes componentes de nuestro sistema de chat seguro:
cd ~/project
  1. Inicia el escuchador Netcat que se conectará a nuestro túnel cifrado. Netcat se encargará de la transmisión real de mensajes mientras OpenSSL gestiona el cifrado:
nc localhost 12345

Aquí, localhost significa que nos estamos conectando a nuestra propia máquina, y 12345 coincide con el puerto que utiliza nuestro servidor OpenSSL.

  1. La terminal ahora parecerá congelada - esto es normal, ya que Netcat está esperando conexiones entrantes. Mantén esta terminal abierta; la usaremos para la comunicación segura en el siguiente paso. El "congelamiento" significa que Netcat está escuchando activamente, como un teléfono esperando una llamada.

Nota: La conexión entre Netcat y OpenSSL ahora está establecida, y toda la comunicación se cifra automáticamente por OpenSSL antes de la transmisión. Esto significa que cualquier texto que escribas se codificará primero por OpenSSL, se enviará a través de la red y luego se decodificará por el destinatario, lo que lo hace ilegible para posibles espías.

Conectar y chatear

En este paso, establecerás una sesión de chat segura entre dos terminales utilizando el túnel cifrado que creamos. Esto demuestra cómo transmitir mensajes de forma segura a través de una red no confiable. El cifrado garantiza que incluso si alguien intercepta la comunicación, no podrá leer tus mensajes.

  1. Asegúrate de tener tres ventanas de terminal abiertas:

    • Terminal 1: Ejecutando el servidor OpenSSL (desde el Paso 2) - Este se encarga del cifrado/descifrado
    • Terminal 2: Ejecutando el escuchador Netcat (desde el Paso 3) - Este recibe y muestra los mensajes descifrados
    • Terminal 3: Se utilizará para enviar mensajes - Tu interfaz de escritura
  2. En la Terminal 3, conéctate al túnel cifrado como cliente. Este comando le dice a OpenSSL que se conecte a nuestro túnel seguro en el puerto 12345:

cd ~/project
openssl s_client -quiet -connect localhost:12345
  1. Escribe un mensaje de prueba en la Terminal 3 y presiona Enter. Este mensaje se cifrará automáticamente antes de la transmisión:
Hello secure world!
  1. Cambia a la Terminal 2 (el escuchador) - deberías ver tu mensaje cifrado mostrado en texto plano. Esto muestra que el mensaje se descifró correctamente en el otro extremo.

  2. Ahora escribe una respuesta en la Terminal 2 y presiona Enter. El mensaje se cifrará antes de ser enviado de vuelta:

This is a secure reply!
  1. La respuesta debería aparecer en la Terminal 3. Ahora tienes un canal de chat seguro bidireccional donde ambas partes pueden enviar y recibir mensajes cifrados.

  2. Para salir del chat, presiona Ctrl+C en todas las terminales cuando hayas terminado. Esto cierra correctamente todas las conexiones y detiene los procesos de cifrado.

Verificar el cifrado

En este último paso, verificaremos que nuestro cifrado SSL/TLS está funcionando correctamente examinando el tráfico de red en bruto. Esta demostración práctica te mostrará exactamente cómo el cifrado protege tus datos de ser leídos por partes no autorizadas. Cuando usamos OpenSSL con Netcat, toda la comunicación se transforma en texto cifrado ilegible durante la transmisión.

  1. Primero, necesitamos una herramienta para inspeccionar el tráfico de red. Instala tcpdump, que es un potente analizador de paquetes de línea de comandos:
sudo apt install -y tcpdump
  1. Abre una nueva ventana de terminal para monitorear el tráfico. Vamos a observar específicamente la interfaz de bucle invertido (lo) que gestiona el tráfico de red local en tu propia máquina. La bandera -X muestra tanto la salida hexadecimal como la ASCII, mientras que -n evita la resolución DNS para una salida más clara:
sudo tcpdump -i lo -X -n port 12345
  1. En otra terminal, reinicia nuestra sesión de chat cifrada exactamente como lo hicimos antes. Este comando establece una conexión SSL con nuestro servidor de chat que se ejecuta en el puerto 12345:
cd ~/project
openssl s_client -quiet -connect localhost:12345
  1. Ahora envía un mensaje de prueba a través de este canal cifrado. Escribe lo que quieras; usaremos este sencillo ejemplo:
This message should be encrypted
  1. Mira la ventana de tcpdump. En lugar de ver tu mensaje legible, verás datos desordenados que consisten en valores hexadecimales y caracteres ASCII aleatorios. Este es tu mensaje después del cifrado, completamente ilegible sin la clave de descifrado adecuada.

  2. Para apreciar la diferencia, comparemos esto con el tráfico sin cifrar:

    • Primero, detén todos los procesos en ejecución presionando Ctrl+C en todas las ventanas de terminal.
    • Inicia un servidor Netcat normal sin cifrado: nc -l 12345
    • Conéctate a él desde otra terminal: nc localhost 12345
    • Envía exactamente el mismo mensaje de prueba.
    • Observa cómo tcpdump ahora muestra claramente tu mensaje en texto plano en la salida.

Esta comparación demuestra claramente por qué el cifrado es importante: sin él, cualquiera que monitoree la red puede leer tus mensajes directamente.

Resumen

En este laboratorio, has aprendido cómo crear un canal de chat seguro utilizando Netcat y OpenSSL. El proceso implicó instalar las herramientas necesarias, generar certificados SSL y establecer una comunicación cifrada a través de un túnel OpenSSL.

Practicaste la configuración tanto del servidor como del cliente mientras verificabas la eficacia del cifrado. Esta combinación de las características de red de Netcat y las funciones de seguridad de OpenSSL demuestra cómo proteger la transmisión de datos de posibles espias.