Påståendet att ett VPN-paket bär exakt två kontrollsummor låter prydligt och är tillräckligt ofta fel för att vara värt att plocka isär. Antalet beror på vilka IP-versioner som förekommer, vilket transportprotokoll som bärs och vilket skyddsformat tunneln använder. En headerkontrollsumma, en kontrollsumma i övre lagret och en kryptografisk integritetsetikett är tre mekanismer med tre omfattningar. Att räkna dem börjar med att markera vad var och en täcker.

Kontrollera vilka IP-versioner som faktiskt ligger på tråden

IPv4-huvuden bär en 16-bitars headerkontrollsumma, och IPv6-huvuden bär ingenting sådant. Det enda faktumet ändrar antalet för varje tunnel, eftersom inpackning av IPv4 i IPv6 och av IPv6 i IPv4 ger olika dokument. En tunnel kan bära båda familjerna samtidigt, och då kan en riktning innehålla ett fält som den andra inte har. Fastställ versionerna innan du räknar något alls.

Skriv upplägget som en huvudlista i stället för en bild. Ordningen spelar roll när man läser en avbildning, och förekomsten eller frånvaron av kontrollsummefältet är det första som ska markeras.

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

Första raden har ingen IP-headerkontrollsumma någonstans i sina IP-huvuden, medan andra har två när båda huvudena är IPv4. Samma tunnelteknik, olika antal, och ingen av raderna är ett fullständigt trådformat.

Kontrollera vad varje kontrollsumma täcker

Täckningen är den del folk hoppar över, och den är det som gör ett antal meningsfullt. IPv4-headerkontrollsumman skyddar huvudet och ingenting annat, så den säger ingenting om nyttolasten bakom. En UDP-kontrollsumma över IPv6 täcker ett pseudo-huvud plus UDP-huvudet och nyttolasten, vilket betyder att den når in i det burna paketet när datagrammet tunnlas. TCP har sin egen kontrollsumma med ett liknande beroende av pseudo-huvudet. Det är tre olika omfattningar även om alla tre kallas kontrollsummor.

RFC 791 definierar IPv4-huvudkontrollen och dess omräkning vid varje hopp, och RFC 8200 definierar behandlingen i övre lagret över IPv6 inklusive pseudo-huvudet. Ingen av dokumenten säger att ett VPN-paket har ett fast antal kontrollsummor, eftersom ingen av dem beskriver en tunnel.

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

Kontrollera integritetsskyddet separat

ESP-integritet är kryptografiskt skydd med egen täckning och en algoritmberoende representation. Det är inte en IP- eller UDP-kontrollsumma under ett annat namn, och längden varierar med den valda konstruktionen. En integritetskontroll täcker en definierad del av paketet, som beroende på läge kan omfatta ESP-huvudet och en del av nyttolasten. Att räkna den som ett kontrollsummefält med känd bredd är där de flesta av dessa förklaringar faller sönder.

Läs den valda konstruktionen innan du räknar byte, och beskriv resultatet som integritetsskydd i stället för som en kontrollsumma med en annan etikett. Dekodern namnger fältet åt dig om du frågar den.

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

Kontrollera observationspunkten innan du räknar

En avbildning på det inre gränssnittet och en avbildning på tråden kan visa helt olika lager. På det inre gränssnittet är tunneln redan borttagen, så du ser det burna paketet och inget av de yttre huvudena. På tråden ser du de yttre huvudena och en krypterad nyttolast du inte kan läsa. Ingen av vyerna är fel, och de är inte vyer av samma objekt. Ange var avbildningen togs innan du citerar något antal.

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

Det första kommandot visar det yttre paketet med sin integritetstrailer, och det andra visar det burna paketet med sin egen transportkontrollsumma. Att lägga ihop tal från båda avbildningarna räknar ingenting dubbelt, men förklarar samma paket två gånger.

Håll antalet mot en riktig avbildning

Avkoda ett paket helt och markera varje fält som avkodaren kallar en kontrollsumma eller ett integritetsvärde. Jämför sedan varje markering med upplägget du skrev, och ta bort dem som hör till ett lager du inte faktiskt räknar. Ett antal som överlever den övningen är försvarbart, och ett antal citerat ur minnet är det inte.

Upprepa för svarriktningen, eftersom en tunnel som bär båda familjerna kan skilja sig per riktning och per flöde. Ange sedan antalet tillsammans med sin omfattning, till exempel tre kontrollsummor för detta inre paket vid denna observationspunkt, och inte som en egenskap hos VPN-paket i allmänhet.

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

Relaterade artiklar