Teiginys, kad VPN paketas neša lygiai dvi kontrolines sumas, skamba tvarkingai ir yra pakankamai dažnai klaidingas, kad vertėtų jį išnarstyti. Skaičius priklauso nuo to, kurios IP versijos pasirodo, kuris transporto protokolas perduodamas ir kokį apsaugos formatą naudoja tunelis. Antraštės kontrolinė suma, viršutinio sluoksnio kontrolinė suma ir kriptografinė vientisumo žyma yra trys mechanizmai su trimis aprėptimis. Jų skaičiavimas prasideda nuo to, ką kiekvienas jų dengia.

Patikrinkite, kurios IP versijos iš tikrųjų yra laide

IPv4 antraštės neša 16 bitų antraštės kontrolinę sumą, o IPv6 antraštės nieko panašaus neneša. Šis vienas faktas keičia skaičių kiekvienam tuneliui, nes IPv4 įvyniojimas į IPv6 ir IPv6 įvyniojimas į IPv4 sukuria skirtingus dokumentus. Tunelis gali nešti abi šeimas vienu metu, ir tada viena kryptis gali turėti lauką, kurio kita neturi. Nustatykite versijas prieš ką nors skaičiuodami.

Užrašykite išdėstymą kaip antraščių sąrašą, o ne kaip paveikslėlį. Tvarka svarbi skaitant įrašą, o kontrolinės sumos lauko buvimas ar nebuvimas yra pirmas dalykas, kurį reikia pažymėti.

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

Pirmoje eilutėje niekur jos IP antraštėse nėra IP antraštės kontrolinės sumos, o antroje jų yra dvi, kai abi antraštės yra IPv4. Ta pati tunelio technologija, skirtingas skaičius, ir nė viena eilutė nėra visas laido formatas.

Patikrinkite, ką dengia kiekviena kontrolinė suma

Aprėptis yra ta dalis, kurią žmonės praleidžia, ir būtent ji daro skaičių prasmingą. IPv4 antraštės kontrolinė suma apsaugo antraštę ir nieko daugiau, todėl nieko nesako apie už jos esantį naudingąjį krūvį. UDP kontrolinė suma per IPv6 dengia pseudo antraštę bei UDP antraštę ir krūvį, o tai reiškia, kad ji pasiekia į nešamą paketą, kai datagrama yra tuneliuojama. TCP turi savo kontrolinę sumą su panašia priklausomybe nuo pseudo antraštės. Tai trys skirtingos aprėptys, nors visos trys vadinamos kontrolinėmis sumomis.

RFC 791 apibrėžia IPv4 antraštės patikrą ir jos perskaičiavimą kiekviename šuolyje, o RFC 8200 apibrėžia viršutinio sluoksnio apdorojimą per IPv6, įskaitant pseudo antraštę. Nė vienas dokumentas nesako, kad VPN paketas turi fiksuotą kontrolinių sumų skaičių, nes nė vienas neaprašo tunelio.

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

Vientisumo apsaugą patikrinkite atskirai

ESP vientisumas yra kriptografinė apsauga su sava aprėptimi ir nuo algoritmo priklausančiu pateikimu. Tai ne IP ar UDP kontrolinė suma kitu pavadinimu, o jos ilgis kinta priklausomai nuo pasirinktos konstrukcijos. Vientisumo patikra dengia apibrėžtą paketo dalį, kuri priklausomai nuo režimo gali apimti ESP antraštę ir dalį krūvio. Skaičiuoti ją kaip žinomo pločio kontrolinės sumos lauką yra vieta, kurioje dauguma tokių paaiškinimų subyra.

Perskaitykite pasirinktą konstrukciją prieš skaičiuodami baitus ir apibūdinkite rezultatą kaip vientisumo apsaugą, o ne kaip kontrolinę sumą su kita etikete. Dekoderis įvardys lauką, jei jo paklausite.

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

Prieš skaičiuodami patikrinkite stebėjimo tašką

Įrašas vidiniame sąsajoje ir įrašas laide gali parodyti visiškai skirtingus sluoksnius. Vidinėje sąsajoje tunelis jau nuimtas, todėl matote nešamą paketą ir nė vienos išorinių antraščių. Laide matote išorines antraštes ir užšifruotą krūvį, kurio negalite perskaityti. Nė vienas vaizdas nėra klaidingas, ir tai nėra to paties objekto vaizdai. Nurodykite, kur įrašas padarytas, prieš pateikdami bet kokį skaičių.

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

Pirmoji komanda rodo išorinį paketą su vientisumo priedu, o antroji rodo nešamą paketą su savo transporto kontroline suma. Abiejų įrašų skaičių sudėjimas nieko neskaičiuoja dvigubai, bet paaiškina tą patį paketą du kartus.

Palyginkite skaičių su tikru įrašu

Iššifruokite vieną paketą visiškai ir pažymėkite kiekvieną lauką, kurį dekoderis vadina kontroline suma arba vientisumo reikšme. Tada palyginkite kiekvieną žymę su išdėstymu, kurį užrašėte, ir ištrinkite tuos, kurie priklauso sluoksniui, kurio iš tikrųjų neskaičiuojate. Skaičius, kuris atlaiko šį pratimą, yra apginamas, o iš atminties pacituotas skaičius ne.

Pakartokite atsakymo krypčiai, nes tunelis, nešantis abi šeimas, gali skirtis pagal kryptį ir pagal srautą. Tada pasakykite skaičių kartu su jo aprėptimi, pavyzdžiui trys kontrolinės sumos šiam vidiniam paketui šiame stebėjimo taške, o ne kaip bendra VPN paketų savybė.

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

Susiję straipsniai