L'affirmation qu'un paquet VPN porte exactement deux sommes de contrôle paraît propre et est assez souvent fausse pour mériter d'être démontée. Le nombre dépend des versions d'IP qui apparaissent, du protocole de transport transporté et du format de protection qu'utilise le tunnel. Une somme de contrôle d'en-tête, une somme de contrôle de couche supérieure et une étiquette d'intégrité cryptographique sont trois mécanismes aux trois portées. Les compter commence par marquer ce que chacune couvre.

Vérifiez quelles versions d'IP sont réellement sur le fil

Les en-têtes IPv4 portent une somme de contrôle d'en-tête de 16 bits, et les en-têtes IPv6 n'en portent aucune. Ce seul fait change le nombre pour chaque tunnel, car encapsuler IPv4 dans IPv6 et IPv6 dans IPv4 produit des documents différents. Un tunnel peut porter les deux familles à la fois, et alors une direction peut contenir un champ que l'autre n'a pas. Établissez les versions avant de compter quoi que ce soit.

Écrivez la disposition sous forme de liste d'en-têtes plutôt que d'image. L'ordre compte à la lecture d'une capture, et la présence ou l'absence du champ de somme de contrôle est la première chose à marquer.

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

La première ligne n'a aucune somme de contrôle d'en-tête IP dans ses en-têtes IP, tandis que la seconde en a deux lorsque les deux en-têtes sont IPv4. Même technologie de tunnel, nombre différent, et aucune des deux lignes n'est un format de fil complet.

Vérifiez ce que couvre chaque somme de contrôle

La couverture est la partie que les gens sautent, et c'est elle qui donne un sens à un nombre. La somme de contrôle d'en-tête IPv4 protège l'en-tête et rien d'autre, elle ne dit donc rien de la charge utile derrière. Une somme de contrôle UDP sur IPv6 couvre un pseudo-en-tête plus l'en-tête et la charge utile UDP, ce qui signifie qu'elle atteint le paquet transporté lorsque le datagramme est tunnelisé. TCP a sa propre somme de contrôle avec une dépendance similaire au pseudo-en-tête. Ce sont trois portées différentes même si toutes trois s'appellent des sommes de contrôle.

La RFC 791 définit la vérification de l'en-tête IPv4 et son recalcul à chaque saut, et la RFC 8200 définit le traitement de la couche supérieure sur IPv6, y compris le pseudo-en-tête. Aucun des deux documents ne dit qu'un paquet VPN contient un nombre fixe de sommes de contrôle, car aucun ne décrit un tunnel.

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

Vérifiez la protection d'intégrité séparément

L'intégrité ESP est une protection cryptographique avec sa propre couverture et une représentation dépendante de l'algorithme. Ce n'est pas une somme de contrôle IP ou UDP sous un autre nom, et sa longueur varie selon la construction choisie. Une vérification d'intégrité couvre une partie définie du paquet, qui peut inclure l'en-tête ESP et une partie de la charge utile selon le mode utilisé. La compter comme un champ de somme de contrôle de largeur connue est l'endroit où la plupart de ces explications s'effondrent.

Lisez la construction choisie avant de compter des octets, et décrivez le résultat comme une protection d'intégrité plutôt que comme une somme de contrôle à l'étiquette différente. Le décodeur nommera le champ pour vous si vous le lui demandez.

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

Vérifiez le point d'observation avant de compter

Une capture sur l'interface interne et une capture sur le fil peuvent montrer des couches complètement différentes. Sur l'interface interne, le tunnel est déjà retiré, vous voyez donc le paquet transporté et aucun des en-têtes externes. Sur le fil, vous voyez les en-têtes externes et une charge utile chiffrée que vous ne pouvez pas lire. Aucune des deux vues n'est fausse, et ce ne sont pas des vues du même objet. Précisez où la capture a été prise avant de citer un nombre.

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

La première commande montre le paquet externe avec sa queue d'intégrité, et la seconde montre le paquet transporté avec sa propre somme de contrôle de transport. Additionner des nombres des deux captures ne compte rien deux fois, mais explique deux fois le même paquet.

Comparez le nombre à une capture réelle

Décodez un paquet complètement et marquez chaque champ que le décodeur nomme somme de contrôle ou valeur d'intégrité. Ensuite, comparez chaque marque à la disposition que vous avez écrite, et supprimez celles qui appartiennent à une couche que vous ne comptez pas réellement. Un nombre qui survit à cet exercice est défendable, et un nombre cité de mémoire ne l'est pas.

Répétez pour la direction de réponse, car un tunnel portant les deux familles peut différer selon la direction et selon le flux. Ensuite, énoncez le nombre avec sa portée, par exemple trois sommes de contrôle pour ce paquet interne à ce point d'observation, plutôt que comme une propriété des paquets VPN en général.

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

Articles similaires