Die Behauptung, ein VPN-Paket trage genau zwei Prüfsummen, klingt aufgeräumt und ist oft genug falsch, um sie auseinanderzunehmen. Die Zahl hängt davon ab, welche IP-Versionen auftreten, welches Transportprotokoll übertragen wird und welches Schutzformat der Tunnel verwendet. Eine Header-Prüfsumme, eine Prüfsumme der oberen Schicht und ein kryptografisches Integritäts-Tag sind drei Mechanismen mit drei Reichweiten. Ihr Zählen beginnt damit, zu markieren, was jeder davon abdeckt.

Prüfe, welche IP-Versionen tatsächlich auf der Leitung liegen

IPv4-Header tragen eine 16-Bit-Header-Prüfsumme, IPv6-Header tragen nichts dergleichen. Diese eine Tatsache ändert die Zahl für jeden Tunnel, denn IPv4 in IPv6 zu verpacken und IPv6 in IPv4 zu verpacken erzeugt unterschiedliche Dokumente. Ein Tunnel kann beide Familien gleichzeitig tragen, und dann kann eine Richtung ein Feld enthalten, das der anderen fehlt. Stelle die Versionen fest, bevor du irgendetwas zählst.

Schreibe das Layout als Header-Liste statt als Bild. Die Reihenfolge zählt beim Lesen eines Mitschnitts, und das Vorhandensein oder Fehlen des Prüfsummenfelds ist das Erste, was zu markieren ist.

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

Die erste Zeile hat nirgends in ihren IP-Headern eine IP-Header-Prüfsumme, während die zweite zwei hat, wenn beide Header IPv4 sind. Dieselbe Tunneltechnologie, eine andere Zahl, und keine der Zeilen ist ein vollständiges Leitungsformat.

Prüfe, was jede Prüfsumme abdeckt

Die Abdeckung ist der Teil, den Leute überspringen, und sie ist es, die eine Zahl aussagekräftig macht. Die IPv4-Header-Prüfsumme schützt den Header und sonst nichts, sagt also nichts über die Nutzlast dahinter. Eine UDP-Prüfsumme über IPv6 deckt einen Pseudo-Header plus UDP-Header und Nutzlast ab, was bedeutet, dass sie bis in das getragene Paket reicht, wenn das Datagramm getunnelt wird. TCP hat seine eigene Prüfsumme mit einer ähnlichen Abhängigkeit vom Pseudo-Header. Das sind drei verschiedene Reichweiten, auch wenn alle drei Prüfsummen heißen.

RFC 791 definiert die IPv4-Header-Prüfung und ihre Neuberechnung bei jedem Hop, und RFC 8200 definiert die Behandlung der oberen Schicht über IPv6 einschließlich des Pseudo-Headers. Keines der Dokumente sagt, ein VPN-Paket habe eine feste Anzahl von Prüfsummen, weil keines einen Tunnel beschreibt.

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

Prüfe den Integritätsschutz getrennt

ESP-Integrität ist kryptografischer Schutz mit eigener Abdeckung und einer algorithmusabhängigen Darstellung. Sie ist keine IP- oder UDP-Prüfsumme unter anderem Namen, und ihre Länge variiert mit der gewählten Konstruktion. Eine Integritätsprüfung deckt einen definierten Teil des Pakets ab, der je nach Modus den ESP-Header und einen Teil der Nutzlast umfassen kann. Sie als Prüfsummenfeld bekannter Breite zu zählen, ist der Punkt, an dem die meisten dieser Erklärungen auseinanderfallen.

Lies die gewählte Konstruktion, bevor du Bytes zählst, und beschreibe das Ergebnis als Integritätsschutz statt als Prüfsumme mit anderem Etikett. Der Decoder nennt dir das Feld, wenn du ihn fragst.

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

Prüfe den Beobachtungspunkt, bevor du zählst

Ein Mitschnitt am inneren Interface und ein Mitschnitt auf der Leitung können völlig unterschiedliche Schichten zeigen. Am inneren Interface ist der Tunnel bereits entfernt, du siehst also das getragene Paket und keinen der äußeren Header. Auf der Leitung siehst du die äußeren Header und eine verschlüsselte Nutzlast, die du nicht lesen kannst. Keine der Ansichten ist falsch, und sie sind keine Ansichten desselben Objekts. Nenne den Ort des Mitschnitts, bevor du irgendeine Zahl zitierst.

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

Der erste Befehl zeigt das äußere Paket mit seinem Integritäts-Trailer, der zweite das getragene Paket mit seiner eigenen Transport-Prüfsumme. Zahlen aus beiden Mitschnitten zu addieren zählt nichts doppelt, erklärt aber dasselbe Paket zweimal.

Halte die Zahl gegen einen echten Mitschnitt

Dekodiere ein Paket vollständig und markiere jedes Feld, das der Decoder als Prüfsumme oder Integritätswert bezeichnet. Vergleiche dann jede Markierung mit dem Layout, das du geschrieben hast, und streiche die, die zu einer Schicht gehören, die du nicht tatsächlich zählst. Eine Zahl, die diese Übung übersteht, ist vertretbar, eine aus dem Gedächtnis zitierte nicht.

Wiederhole das für die Antwortrichtung, denn ein Tunnel, der beide Familien trägt, kann sich pro Richtung und pro Fluss unterscheiden. Nenne dann die Zahl mit ihrer Reichweite, zum Beispiel drei Prüfsummen für dieses innere Paket an diesem Beobachtungspunkt, statt als Eigenschaft von VPN-Paketen allgemein.

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

Ähnliche Artikel