La afirmación de que un paquete VPN lleva exactamente dos sumas de comprobación suena ordenada y es lo bastante a menudo falsa como para merecer un análisis. El número depende de qué versiones de IP aparecen, qué protocolo de transporte se lleva y qué formato de protección usa el túnel. Una suma de comprobación de cabecera, una suma de comprobación de capa superior y una etiqueta criptográfica de integridad son tres mecanismos con tres alcances. Contarlas empieza por marcar qué cubre cada una.

Compruebe qué versiones de IP están realmente en el cable

Las cabeceras IPv4 llevan una suma de comprobación de cabecera de 16 bits, y las cabeceras IPv6 no llevan nada parecido. Ese único hecho cambia el número para cada túnel, porque envolver IPv4 dentro de IPv6 y envolver IPv6 dentro de IPv4 producen documentos distintos. Un túnel puede llevar ambas familias a la vez, y entonces una dirección puede contener un campo que la otra no tiene. Establezca las versiones antes de contar nada.

Escriba la disposición como una lista de cabeceras en lugar de una imagen. El orden importa al leer una captura, y la presencia o ausencia del campo de suma de comprobación es lo primero que hay que marcar.

outer IPv6 | ESP | inner IPv6 | UDP | application data
outer IPv4 | ESP | inner IPv4 | TCP | application data

La primera línea no tiene ninguna suma de comprobación de cabecera IP en sus cabeceras IP, mientras que la segunda tiene dos cuando ambas cabeceras son IPv4. La misma tecnología de túnel, un número distinto, y ninguna de las líneas es un formato de cable completo.

Compruebe qué cubre cada suma de comprobación

La cobertura es la parte que la gente se salta, y es lo que hace que un número tenga sentido. La suma de comprobación de cabecera IPv4 protege la cabecera y nada más, así que no dice nada de la carga útil que hay detrás. Una suma de comprobación UDP sobre IPv6 cubre una pseudocabecera más la cabecera y la carga útil UDP, lo que significa que llega hasta el paquete transportado cuando el datagrama va por túnel. TCP tiene su propia suma de comprobación con una dependencia similar de la pseudocabecera. Son tres alcances distintos aunque las tres se llamen sumas de comprobación.

El RFC 791 define la comprobación de cabecera IPv4 y su recálculo en cada salto, y el RFC 8200 define el tratamiento de la capa superior sobre IPv6, incluida la pseudocabecera. Ninguno de los dos documentos dice que un paquete VPN tenga un número fijo de sumas de comprobación, porque ninguno describe un túnel.

tshark -r capture.pcap -Y "ip.proto == 50" -V | grep -i checksum

Compruebe la protección de integridad por separado

La integridad de ESP es una protección criptográfica con cobertura propia y una representación que depende del algoritmo. No es una suma de comprobación IP o UDP con otro nombre, y su longitud varía según la construcción elegida. Una comprobación de integridad cubre una porción definida del paquete, que según el modo puede incluir la cabecera ESP y parte de la carga útil. Contarla como un campo de suma de comprobación de anchura conocida es donde la mayoría de estas explicaciones se desmoronan.

Lea la construcción elegida antes de contar bytes, y describa el resultado como protección de integridad y no como una suma de comprobación con otra etiqueta. El decodificador le nombrará el campo si se lo pide.

tshark -r capture.pcap -Y esp -V | grep -iE "integrity|icv"

Compruebe el punto de observación antes de contar

Una captura en la interfaz interna y una captura en el cable pueden mostrar capas completamente distintas. En la interfaz interna el túnel ya está quitado, así que ve el paquete transportado y ninguna de las cabeceras externas. En el cable ve las cabeceras externas y una carga útil cifrada que no puede leer. Ninguna de las dos vistas es incorrecta, y no son vistas del mismo objeto. Indique dónde se tomó la captura antes de citar cualquier número.

sudo tcpdump -ni eth0 -vv -c 5 esp
sudo tcpdump -ni tun0 -vv -c 5

El primer comando muestra el paquete externo con su tráiler de integridad, y el segundo muestra el paquete transportado con su propia suma de comprobación de transporte. Sumar números de ambas capturas no cuenta nada dos veces, pero explica el mismo paquete dos veces.

Contraste el número con una captura real

Decodifique un paquete por completo y marque cada campo que el decodificador denomine suma de comprobación o valor de integridad. Después compare cada marca con la disposición que escribió, y borre las que pertenezcan a una capa que no está contando. Un número que sobreviva a ese ejercicio es defendible, y un número citado de memoria no lo es.

Repita para la dirección de respuesta, porque un túnel que lleva ambas familias puede diferir por dirección y por flujo. Después diga el número con su alcance, por ejemplo tres sumas de comprobación para este paquete interno en este punto de observación, y no como una propiedad de los paquetes VPN en general.

tshark -r capture.pcap -T fields -e ip.checksum -e udp.checksum -e tcp.checksum

Artículos relacionados