Jak analizować ruch sieciowy?

Dobrym sposobem na stworzenie sieciowego sniffera jest wykorzystanie systemu Linux. Praktycznie w każdej dystrybucji dostępne są niezbędne narzędzia: biblioteka libpcap, oraz narzędzia tcpdump i iptraf. Nawet niezbyt zaawansowany sieciowy serwer może w zupełności realizować postawione zadania.

Decyzja gdzie i w jaki sposób umieścić sniffer w sieci jest niezwykle istotna dla procesu analizy pakietów. Dla losowo pojawiających się problemów, w których niezbędna jest analiza w danym miejscu, powinniśmy zainstalować omawiane narzędzia na komputerze przenośnym. W ten sposób będziemy mogli przeprowadzić analizę, możliwie blisko strumienia danych wysyłanych przez interesujący nas węzeł. Dla celów rutynowej kontroli, monitorowania i określania zachowań, powinniśmy umieścić sniffer w miejscu, przez który realizowana jest wymiana ruchu z internetem.

Polecamy: Analizatory sieci - monitoring i bezpieczeństwo

Zobacz również:

  • Dzięki tej umowie polska policja zyska wiedzę i narzędzia zapobiegające cyfrowym zagrożeniom

W każdym z omawianych przypadków, sniffer musi zostać przyłączony do portu przełącznika, który potrafi kopiować cały ruch sieciowy. Inną droga jest wykorzystanie koncentratora. Koncentrator powinien zostać umieszczony pomiędzy przełącznikiem, a pozostałą częścią sieci.

Biblioteka libpcap nie jest uruchamiana bezpośrednio, ale jako niezbędny komponent narzędzia tcpdump oraz iptraf. Tcpdump przetwarza informacje zebrane przez libpcap, a następnie prezentuje dane - pakiet po pakiecie.

Tcpdump przeważnie jest zlokalizowany w katalogu /usr/local/sbin/. W środowisku BASH, ścieżki do katalogów umieszczane są w zmiennej PATH w pliku .bash_profile w domowym katalogu użytkownika. Tcpdump przeważnie jest uruchamiany przez wpisanie polecenia tcpdump z linii poleceń. Bez użycia jakiejkolwiek opcji/przełącznika po poleceniu tcpdump, przykładowy zapis ruchu SSH może wyglądać następująco:

21:10:33.307526 IP 192.168.2.3.1368 > 192.168.2.21.ssh: P 45:89(44) ack 232 win 5512

21:10:33.307547 IP 192.168.2.21.ssh > 192.168.2.3.1368: . ack 89 win 7504

Pierwsze dwa pakiety pokazują komunikację klient-serwer. Domyślny ekran pokazuje czas przechwycenia pakietu, typ protokołu, źródłowy adres IP i port, docelowy adres IP i port oraz krótkie podsumowanie zawartości pakietu. Wiele problemów sieciowych może zostać zdiagnozowanych już na tym etapie.

Tcpdump może być uruchamiany z wieloma opcjami, w celu modyfikacji zbieranych i prezentowanych danych. Przełącznik -n nie zezwoli na tłumaczenia adresu IP na nazwę. W poniżej przedstawionym przykładzie, usługa DNS została zablokowana w sieci, ale sniffer kontynuuje wysyłanie zapytań DNS jak widać poniżej:

21:10:33.308257 IP 192.168.2.21.32769 > 192.168.2.1.domain: 23316+ PTR? 3.2.168.192.in-addr.arpa. (42)

Te zapytania bez odpowiedzi drastycznie zmniejszają prędkość zbierania i prezentowania danych. Użycie przełącznika -n wyeliminuje ten problem.

Jeżeli istnieje kilka węzłów w sieci, natomiast interesuje nas wyłącznie ruch od/do danego klienta, możemy wykorzystać przełącznik host. W przypadku konieczności dalszej analizy, wyniki mogą zostać skierowane do pliku. W celu określenia problemów pomiędzy węzłami sieci, które nawiązują tysiące komunikujących się sesji, najlepszą opcją jest przekierowanie danych do pliku i analiza metodami filtracji. Komenda zapisująca do pliku cały ruch zawierający w pakietach adres IP 192.168.2.3 to:

tcpdump -n host 192.168.2.3 > trace.192.168.2.3.06050101

Tworząc pliki zgodnie z pewną konwencją zapisu informacji (typ pliku, adres, data, dodatkowe oznaczenie), późniejsza analiza i odszukanie danego typu ruchu staje się całkiem łatwa.

Filtracja zapisanych danych do poziomu protokołu, możliwa jest poprzez wykorzystanie prostych komend. Aby analizować komunikację SSH pomiędzy klientem i serwerem, wystarczy wykorzystać komendę:

more trace.192.168.2.3.06050101 | grep 192.168.2.21.22

W ten sposób zobaczymy wszystkie pakiety należące do komunikacji SSH, podczas założonego czasu śledzenia.

Aby wniknąć głębiej w pakiet, należy wykorzystać przełączniki -vvv oraz -X. Wśród natłoku informacji, otrzymamy między innymi szesnastkową i ASCII reprezentację danych zawartych w pakiecie. Jedynym użytecznymi informacjami w głębszej analizie pakietów są dane ASCII. Przykładem ćwiczenia, które warto przeprowadzić, może być przechwycenie dwóch sesji terminalowych - jednej dla protokołu telnet (dane przesyłane czystym tekstem), a drugiej dla ssh (szyfrowany tekst). W czasie trwania obu sesji przekazujemy takie same informacje. Zapis sesji telnet pokaże wszystko, co było wpisywane (łącznie z nazwą użytkownika i hasłem), podczas gdy zapis sesji ssh nie będzie możliwy do odczytania.

Często występuje konieczność nasłuchiwania ruchu dla dwóch różnych interfejsów sieciowych. Przełącznik -i może podpowiedzieć tcpdump, na którym interfejsie sieciowym ma nasłuchiwać.

Interesującym narzędziem jest iptraf, który przedstawia wartościowe informacje przez prosty interfejs tekstowy. Program jest standardowo zlokalizowany w katalog /usr/local/bin/. Uruchomienie iptraf spowoduje wywołanie rozwijanego menu z opcjami. Nawet wybór domyślnych opcji, pozwoli iptraf rozpocząć przechwytywanie pakietów. W przeciwieństwie do tcpdump, iptraf śledzi wszystkie połączenia TCP w głównym oknie oraz pakiety UDP w dodatkowym oknie. Szczegółowe opcje statystyk interfejsów dostępne w głównym menu, podsumowują aktywność na poszczególnych interfejsach sieciowych.

Trendy i historyczna analiza pakietów jest w wielu przypadkach bardziej istotna niż bieżąca analiza pakietów. Dobrym pomysłem na poznanie własnej sieci jest uruchamianie omawianych narzędzi podczas prawidłowej pracy infrastruktury. Gdy poznamy standardowe zachowania pakietów, łatwiej będzie odnaleźć źródło problemów w przypadku awarii.

***

Tekst powstał na podstawie materiałów TechWold.com

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200