Introducción a la comunicación en red
Siempre hemos escuchado que para realizar pruebas de penetración, un pentester debe conocer los conceptos básicos de redes como direcciones IP, subredes con clase, subredes sin clases, puertos y redes de transmisión. La primera razón es que las actividades como qué hosts están activos en el alcance aprobado y qué servicios, puertos y características tienen abiertos y receptivos determinarán qué tipo de actividades realizará un evaluador en las pruebas de penetración. El entorno sigue cambiando y los sistemas a menudo se reasignan. Por lo tanto, es muy posible que las viejas vulnerabilidades vuelvan a aparecer y, sin el buen conocimiento de escanear una red, puede suceder que los escaneos iniciales tengan que rehacerse. En las secciones siguientes, analizaremos los conceptos básicos de la comunicación en red.
Modelo de referencia
El modelo de referencia ofrece un medio de estandarización, que es aceptable en todo el mundo, ya que las personas que utilizan la red informática se encuentran en un amplio rango físico y sus dispositivos de red pueden tener una arquitectura heterogénea. Para proporcionar comunicación entre dispositivos heterogéneos, necesitamos un modelo estandarizado, es decir, un modelo de referencia, que nos proporcione una forma de comunicación de estos dispositivos.
Disponemos de dos modelos de referencia como son el modelo OSI y el modelo de referencia TCP / IP. Sin embargo, el modelo OSI es hipotético, pero el TCP / IP es un modelo práctico.
Modelo OSI
La interfaz de sistema abierto fue diseñada por la organización internacional de estandarización (ISO) y, por lo tanto, también se la conoce como el modelo ISO-OSI.
El modelo OSI consta de siete capas, como se muestra en el siguiente diagrama. Cada capa tiene una función específica, sin embargo, cada capa proporciona servicios a la capa superior.
![](https://assets.edu.lat/python_penetration_testing/images/osi_model.jpg)
Capa fisica
La capa física es responsable de las siguientes actividades:
Activar, mantener y desactivar la conexión física.
Definición de voltajes y velocidades de datos necesarios para la transmisión.
Conversión de bits digitales en señal eléctrica.
Decidir si la conexión es simple, semidúplex o dúplex completo.
Capa de enlace de datos
La capa de enlace de datos realiza las siguientes funciones:
Realiza sincronización y control de errores para la información que se va a transmitir a través del enlace físico.
Habilita la detección de errores y agrega bits de detección de errores a los datos que se van a transmitir.
Capa de red
La capa de red realiza las siguientes funciones:
Para enrutar las señales a través de varios canales hasta el otro extremo.
Actuar como controlador de red al decidir qué ruta deben tomar los datos.
Dividir los mensajes salientes en paquetes y ensamblar los paquetes entrantes en mensajes para niveles más altos.
Capa de transporte
La capa de transporte realiza las siguientes funciones:
Decide si la transmisión de datos debe realizarse en rutas paralelas o en una ruta única.
Realiza multiplexación, dividiendo los datos.
Divide los grupos de datos en unidades más pequeñas para que la capa de red los maneje de manera más eficiente.
La capa de transporte garantiza la transmisión de datos de un extremo a otro.
Capa de sesión
La capa de sesión realiza las siguientes funciones:
Administra los mensajes y sincroniza las conversaciones entre dos aplicaciones diferentes.
Controla el inicio y cierre de sesión, la identificación del usuario, la facturación y la gestión de sesiones.
Capa de presentación
La capa de presentación realiza las siguientes funciones:
Esta capa asegura que la información se entregue de tal forma que el sistema receptor la entienda y la utilice.
Capa de aplicación
La capa de aplicación realiza las siguientes funciones:
Proporciona diferentes servicios como la manipulación de información de varias formas, retransferir los archivos de información, distribuir los resultados, etc.
Las funciones como LOGIN o verificación de contraseña también las realiza la capa de aplicación.
Modelo TCP / IP
El modelo de Protocolo de control de transmisión y Protocolo de Internet (TCP / IP) es un modelo práctico y se utiliza en Internet.
El modelo TCP / IP combina las dos capas (capa física y de enlace de datos) en una capa: capa de host a red. El siguiente diagrama muestra las distintas capas del modelo TCP / IP:
![](https://assets.edu.lat/python_penetration_testing/images/tcp_ip_model.jpg)
Capa de aplicación
Esta capa es la misma que la del modelo OSI y realiza las siguientes funciones:
Proporciona diferentes servicios como la manipulación de información de varias formas, retransferir los archivos de información, distribuir los resultados, etc.
La capa de aplicación también realiza funciones como LOGIN o verificación de contraseña.
A continuación se muestran los diferentes protocolos utilizados en la capa de aplicación:
- TELNET
- FTP
- SMTP
- DN
- HTTP
- NNTP
Capa de transporte
Realiza las mismas funciones que la capa de transporte en el modelo OSI. Considere los siguientes puntos importantes relacionados con la capa de transporte:
Utiliza el protocolo TCP y UDP para la transmisión de un extremo a otro.
TCP es un protocolo confiable y orientado a la conexión.
TCP también maneja el control de flujo.
El UDP no es confiable y un protocolo sin conexión no realiza control de flujo.
En esta capa se emplean los protocolos TCP / IP y UDP.
Capa de Internet
La función de esta capa es permitir que el host inserte paquetes en la red y luego los haga viajar de forma independiente al destino. Sin embargo, el orden de recepción del paquete puede ser diferente de la secuencia en que se enviaron.
El Protocolo de Internet (IP) se emplea en la capa de Internet.
Capa de host a red
Ésta es la capa más baja del modelo TCP / IP. El host tiene que conectarse a la red utilizando algún protocolo, de modo que pueda enviar paquetes IP a través de él. Este protocolo varía de un host a otro y de una red a otra.
Los diferentes protocolos utilizados en esta capa son:
- ARPANET
- SATNET
- LAN
- Paquete de radio
Arquitectura útil
A continuación se muestran algunas arquitecturas útiles que se utilizan en la comunicación de red:
La arquitectura de la trama de Ethernet
Un ingeniero llamado Robert Metcalfe inventó por primera vez la red Ethernet, definida según el estándar IEEE 802.3, en 1973. Se utilizó por primera vez para interconectar y enviar datos entre la estación de trabajo y la impresora. Más del 80% de las LAN utilizan el estándar Ethernet por su velocidad, menor costo y facilidad de instalación. Por otro lado, si hablamos de marco, los datos viajan de un host a otro en el camino. Una trama está constituida por varios componentes como dirección MAC, encabezado IP, delimitador de inicio y fin, etc.
La trama de Ethernet comienza con Preámbulo y SFD. El encabezado de Ethernet contiene la dirección MAC de origen y de destino, después de lo cual está presente la carga útil de la trama. El último campo es CRC, que se utiliza para detectar el error. La estructura básica de la trama de Ethernet se define en el estándar IEEE 802.3, que se explica a continuación:
El formato de trama de Ethernet (IEEE 802.3)
El paquete Ethernet transporta una trama Ethernet como su carga útil. A continuación se muestra una representación gráfica de la trama de Ethernet junto con la descripción de cada campo:
Nombre del campo | Preámbulo | SFD (delimitador de inicio de fotograma) | MAC de destino | MAC de origen | Tipo | Datos | CRC |
---|---|---|---|---|---|---|---|
Tamaño (en bytes) | 7 | 1 | 6 | 6 | 2 | 46-1500 | 4 |
Preámbulo
Una trama de Ethernet está precedida por un preámbulo, de 7 bytes de tamaño, que informa al sistema de recepción que se está iniciando una trama y permite que tanto el emisor como el receptor establezcan sincronización de bits.
SFD (delimitador de inicio de fotograma)
Este es un campo de 1 byte que se utiliza para indicar que el campo de dirección MAC de destino comienza con el siguiente byte. A veces, el campo SFD se considera parte del preámbulo. Es por eso que el preámbulo se considera 8 bytes en muchos lugares.
Destination MAC - Este es un campo de 6 bytes en el que tenemos la dirección del sistema receptor.
Source MAC - Este es un campo de 6 bytes en el que tenemos la dirección del sistema de envío.
Type- Define el tipo de protocolo dentro del marco. Por ejemplo, IPv4 o IPv6. Su tamaño es de 2 bytes.
Data- Esto también se llama Payload y los datos reales se insertan aquí. Su longitud debe estar entre 46 y 1500 bytes. Si la longitud es inferior a 46 bytes, se agregan ceros de relleno para cumplir con la longitud mínima posible, es decir, 46.
CRC (Cyclic Redundancy Check) - Este es un campo de 4 bytes que contiene CRC de 32 bits, que permite la detección de datos corruptos.
Formato de trama Ethernet extendida (trama Ethernet II)
A continuación se muestra una representación gráfica de la trama Ethernet extendida con la que podemos obtener una carga útil superior a 1500 bytes:
Nombre del campo | MAC de destino | MAC de origen | Tipo | DSAP | SSAP | Ctrl | Datos | CRC |
---|---|---|---|---|---|---|---|---|
Tamaño (en bytes) | 6 | 6 | 2 | 1 | 1 | 1 | > 46 | 4 |
La descripción de los campos, que son diferentes de la trama Ethernet IEEE 802.3, es la siguiente:
DSAP (punto de acceso al servicio de destino)
DSAP es un campo de 1 byte de longitud que representa las direcciones lógicas de la entidad de capa de red destinada a recibir el mensaje.
SSAP (punto de acceso al servicio de origen)
SSAP es un campo de 1 byte que representa la dirección lógica de la entidad de capa de red que ha creado el mensaje.
Ctrl
Este es un campo de control de 1 byte.
La arquitectura de paquetes IP
El Protocolo de Internet es uno de los principales protocolos del conjunto de protocolos TCP / IP. Este protocolo funciona en la capa de red del modelo OSI y en la capa de Internet del modelo TCP / IP. Por lo tanto, este protocolo tiene la responsabilidad de identificar hosts en función de sus direcciones lógicas y de enrutar datos entre ellos a través de la red subyacente. IP proporciona un mecanismo para identificar hosts de forma única mediante un esquema de direccionamiento IP. IP utiliza la entrega de mejor esfuerzo, es decir, no garantiza que los paquetes se entreguen al host de destino, pero hará todo lo posible para llegar al destino.
En las secciones siguientes, aprenderemos sobre las dos versiones diferentes de IP.
IPv4
Esta es la versión 4 del Protocolo de Internet, que utiliza una dirección lógica de 32 bits. A continuación se muestra el diagrama del encabezado IPv4 junto con la descripción de los campos:
![](https://assets.edu.lat/python_penetration_testing/images/ipv4.jpg)
Versión
Ésta es la versión del Protocolo de Internet utilizada; por ejemplo, IPv4.
DIH
Longitud del encabezado de Internet; longitud de todo el encabezado IP.
DSCP
Punto de código de servicios diferenciados; este es el tipo de servicio.
ECN
Notificación de congestión explícita; lleva información sobre la congestión observada en la ruta.
Largo total
La longitud de todo el paquete IP (incluido el encabezado IP y la carga útil IP).
Identificación
Si el paquete IP se fragmenta durante la transmisión, todos los fragmentos contienen el mismo número de identificación.
Banderas
Según lo requieran los recursos de la red, si el paquete IP es demasiado grande para manejarlo, estos 'indicadores' indican si se pueden fragmentar o no. En esta bandera de 3 bits, el MSB siempre se establece en '0'.
Desplazamiento de fragmento
Este desplazamiento indica la posición exacta del fragmento en el paquete IP original.
Tiempo para vivir
Para evitar bucles en la red, cada paquete se envía con algún valor TTL establecido, que le dice a la red cuántos enrutadores (saltos) puede cruzar este paquete. En cada salto, su valor se reduce en uno y cuando el valor llega a cero, el paquete se descarta.
Protocolo
Le dice a la capa de red en el host de destino, a qué Protocolo pertenece este paquete, es decir, el Protocolo de siguiente nivel. Por ejemplo, el número de protocolo de ICMP es 1, TCP es 6 y UDP es 17.
Suma de comprobación del encabezado
Este campo se usa para mantener el valor de la suma de comprobación de todo el encabezado, que luego se usa para verificar si el paquete se recibió sin errores.
Dirección de la fuente
Dirección de 32 bits del remitente (o fuente) del paquete.
Dirección de destino
Dirección de 32 bits del receptor (o destino) del paquete.
Opciones
Este es un campo opcional, que se utiliza si el valor de DIH es mayor que 5. Estas opciones pueden contener valores para opciones como Seguridad, Ruta de registro, Marca de tiempo, etc.
Si desea estudiar IPv4 en detalle, consulte este enlace:
IPv6
La versión 6 del Protocolo de Internet es el protocolo de comunicaciones más reciente, que como su predecesor, IPv4, funciona en la Capa de red (Capa-3). Junto con su oferta de una enorme cantidad de espacio de direcciones lógicas, este protocolo tiene amplias características que abordan las deficiencias de IPv4. A continuación se muestra el diagrama del encabezado IPv4 junto con la descripción de los campos:
![](https://assets.edu.lat/python_penetration_testing/images/ipv6.jpg)
Versión (4 bits)
Representa la versión del Protocolo de Internet - 0110.
Clase de tráfico (8 bits)
Estos 8 bits se dividen en dos partes. Los 6 bits más significativos se utilizan para el tipo de servicio para permitir que el enrutador sepa qué servicios deben proporcionarse a este paquete. Los 2 bits menos significativos se utilizan para la notificación de congestión explícita (ECN).
Etiqueta de flujo (20 bits)
Esta etiqueta se utiliza para mantener el flujo secuencial de los paquetes que pertenecen a una comunicación. La fuente etiqueta la secuencia para ayudar al enrutador a identificar que un paquete en particular pertenece a un flujo de información específico. Este campo ayuda a evitar el reordenamiento de los paquetes de datos. Está diseñado para transmisión / medios en tiempo real.
Longitud de carga útil (16 bits)
Este campo se utiliza para indicar a los enrutadores cuánta información contiene un paquete en particular en su carga útil. La carga útil se compone de encabezados de extensión y datos de capa superior. Con 16 bits, se pueden indicar hasta 65535 bytes; pero si los encabezados de extensión contienen un encabezado de extensión salto a salto, la carga útil puede exceder los 65535 bytes y este campo se establece en 0.
Siguiente encabezado (8 bits)
Este campo se utiliza para indicar el tipo de encabezado de extensión o, si el encabezado de extensión no está presente, indica la PDU de capa superior. Los valores para el tipo de PDU de capa superior son los mismos que los de IPv4.
Límite de saltos (8 bits)
Este campo se utiliza para detener el bucle de paquetes en la red infinitamente. Es lo mismo que TTL en IPv4. El valor del campo Hop Limit se reduce en 1 cuando pasa por un enlace (enrutador / salto). Cuando el campo llega a 0, el paquete se descarta.
Dirección de origen (128 bits)
Este campo indica la dirección del originador del paquete.
Dirección de destino (128 bits)
Este campo proporciona la dirección del destinatario previsto del paquete.
Si desea estudiar IPv6 en detalle, consulte este enlace:
Arquitectura de encabezado TCP (Protocolo de control de transmisión)
Como sabemos, TCP es un protocolo orientado a la conexión, en el que se establece una sesión entre dos sistemas antes de iniciar la comunicación. La conexión se cerrará una vez que se haya completado la comunicación. TCP utiliza una técnica de protocolo de enlace de tres vías para establecer el socket de conexión entre dos sistemas. El protocolo de enlace de tres vías significa que tres mensajes, SYN, SYN-ACK y ACK, se envían de ida y vuelta entre dos sistemas. Los pasos para trabajar entre dos sistemas, los sistemas de inicio y de destino, son los siguientes:
Step 1 − Packet with SYN flag set
En primer lugar, el sistema que intenta iniciar una conexión comienza con un paquete que tiene la bandera SYN activada.
Step 2 − Packet with SYN-ACK flag set
Ahora, en este paso, el sistema de destino devuelve un paquete con conjuntos de indicadores SYN y ACK.
Step 3 − Packet with ACK flag set
Por último, el sistema de inicio devolverá un paquete al sistema de destino original con el indicador ACK establecido.
A continuación se muestra el diagrama del encabezado TCP junto con la descripción de los campos:
![](https://assets.edu.lat/python_penetration_testing/images/tcp_packet_with_ack_flag_set.jpg)
Puerto de origen (16 bits)
Identifica el puerto de origen del proceso de la aplicación en el dispositivo de envío.
Puerto de destino (16 bits)
Identifica el puerto de destino del proceso de aplicación en el dispositivo receptor.
Número de secuencia (32 bits)
El número de secuencia de bytes de datos de un segmento en una sesión.
Número de reconocimiento (32 bits)
Cuando se establece el indicador ACK, este número contiene el siguiente número de secuencia del byte de datos esperado y funciona como un reconocimiento de los datos recibidos anteriormente.
Desplazamiento de datos (4 bits)
Este campo implica tanto el tamaño del encabezado TCP (palabras de 32 bits) como el desplazamiento de los datos en el paquete actual en todo el segmento TCP.
Reservado (3 bits)
Reservado para uso futuro y ajustado a cero de forma predeterminada.
Banderas (de 1 bit cada una)
NS - El proceso de señalización de notificación de congestión explícita utiliza este bit Nonce Sum.
CWR - Cuando un host recibe un paquete con el bit ECE establecido, establece Congestion Windows Reduced para reconocer que ECE recibió.
ECE - Tiene dos significados -
Si el bit SYN está claro a 0, entonces ECE significa que el paquete IP tiene su bit CE (experiencia de congestión) establecido.
Si el bit SYN se establece en 1, ECE significa que el dispositivo es compatible con ECT.
URG - Indica que el campo de puntero urgente tiene datos importantes y debe procesarse.
ACK- Indica que el campo Reconocimiento tiene importancia. Si ACK se pone a 0, indica que el paquete no contiene ningún reconocimiento.
PSH - Cuando se establece, es una solicitud a la estación receptora para PUSH data (tan pronto como llegue) a la aplicación receptora sin almacenarlos en búfer.
RST - La bandera de reinicio tiene las siguientes características -
Se utiliza para rechazar una conexión entrante.
Se utiliza para rechazar un segmento.
Se utiliza para reiniciar una conexión.
SYN - Esta bandera se utiliza para configurar una conexión entre hosts.
FIN- Esta bandera se utiliza para liberar una conexión y no se intercambian más datos a partir de entonces. Dado que los paquetes con indicadores SYN y FIN tienen números de secuencia, se procesan en el orden correcto.
Tamaño de Windows
Este campo se utiliza para el control de flujo entre dos estaciones e indica la cantidad de búfer (en bytes) que el receptor ha asignado para un segmento, es decir, cuántos datos espera el receptor.
Checksum - Este campo contiene la suma de comprobación de encabezados, datos y pseudo encabezados.
Urgent Pointer - Apunta al byte de datos urgentes si el indicador URG se establece en 1.
Options- Facilita opciones adicionales, que no están cubiertas por el encabezado regular. El campo de opción siempre se describe en palabras de 32 bits. Si este campo contiene datos de menos de 32 bits, el relleno se utiliza para cubrir los bits restantes para alcanzar el límite de 32 bits.
Si desea estudiar TCP en detalle, consulte este enlace:
La arquitectura de encabezado UDP (User Datagram Protocol)
UDP es un protocolo simple sin conexión a diferencia de TCP, un protocolo orientado a la conexión. Implica una cantidad mínima de mecanismo de comunicación. En UDP, el receptor no genera un acuse de recibo del paquete recibido y, a su vez, el remitente no espera ningún acuse de recibo del paquete enviado. Esta deficiencia hace que este protocolo sea poco confiable y más fácil de procesar. A continuación se muestra el diagrama del encabezado UDP junto con la descripción de los campos:
![](https://assets.edu.lat/python_penetration_testing/images/udp.jpg)
Puerto de origen
Esta información de 16 bits se utiliza para identificar el puerto de origen del paquete.
Puerto de destino
Esta información de 16 bits se utiliza para identificar el servicio de nivel de aplicación en la máquina de destino.
Longitud
El campo de longitud especifica la longitud completa del paquete UDP (incluido el encabezado). Es un campo de 16 bits y el valor mínimo es de 8 bytes, es decir, el tamaño del encabezado UDP en sí.
Suma de comprobación
Este campo almacena el valor de la suma de comprobación generado por el remitente antes de enviar. IPv4 tiene este campo como opcional, por lo que cuando el campo de suma de verificación no contiene ningún valor, se convierte en 0 y todos sus bits se establecen en cero.
Para estudiar TCP en detalle, consulte este enlace: Protocolo de datagramas de usuario