Skip to content

sebasmzg/cpp-network-tcp-spoofing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TCP Chat System with Spoofing Demonstration

Objetivo

Este proyecto implementa un sistema de chat cliente-servidor usando TCP y demuestra vulnerabilidades de seguridad a través de la falsificación de paquetes TCP (TCP spoofing). El objetivo es educativo: mostrar cómo funcionan las comunicaciones TCP y cómo pueden ser comprometidas mediante técnicas de spoofing.

Componentes del Sistema

1. Servidor de Chat (tcp_serve_chat.c)

  • Maneja múltiples clientes simultáneamente usando select()
  • Retransmite mensajes entre todos los clientes conectados
  • Muestra la IP del remitente en cada mensaje
  • Escucha en el puerto 8080

2. Cliente TCP (tcp_client.c)

  • Se conecta al servidor usando TCP
  • Permite enviar y recibir mensajes en tiempo real
  • Usa select() para manejar entrada del usuario y mensajes del servidor

3. Falsificador TCP (tcp_faker.c)

  • Crea paquetes TCP falsificados usando libnet
  • Simula mensajes como si vinieran de otra IP
  • Demuestra vulnerabilidades en la validación de origen TCP

Requisitos del Sistema

  • Compilador: GCC
  • Bibliotecas:
    • Standard C libraries
    • libnet (para tcp_faker)
  • Permisos: Root/sudo (solo para tcp_faker)
  • Sistema Operativo: Linux/Unix

Instalación

Instalar dependencias (Ubuntu/Debian):

sudo apt-get install libnet1-dev gcc

Compilar los programas:

# Compilar servidor
gcc -o tcp_serve_chat tcp_serve_chat.c

# Compilar cliente
gcc -o tcp_client tcp_client.c

# Compilar falsificador
gcc -o tcp_faker tcp_faker.c -lnet

Uso

Paso 1: Iniciar el Servidor

./tcp_serve_chat

El servidor comenzará a escuchar en el puerto 8080 y mostrará:

Binding to port 8080...
Listening...
Waiting for connections...

Paso 2: Conectar Clientes

En máquinas separadas (o terminales diferentes):

./tcp_client <IP_SERVIDOR> 8080

Ejemplo:

./tcp_client 192.168.1.100 8080

Paso 3: Chatear

  • Escriba mensajes y presione Enter para enviar
  • Los mensajes aparecerán en todos los clientes conectados
  • Formato de mensaje: [IP_remitente]: mensaje

Paso 4: Demostración de Spoofing

sudo ./tcp_faker <IP_FALSA> <IP_SERVIDOR> "<mensaje>"

Ejemplo:

sudo ./tcp_faker 192.168.1.50 192.168.1.100 "Mensaje falsificado"

Comprobación de Funcionamiento

1. Chat Normal

Servidor muestra:

New connection from 192.168.1.101 (socket 4). Total clients: 1
New connection from 192.168.1.102 (socket 5). Total clients: 2
Message from 192.168.1.101: Hola desde cliente 1
Message from 192.168.1.102: Hola desde cliente 2

Clientes reciben:

Connected. Type messages and press enter to send.
[192.168.1.102]: Hola desde cliente 2
[192.168.1.101]: Hola desde cliente 1

2. Spoofing Exitoso

Al ejecutar tcp_faker:

Paquete TCP falsificado enviado desde 192.168.1.50:37024 a 192.168.1.100:8080
Mensaje: Mensaje falsificado

Servidor muestra:

Message from 192.168.1.50: Mensaje falsificado

Clientes reciben:

[192.168.1.50]: Mensaje falsificado

3. Análisis con Wireshark

Para verificar el spoofing:

  1. Iniciar Wireshark en la interfaz de red
  2. Filtrar por: tcp.port == 8080
  3. Ejecutar tcp_faker
  4. Observar que el paquete aparece con la IP falsificada como origen

Campos a verificar en Wireshark:

  • Source IP: Debe mostrar la IP falsificada
  • TCP Sequence Number: 1295486518 (hardcodeado)
  • TCP Acknowledgment Number: 2134283679 (hardcodeado)
  • TCP Flags: PSH, ACK

Vulnerabilidades Demostradas

1. Falta de Autenticación

  • El servidor acepta paquetes sin verificar la identidad real del remitente
  • No hay validación de que la IP origen sea legítima

2. Confianza en Headers TCP

  • El servidor confía en los headers TCP sin validación adicional
  • Los campos de secuencia y acknowledgment pueden ser falsificados

3. Ausencia de Cifrado

  • Los mensajes viajan en texto plano
  • Un atacante puede interceptar y modificar el tráfico

Medidas de Mitigación

Para Desarrolladores:

  1. Autenticación: Implementar sistemas de autenticación robustos
  2. Cifrado: Usar TLS/SSL para cifrar comunicaciones
  3. Validación: Verificar integridad de mensajes con checksums/HMAC
  4. Rate Limiting: Limitar frecuencia de mensajes por IP

Para Administradores de Red:

  1. Firewall: Configurar reglas estrictas de entrada/salida
  2. IDS/IPS: Implementar sistemas de detección de intrusos
  3. Monitoreo: Vigilar patrones de tráfico anómalos
  4. Segmentación: Aislar redes críticas

Archivos del Proyecto

  • tcp_serve_chat.c - Código fuente del servidor
  • tcp_client.c - Código fuente del cliente
  • tcp_faker.c - Código fuente del falsificador

Notas Importantes

⚠️ USO EDUCATIVO ÚNICAMENTE: Este código es para fines de aprendizaje sobre seguridad de redes. No debe usarse para actividades maliciosas.

⚠️ PERMISOS DE ROOT: tcp_faker requiere privilegios de root para crear raw sockets.

⚠️ ENTORNO CONTROLADO: Realice las pruebas solo en redes que posea o tenga autorización explícita para usar.

Conclusión

Este proyecto demuestra efectivamente las vulnerabilidades inherentes en las comunicaciones TCP básicas y la importancia de implementar medidas de seguridad adicionales en aplicaciones de red. La facilidad con que se pueden falsificar paquetes TCP subraya la necesidad crítica de protocolos de seguridad robustos en sistemas de producción.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages