Modificando cabeceras de layer 2 y 3

Fecha: 27 de abril del 2020 (durante la cuarentena)

 

Escenario

 

Para este laboratorio pensaba en cuantos parámetros se pueden modificar, tantos como sean posibles,

en las cabeceras de una trama-paquete que viaja entre dos equipos.

 

La comunicación original y que tomamos como referencia para determinar cuales parámetros podemos

cambiar es entre una PC con IP 192.168.1.10 y otra PC con IP 192.168.1.100 con un cable cruzado.

 

 

                       

 

1.- Generamos tráfico:

 

Generamos tráfico ICMP (echo request) con una carga de 1400 bytes (por default en Windows es 32 bytes)

para tener mas opciones a la hora de “jugar” con las cabeceras.

 

C:\>ping 192.168.1.100 -l 1400

 

Haciendo ping a 192.168.1.100 con 1400 bytes de datos:

Respuesta desde 192.168.1.100: bytes=1400 tiempo=1ms TTL=128

Respuesta desde 192.168.1.100: bytes=1400 tiempo=1ms TTL=128

Respuesta desde 192.168.1.100: bytes=1400 tiempo=1ms TTL=128

Respuesta desde 192.168.1.100: bytes=1400 tiempo=1ms TTL=128

 

2.- Visualizamos la captura en el extremo:

 

 

Trama enviada:

Trama recibida:

Ethernet II, Src: e8:6a:64:dc:e2:f5, Dst: 00:1b:38:7e:f1:71

Ethernet II, Src: e8:6a:64:dc:e2:f5, Dst: 00:1b:38:7e:f1:71

    Destination Address: 00:1b:38:7e:f1:71

    Destination Adress: 00:1b:38:7e:f1:71

    Source Address: e8:6a:64:dc:e2:f5

    Source Address: e8:6a:64:dc:e2:f5

    Type: IPv4 (0x0800)

    Type: IPv4 (0x0800)

Internet Protocol Version 4, Src: 192.168.1.10, Dst: 192.168.1.100

Internet Protocol Version 4, Src: 192.168.1.10, Dst: 192.168.1.100

    0100 .... = Version: 4

    0100 .... = Version: 4

    .... 0101 = Header Length: 20 bytes (5)

    .... 0101 = Header Length: 20 bytes (5)

    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)

    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)

        0000 00.. = Differentiated Services Codepoint: Default (0)

        0000 00.. = Differentiated Services Codepoint: Default (0)

        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)

        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)

    Total Length: 1428

    Total Length: 1428

    Identification: 0x51de (20958)

    Identification: 0x51de (20958)

    Flags: 0x0000

    Flags: 0x0000

        0... .... .... .... = Reserved bit: Not set

        0... .... .... .... = Reserved bit: Not set

        .0.. .... .... .... = Don't fragment: Not set

        .0.. .... .... .... = Don't fragment: Not set

        ..0. .... .... .... = More fragments: Not set

        ..0. .... .... .... = More fragments: Not set

        ...0 0000 0000 0000 = Fragment offset: 0

        ...0 0000 0000 0000 = Fragment offset: 0

    Time to live: 128

    Time to live: 128

    Protocol: ICMP (1)

    Protocol: ICMP (1)

    Header checksum: 0x5fcc [validation disabled]

    Header checksum: 0x5fcc [validation disabled]

    Source: 192.168.1.10

    Source: 192.168.1.10

    Destination: 192.168.1.100

    Destination: 192.168.1.100

Internet Control Message Protocol

Internet Control Message Protocol

    Type: 8 (Echo (ping) request)

    Type: 8 (Echo (ping) request)

    Code: 0

    Code: 0

    Checksum: 0x86c1 [correct]

    Checksum: 0x86c1 [correct]

    [Checksum Status: Good]

    [Checksum Status: Good]

    Identifier (BE): 1 (0x0001)

    Identifier (BE): 1 (0x0001)

    Identifier (LE): 256 (0x0100)

    Identifier (LE): 256 (0x0100)

    Sequence number (BE): 3279 (0x0ccf)

    Sequence number (BE): 3279 (0x0ccf)

    Sequence number (LE): 53004 (0xcf0c)

    Sequence number (LE): 53004 (0xcf0c)

Data (1400 bytes)

Data (1400 bytes)

 

                                                                                                                                                                                                     

3.- Modificando las cabeceras:

 

Para modifcar todos los valores posibles en las cabeceras podemos utilizar un router que separe origen y destino en dos subredes

sin alterar el ping original, esto permitirá modificar primeramente ambas direcciones MAC en la cabecera de layer 2.

 

Las direcciones IP origen y destino mediante NAT y PAT, agregado de etiquetas QoS, modificación del TTL (tenemos un salto), y al

agregar fragmentación generamos valores offset (ID de fragmento) y diferente checksum, todo esto en la cabecera de layer 3.

 

La cabecera ICMP no se modifica, tal vez en una cabecera TCP había mas para “jugar”, necesitaríamos un firewall para hacerlo,

y por la cuarentena no tengo acceso a uno.

 

 

 

 

C:\>ping 192.168.1.100 -l 1400

 

Haciendo ping a 192.168.1.100 con 1400 bytes de datos:

Respuesta desde 192.168.1.100: bytes=1400 tiempo=3ms TTL=127

Respuesta desde 192.168.1.100: bytes=1400 tiempo=3ms TTL=127

Respuesta desde 192.168.1.100: bytes=1400 tiempo=3ms TTL=127

Respuesta desde 192.168.1.100: bytes=1400 tiempo=3ms TTL=127

 

En la PC 192.168.1.10 la máscara /24 no se modifica, o sea que no utiliza default gateway sino que “busca” la IP destino en la misma red.

 

La PC 192.168.1.10 con MAC E8:6A:64:DC:E2:F5 envía el ping a 192.168.1.100 MAC 00:17:95:C0:AC:A2, que es la dirección MAC del router

que escucha mediante NAT en la IP 192.168.1.100.

 

Cuando recibe el paquete le traduce la dirección destino a IP 192.168.1.110 y resuelve por ARP que es la dirección MAC 00:1B:38:7E:F1:71.

 

Una vez que el paquete se procesa en el router y se reenvía por la interface Fa0/1, se le realiza un PAT a la dirección origen 192.168.1.10

que pasa a ser 192.168.1.97, y se transmite con la dirección MAC 00:17:95:C0:AC:A3.

 

Dentro de las configuraciones en la interface de salida Fa0/1, la trama de 1442 bytes se fragmenta en 30 paquetes de 82 bytes, y en todos

se agregan el número de offset, que es el indicador de número de fragmento (expresado en bytes), y a todos los paquetes se le agrega el

valor hexadecimal B8 (EF o Expedited Forwarding en lenguaje humano), que es una etiqueta de calidad de servicio (QoS), algo así como un

cartel VIP que nos da prioridad de paso, y aunque aquí no se utilice, nos sirve para modificar algunos bits mas la cabecera.

 

Con tantos cambios en la cabecera de layer 3 el checksum también cambiará (ver punto 6).

 

 

 

4.- Visualizamos la captura en el extremo:

 

 

               

Trama enviada:

Trama recibida:

Ethernet II, Src: e8:6a:64:dc:e2:f5, Dst: 00:17:95:c0:ac:a2

Ethernet II, Src: 00:17:95:c0:ac:a3, Dst: 00:1b:38:7e:f1:71

    Destination Address: 00:17:95:c0:ac:a2

    Destination Address: 00:1b:38:7e:f1:71

    Source Address: e8:6a:64:dc:e2:f5

    Source Address: 00:17:95:c0:ac:a3

    Type: IPv4 (0x0800)

    Type: IPv4 (0x0800)

Internet Protocol Version 4, Src: 192.168.1.10, Dst: 192.168.1.100

Internet Protocol Version 4, Src: 192.168.1.97, Dst: 192.168.1.110

    0100 .... = Version: 4

    0100 .... = Version: 4

    .... 0101 = Header Length: 20 bytes (5)

    .... 0101 = Header Length: 20 bytes (5)

    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)

    Differentiated Services Field: 0xb8 (DSCP: EF PHB, ECN: Not-ECT)

     0000 00 . . = Differentiated Services Codepoint: Default (0)

     1011 10 . . = Differentiated Services Codepoint: Expedited Forwarding (46)

      . . . . . . 00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)

     . . . .  . . 00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)

    Total Length: 1428

    Total Length: 36

    Identification: 0x51ea (20970)

    Identification: 0x51ea (20970)

    Flags: 0x0000

    Flags: 0x00ae

        0 . . . . . . .  . . . . . . . .  = Reserved bit: Not set

        0 . . . . . . .  . . . . . . . .  = Reserved bit: Not set

        . 0 . . . . . .  . . . . . . . .  = Don't fragment: Not set

        . 0 . . . . . .  . . . . . . . .  = Don't fragment: Not set

        . . 0 . . . . .  . . . . . . . . = More fragments: Not set

        . . 0 . . . . .  . . . . . . . . = More fragments: Not set

        . . .0 0000 00000000 = Fragment offset: 0

        . . . 00000 10101110 = Fragment offset: 174

    Time to live: 128

    Time to live: 127

    Protocol: ICMP (1)

    Protocol: ICMP (1)

    Header checksum: 0x5fc0 [validation disabled]

    Header checksum: 0x6469 [validation disabled]

    Source: 192.168.1.10

    Source: 192.168.1.97

    Destination: 192.168.1.100

    Destination: 192.168.1.110

Internet Control Message Protocol

Internet Control Message Protocol

    Type: 8 (Echo (ping) request)

    Type: 8 (Echo (ping) request)

    Code: 0

    Code: 0

    Checksum: 0x86b5 [correct]

    Checksum: 0x86b5 [correct]

    [Checksum Status: Good]

    [Checksum Status: Good]

    Identifier (BE): 1 (0x0001)

    Identifier (BE): 1 (0x0001)

    Identifier (LE): 256 (0x0100)

    Identifier (LE): 256 (0x0100)

    Sequence number (BE): 3291 (0x0cdb)

    Sequence number (BE): 3291 (0x0cdb)

    Sequence number (LE): 56076 (0xdb0c)

    Sequence number (LE): 56076 (0xdb0c)

Data (1400 bytes)

Data (1400 bytes)

 

Bytes        Bytes        bytes                 bits

enviados  recibidos  modificados     modificados (0 -> 1 o 1 -> 0)

4500         45b8            1                        4

0594         0024            2                        6

51ea         51ea

0000         00ae            1                        5

8001         7f01             2                        9

5fc0          6469            2                        9

c0a8         c0a8

010a         0161            1                        5

c0a8         c0a8

0164         016e            1                        3

                                   10 (de 20)         41 (de 160)

 

5.- Verificación:

 

5.1.- Verificación del NAT/PAT:

 

Podemos ver que la IP origen 192.168.1.10 se traduce a 192.168.1.97 y la IP destino 192.168.1.100 se traduce como 192.168.1.110.

 

Cisco1841#sh ip nat translations

Pro    Inside global       Inside local           Outside local        Outside global

---            ---                        ---                   192.168.1.100       192.168.1.110

icmp 192.168.1.97:1    192.168.1.10:1     192.168.1.100:1    192.168.1.110:1

                           |____ origen ___|                            |___ destino ___|

Cisco1841#

 

5.2.- Verificación del marcado de los paquetes con DSCP:

 

Cisco1841#sh policy-map interface fa0/1

 FastEthernet0/1

 

  Service-policy output: DSCP

 

    Class-map: QoS (match-all)

      2913 packets, 289429 bytes

      5 minute offered rate 0 bps, drop rate 0 bps

      Match: any

      QoS Set

        dscp ef

          Packets marked 2425

 

    Class-map: class-default (match-any)

      0 packets, 0 bytes

      5 minute offered rate 0 bps, drop rate 0 bps

      Match: any

Cisco1841#

 

6.- Verificación del checksum “a pata”:

 

Podemos hacer la verficación manual del checksum de la cabecera sumando los dígitos hexadecimales

de a 16 bits y realizando una resta a FFFF que son los 16 bits en 1 del campo checksum, nos da el valor.

 

 

Dirección en la trama

|          Valor hexadecimal

|          |

0000  00 1b 38 7e f1 71 00 17 95 c0 ac a3 08 00 45 b8

0010  00 24 51 ea 00 ae 7f 01 64 69 c0 a8 01 61 c0 a8

0020  01 6e 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72

 

6.1.- Sumamos los valores de cada campo (de 16 bits) en hexa:

 

45b8 (versión + header length-DSCP)

0024  (total length)

51ea  (id de paquete + fragmentos)

00ae  (fragment offset (identificador de fragmentos))

7f01  (TTL + protcolo)

6469 (no se suma porque es el checksum mismo)

c0a8  (IP origen)

0161

c0a8 (IP destino)

016e

=

29b94 (nos da un número de mas de 16 bits, ese número se suma nuevamente)

 

9b94

+

2

=

9b96

 

6.2.- Realizamos la resta:

 

ffff

-

9b96

=

6469 (checksum, ver en la captura)

 

 

7.- Configuración del router:

 

Cisco1841#sh runn (sólo lo mas relevante)

Building configuration...

 

Current configuration : 1029 bytes

!

version 12.4

!

hostname Cisco1841

!

!

class-map match-all QoS (matchea tráfico que nos interese etiquetar, en este caso todo)

 match any

!

policy-map DSCP (aplica etiquetas (cambios de flags) a una clase de tráfico definida)

 class QoS

  set dscp ef

!

!

interface FastEthernet0/0

 ip address 192.168.1.1 255.255.255.240 (vemos que es /28 para mantener los rangos 192.168.1.x)

 ip nat inside

!

interface FastEthernet0/1

 ip address 192.168.1.97 255.255.255.240 (vemos que es /28 para mantener los rangos 192.168.1.x)

 ip mtu 68 (obliga la fragmentación de los paquetes)

 ip nat outside

 service-policy output DSCP (aplica la policy al tráfico de salida)

!

ip nat inside source list 10 interface FastEthernet0/1 overload (traduce 192.168.1.10 en 192.168.1.97)

ip nat outside source static 192.168.1.110 192.168.1.100 (traduce 192.168.1.100 en 192.168.1.110)

!

access-list 10 permit 192.168.1.0 0.0.0.15 (tráfico interesante para aplicar PAT)

!

end

 

Cisco1841#

 

 

(2020) What is the checksum of my mind ?

Rosario, Argentina