Twierdzenie, że pakiet VPN niesie dokładnie dwie sumy kontrolne, brzmi schludnie i jest dość często fałszywe, by warto je rozłożyć. Liczba zależy od tego, jakie wersje IP występują, który protokół transportowy jest niesiony i jakiego formatu ochrony używa tunel. Suma kontrolna nagłówka, suma kontrolna wyższej warstwy i kryptograficzny znacznik integralności to trzy mechanizmy o trzech zakresach. Ich liczenie zaczyna się od zaznaczenia, co obejmuje każdy z nich.

Sprawdź, które wersje IP faktycznie są na łączu

Nagłówki IPv4 niosą 16-bitową sumę kontrolną nagłówka, a nagłówki IPv6 nie niosą niczego takiego. Ten jeden fakt zmienia liczbę dla każdego tunelu, ponieważ pakowanie IPv4 w IPv6 i IPv6 w IPv4 daje różne dokumenty. Tunel może nieść obie rodziny naraz, a wtedy jeden kierunek może zawierać pole, którego nie ma drugi. Ustal wersje, zanim cokolwiek policzysz.

Zapisz układ jako listę nagłówków, a nie jako obrazek. Kolejność ma znaczenie przy czytaniu zrzutu, a obecność lub brak pola sumy kontrolnej to pierwsza rzecz do zaznaczenia.

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

Pierwszy wiersz nie ma sumy kontrolnej nagłówka IP nigdzie w swoich nagłówkach IP, podczas gdy drugi ma dwie, gdy oba nagłówki są IPv4. Ta sama technologia tunelu, inna liczba, i żaden z wierszy nie jest pełnym formatem łącza.

Sprawdź, co obejmuje każda suma kontrolna

Zakres to część, którą ludzie pomijają, i to ona nadaje liczbie sens. Suma kontrolna nagłówka IPv4 chroni nagłówek i nic więcej, więc nie mówi nic o ładunku za nim. Suma kontrolna UDP nad IPv6 obejmuje pseudo-nagłówek oraz nagłówek i ładunek UDP, co oznacza, że sięga do niesionego pakietu, gdy datagram jest tunelowany. TCP ma własną sumę kontrolną z podobną zależnością od pseudo-nagłówka. To trzy różne zakresy, choć wszystkie trzy nazywa się sumami kontrolnymi.

RFC 791 definiuje sprawdzanie nagłówka IPv4 i jego przeliczanie na każdym skoku, a RFC 8200 definiuje obsługę wyższej warstwy nad IPv6, w tym pseudo-nagłówka. Żaden dokument nie mówi, że pakiet VPN ma stałą liczbę sum kontrolnych, bo żaden nie opisuje tunelu.

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

Sprawdź ochronę integralności osobno

Integralność ESP to ochrona kryptograficzna z własnym zakresem i reprezentacją zależną od algorytmu. To nie jest suma kontrolna IP lub UDP pod inną nazwą, a jej długość zmienia się wraz z wybraną konstrukcją. Kontrola integralności obejmuje określoną część pakietu, która w zależności od trybu może zawierać nagłówek ESP i część ładunku. Liczenie jej jako pola sumy kontrolnej o znanej szerokości to miejsce, w którym większość takich wyjaśnień się sypie.

Przeczytaj wybraną konstrukcję, zanim policzysz bajty, i opisz wynik jako ochronę integralności, a nie jako sumę kontrolną z inną etykietą. Dekoder nazwie pole, jeśli go zapytasz.

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

Sprawdź punkt obserwacji, zanim policzysz

Zrzut na interfejsie wewnętrznym i zrzut na łączu mogą pokazywać zupełnie różne warstwy. Na interfejsie wewnętrznym tunel jest już zdjęty, więc widać niesiony pakiet i żadnego z zewnętrznych nagłówków. Na łączu widać zewnętrzne nagłówki i zaszyfrowany ładunek, którego nie można odczytać. Żaden widok nie jest błędny i nie są to widoki tego samego obiektu. Wskaż, gdzie wykonano zrzut, zanim podasz jakąkolwiek liczbę.

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

Pierwsze polecenie pokazuje pakiet zewnętrzny z jego końcówką integralności, a drugie pokazuje niesiony pakiet z jego własną sumą kontrolną transportu. Sumowanie liczb z obu zrzutów niczego nie liczy podwójnie, ale dwa razy wyjaśnia ten sam pakiet.

Zestaw liczbę z rzeczywistym zrzutem

Zdekoduj jeden pakiet w całości i zaznacz każde pole, które dekoder nazywa sumą kontrolną lub wartością integralności. Następnie porównaj każde zaznaczenie z zapisanym układem i usuń te, które należą do warstwy, której faktycznie nie liczysz. Liczba, która przetrwa to ćwiczenie, jest do obrony, a liczba przytoczona z pamięci nie jest.

Powtórz to dla kierunku odpowiedzi, ponieważ tunel niosący obie rodziny może się różnić w zależności od kierunku i przepływu. Następnie podaj liczbę wraz z jej zakresem, na przykład trzy sumy kontrolne dla tego wewnętrznego pakietu w tym punkcie obserwacji, a nie jako właściwość pakietów VPN w ogóle.

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

Powiązane artykuły