L'affermazione che un pacchetto VPN porti esattamente due somme di controllo suona ordinata ed è abbastanza spesso sbagliata da meritare un esame. Il numero dipende da quali versioni IP compaiono, da quale protocollo di trasporto viene portato e da quale formato di protezione usa il tunnel. Una somma di controllo dell'intestazione, una somma di controllo dello strato superiore e un tag crittografico di integrità sono tre meccanismi con tre ambiti. Contarle inizia dal marcare ciò che ciascuna copre.

Controllate quali versioni IP sono realmente sul filo

Le intestazioni IPv4 portano una somma di controllo dell'intestazione a 16 bit, e le intestazioni IPv6 non portano nulla del genere. Questo unico fatto cambia il numero per ogni tunnel, perché incapsulare IPv4 dentro IPv6 e IPv6 dentro IPv4 produce documenti diversi. Un tunnel può portare entrambe le famiglie insieme, e in tal caso una direzione può contenere un campo che l'altra non ha. Stabilite le versioni prima di contare qualsiasi cosa.

Scrivete la disposizione come elenco di intestazioni invece che come immagine. L'ordine conta quando si legge una cattura, e la presenza o l'assenza del campo somma di controllo è la prima cosa da marcare.

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

La prima riga non ha alcuna somma di controllo dell'intestazione IP nelle sue intestazioni IP, mentre la seconda ne ha due quando entrambe le intestazioni sono IPv4. Stessa tecnologia di tunnel, numero diverso, e nessuna delle due righe è un formato di filo completo.

Controllate cosa copre ciascuna somma di controllo

La copertura è la parte che la gente salta, ed è ciò che rende significativo un numero. La somma di controllo dell'intestazione IPv4 protegge l'intestazione e nulla più, quindi non dice nulla del carico utile dietro. Una somma di controllo UDP su IPv6 copre uno pseudo-intestazione più l'intestazione e il carico utile UDP, il che significa che arriva dentro il pacchetto trasportato quando il datagramma è incapsulato. TCP ha la propria somma di controllo con una dipendenza simile dallo pseudo-intestazione. Sono tre ambiti diversi anche se tutti e tre si chiamano somme di controllo.

La RFC 791 definisce il controllo dell'intestazione IPv4 e il suo ricalcolo a ogni salto, e la RFC 8200 definisce il trattamento dello strato superiore su IPv6 incluso lo pseudo-intestazione. Nessuno dei due documenti dice che un pacchetto VPN contenga un numero fisso di somme di controllo, perché nessuno descrive un tunnel.

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

Controllate la protezione dell'integrità separatamente

L'integrità ESP è una protezione crittografica con una propria copertura e una rappresentazione dipendente dall'algoritmo. Non è una somma di controllo IP o UDP sotto un altro nome, e la sua lunghezza varia con la costruzione scelta. Un controllo di integrità copre una porzione definita del pacchetto, che a seconda della modalità può includere l'intestazione ESP e parte del carico utile. Contarla come un campo somma di controllo di larghezza nota è il punto in cui la maggior parte di queste spiegazioni crolla.

Leggete la costruzione scelta prima di contare i byte, e descrivete il risultato come protezione dell'integrità invece che come somma di controllo con un'altra etichetta. Il decodificatore vi nominerà il campo se glielo chiedete.

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

Controllate il punto di osservazione prima di contare

Una cattura sull'interfaccia interna e una cattura sul filo possono mostrare strati completamente diversi. Sull'interfaccia interna il tunnel è già rimosso, quindi vedete il pacchetto trasportato e nessuna delle intestazioni esterne. Sul filo vedete le intestazioni esterne e un carico utile cifrato che non potete leggere. Nessuna delle due viste è sbagliata, e non sono viste dello stesso oggetto. Indicate dove è stata presa la cattura prima di citare un numero.

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

Il primo comando mostra il pacchetto esterno con il suo trailer di integrità, e il secondo mostra il pacchetto trasportato con la propria somma di controllo del trasporto. Sommare i numeri delle due catture non conta nulla due volte, ma spiega due volte lo stesso pacchetto.

Confrontate il numero con una cattura reale

Decodificate un pacchetto per intero e marcate ogni campo che il decodificatore chiama somma di controllo o valore di integrità. Poi confrontate ogni marcatura con la disposizione che avete scritto, e cancellate quelle che appartengono a uno strato che non state contando davvero. Un numero che sopravvive a questo esercizio è difendibile, e un numero citato a memoria non lo è.

Ripetete per la direzione di risposta, perché un tunnel che porta entrambe le famiglie può differire per direzione e per flusso. Poi dite il numero con il suo ambito, per esempio tre somme di controllo per questo pacchetto interno in questo punto di osservazione, e non come proprietà dei pacchetti VPN in generale.

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

Articoli correlati