Zacznij od przechwycenia, które rozpoczyna się przed pierwszym pakietem próby, inaczej będziesz czytać środek rozmowy. Trwająca już negocjacja pokazuje zaszyfrowane wymiany i odświeżanie kluczy, a żadne z nich nie wygląda jak otwarcie. Otwarcie to część, którą można zdekodować bez kluczy, i dlatego tak dobrze odpowiada na pytania o osiągalność. Cztery kontrole po kolei prowadzą od świeżego przechwycenia do obronnego stwierdzenia o tym, która strona przestała mówić.

Najpierw potwierdź, że przechwycenie zaczyna się od początku

Przechwycenie rozpoczęte po podniesieniu tunelu będzie zawierać enkapsulowany strumień danych i okresowe keepalive, a oba są albo zaszyfrowane, albo prawie puste. Uruchom klienta ponownie i zarejestruj samą próbę albo celowo wywołaj nowe połączenie w trakcie przechwytywania. Jeśli nie możesz wytworzyć świeżej próby, zapisz to w notatkach, bo żadne dekodowanie nie odtworzy otwarcia, którego nigdy nie nagrałeś.

Ogranicz przechwycenie do dwóch punktów końcowych oraz do UDP 500 i 4500, aby plik pozostał wystarczająco mały do czytania. Na zajętym hoście niefiltrowane przechwycenie zakopuje negocjację pod niepowiązanym ruchem.

tcpdump -i any -n -s 0 -w fresh-ike.pcap 'udp port 500 or udp port 4500'

Zachowaj plik, gdy próba jest interesująca, bo to samo przechwycenie odpowiada na oba kolejne pytania: czym była wymiana i czy coś wróciło. Oznacz je czasem rozpoczęcia i parą punktów końcowych, na którą filtrowałeś. Przechwycenie bez tych dwóch faktów jest bezużyteczne tydzień później, gdy adresy się zmieniły i nikt nie pamięta, którą próbę zarejestrowano.

Po drugie, czytaj nagłówek przed ładunkami

Nagłówek IKE niesie indeksy parametrów bezpieczeństwa, typ wymiany i identyfikator komunikatu, a w nowej negocjacji te wartości są charakterystyczne. Inicjator wymyśla niezerowe SPI, pierwsze żądanie niesie zerowe SPI respondenta, bo nie widziano jeszcze odpowiedzi, typ wymiany to IKE_SA_INIT, a identyfikator komunikatu to zero. Wszystko inne należy do późniejszego etapu tej samej negocjacji albo do zupełnie innej próby.

Ładunki propozycji, wymiany kluczy i nonce w tej pierwszej wymianie są czytelne w otwartej postaci. Czytelność nie oznacza uwierzytelnienia i w tym momencie żadna strona nie dowiodła swojej tożsamości.

Prywatna wartość Diffie-Hellmana nigdy nie przekracza przewodu, więc przechwycenie nie pozwala wyprowadzić kluczy sesji. Uwierzytelnienie następuje w kolejnej wymianie, chronione tym, co wynegocjowała pierwsza. Jeśli ktoś pyta, czy strona jest autentyczna, ta wymiana nie może odpowiedzieć na to pytanie. Może jedynie pokazać, że obie strony zgodziły się na propozycję i wytworzyły wspólny sekret, którego plik nie zawiera.

Po trzecie, dopasuj żądanie do jego odpowiedzi

Dopasuj po parze SPI, typie wymiany i identyfikatorze komunikatu, a następnie sprawdź flagę odpowiedzi. Retransmisja powtarza identyfikator komunikatu oryginału i nie jest drugą próbą logowania. Liczenie pakietów zamiast wymian to droga, na której zdrowa negocjacja staje się pętlą widmo.

Odpowiedź może być też odmową: żądanie cookie, powiadomienie o nieakceptowalnej grupie albo błąd dotyczący propozycji. To są uzasadnione odpowiedzi i oznaczają, że ścieżka działa, a polityka nie. Zdekoduj powiadomienie, zamiast traktować każdą odpowiedź jako sukces. Gdy powiadomienie wskazuje grupę lub propozycję, naprawa jest po stronie konfiguracji, a nie na zaporze.

Kierunek też ma znaczenie. Żądanie bez odpowiedzi i odpowiedź, która nigdy nie dociera do klienta, to różne usterki, i tylko druga wygląda jak przekroczenie czasu po stronie klienta.

Po czwarte, oddziel IKE od wszystkiego innego na 4500

Port 4500 niesie trzy rzeczy, które w widoku skróconym wyglądają tak samo: IKE za czterobajtowym zerowym znacznikiem non-ESP, enkapsulowany ESP, którego pozycja znacznika zawiera niezerowe SPI, oraz krótkie keepalive. To ten znacznik oddziela IKE od enkapsulowanego ESP, więc przeczytaj te bajty, zanim nazwiesz ruch IKE. Etykieta przechwycenia czytająca 4500 to numer portu, a nie protokół.

Enkapsulowany ESP to zaszyfrowany ładunek, którego nie zinterpretujesz bez kluczy, a jego obecność może być oznaką działającego tunelu, a nie usterki.

Obserwuj oba porty dla tej samej próby, bo IKE może przenieść się na 4500 po wykryciu NAT, choć otworzył się na 500. Ślad filtrowany tylko po 500 wygląda cicho dokładnie wtedy, gdy negocjacja się powiodła i przeniosła. Rozszerz filtr i przeczytaj to samo okno czasowe ponownie, zanim wyciągniesz jakikolwiek wniosek z braku.

Co oznacza cisza w jednym punkcie obserwacji

Brak odpowiedzi u klienta dowodzi tylko tego, co zaobserwował ten punkt. Filtrowanie, trasowanie, zły adres zdalny, zatrzymana usługa i niezgodność protokołu dają ten sam pusty ślad.

Istotny ICMP unreachable dodaje dowód, ale przeczytaj cytowany w nim pakiet i zanotuj adres urządzenia, które go wysłało.

Odrzucenie przez router to inne zdarzenie niż uwierzytelniony błąd zwrócony przez stronę, i tylko to drugie dowodzi, że usługa żyje. Skoreluj tę samą próbę z logami serwera albo zatwierdzoną obserwacją, aby dowiedzieć się, czy żądanie dotarło i czy odpowiedź wyszła. Trzymaj przechwycenia ograniczone i prywatne, bo czytelne pola uzgadniania nie czynią reszty pliku nieszkodliwą. Wynik, który jest wart zachodu, to jedna dopasowana para żądania i odpowiedzi albo jedna udokumentowana luka z nazwanym punktem obserwacji.

Powiązane artykuły