Przechwytywanie pakietów sieciowych przy pomocy tcpdump już przy starcie systemu
Uruchamianie przechwytywania pakietów sieciowych przy pomocy tcpdump już na etapie ładowania systemu może być nieocenione w diagnozowaniu problemów związanych z siecią oraz bezpieczeństwem. Wczesne przechwycenie ruchu pozwala na rejestrowanie pakietów zanim jakiekolwiek usługi użytkownika czy aplikacje zostaną uruchomione i jeszcze zanim ktokolwiek zaloguje się do systemu, jakikolwiek użytkownik co jest szczególnie istotne w sytuacjach, gdy […]

Uruchamianie przechwytywania pakietów sieciowych przy pomocy tcpdump już na etapie ładowania systemu może być nieocenione w diagnozowaniu problemów związanych z siecią oraz bezpieczeństwem.
Wczesne przechwycenie ruchu pozwala na rejestrowanie pakietów zanim jakiekolwiek usługi użytkownika czy aplikacje zostaną uruchomione i jeszcze zanim ktokolwiek zaloguje się do systemu, jakikolwiek użytkownik co jest szczególnie istotne w sytuacjach, gdy podejrzewasz problemy z konfiguracją sieci lub występowanie złośliwej aktywności, która może pojawić się na bardzo wczesnym etapie działania systemu, a po zalogowaniu się będzie dodatkowy szum informacyjny. Dzięki temu możesz uchwycić pełne dane, takie jak konfiguracja DHCP, zapytania DNS czy ruch inicjowany przez system w trakcie bootowania.
Takie rozwiązanie sprawdza się także w scenariuszach, gdzie system działa w środowiskach o wysokich wymaganiach bezpieczeństwa, takich jak serwery czy urządzenia IoT, gdzie każde nieautoryzowane połączenie może być potencjalnym zagrożeniem. Logowanie ruchu od startu systemu pozwala na pełną widoczność w zakresie wczesnych pakietów przychodzących i wychodzących, co może pomóc w identyfikacji potencjalnych ataków, błędów konfiguracji lub anomalii w ruchu sieciowym.
Dzięki temu, tcpdump staje się narzędziem nie tylko do diagnostyki, ale również do wczesnego wykrywania zagrożeń. To oczywiście w dużym uproszczeniu i samo włączenie tcpdump’a nie wystarczy, ale jest to kolejna cegiełka, którą dokładamy do naszego bezpieczeństwa.
W tym artykule na przykładzie systemu CentOS Stream 9 pokażę jak przygotować taki skrypt, który po uruchomieniu systemu zacznie zczytywać nam logi aktywności.
Na początek utworzymy plik startowy do systemd:
/etc/systemd/system/boot-tcpdump.service
i wrzucimy do niego zawartość poniższą:
[Unit]
Description=tcpdump
After=network.target
Before=remote-fs-pre.target
[Service]
Type=simple
ExecStart=/usr/sbin/tcpdump -s0 -n -i any -w /root/tcpdump.pcap
Restart=on-abort
[Install]
WantedBy=multi-user.target
Kolejno musimy włączyć skrypt do startu:
systemctl enable boot-tcpdump.service
Omówienie wybranych sekcji:
[Unit]
Description=tcpdump
Ta linia opisuje usługę, podając jej nazwę lub cel. W tym przypadku wskazuje, że jest to usługa przechwytywania pakietów przy użyciu tcpdump.
After=network.target
Określa, że usługa powinna zostać uruchomiona po aktywacji network.target, co oznacza, że usługa poczeka, aż podstawowe elementy sieci będą dostępne. Jest to o tyle istotne, że gdybyśmy uruchomili ją przed startem sieci, mogła by się nie uruchomić lub wyrzucić błąd.
Before=remote-fs-pre.target
Wskazuje, że usługa musi zostać uruchomiona przed remote-fs-pre.target, co obejmuje montowanie zdalnych systemów plików. Dzięki temu tcpdump przechwytuje pakiety jeszcze przed rozpoczęciem komunikacji z zewnętrznymi systemami.
W sekcji [Service] większość jest pewnie jasne, omówię więc sam start tcpdumpa z poszczególnymi przełącznikami.
ExecStart=/usr/sbin/tcpdump -s0 -n -i any -w /root/tcpdump.pcap
Ta linia definiuje polecenie, które ma zostać wykonane po uruchomieniu usługi:
-s0: Ustawia rozmiar przechwytywanego pakietu na pełen rozmiar (domyślnie jest to ograniczone do 96 bajtów).
-n: Wyłącza rozwiązywanie nazw hostów, co przyspiesza proces i zmniejsza liczbę dodatkowych zapytań DNS.
-i any: Przechwytuje pakiety na wszystkich dostępnych interfejsach sieciowych.
-w /root/tcpdump.pcap: Zapisuje przechwycone pakiety do pliku w formacie .pcap w katalogu /roota.
Można w tym miejscu oczywiście zmienić ustawienia na dowolne inne. Na przykład gdybyśmy chcieli przechwytywać pakiety tylko dla komunikacji email na portach 25, 587, 465 to konfiguracja mogłaby wyglądać tak:
/usr/sbin/tcpdump -s0 -n -i any 'port 25 or port 587 or port 465′ -w /root/email-tcpdump.pcap
A gdybyśmy chcieli monitorować tylko ruch http I https to mogłoby to wyglądać tak:
/usr/sbin/tcpdump -s0 -n -i any 'port 80 or port 443′ -w /root/http-tcpdump.pcap
Pamiętajmy, że każdorazowo zmiany należy przeładowywać poprzez:
systemctl daemon-reload
Pozostaje zatem reboot systemu:
reboot
Po restarcie od razu w katalogu root pojawia się plik:
boot.pcap
zawierający przechwycone informacje.
Zamknięcie procesu
Kiedy chcemy zamknąć proces wystarczy wydać komendę:
pkill tcpdump
Przeglądanie logów
Na pewno sporo osób po zalogowaniu paczek będzie zastanawiała się jak przeglądać taki plik z wygenerowanym strumieniem danych. Plik bowiem wygląda tak:
Jest to w pewien sposób niezrozumiałe na pierwszy rzut oka, ale z pomocą przychodzą przeglądarki tego typu logów, które upraszczają cały proces.
Jednym z takich narzędzi może być tshark – konsolowa wersja wiresharka.
dnf –y install wireshark-cli
Po instalacji odpowiedniego pakietu zabieramy się za przeglądanie naszego pliku .pcap.
tshark -r /root/boot.pcap
Wygląda nieco lepiej prawda? Ale nie wyczerpuje tematu. Możemy tu filtrować zapytania poprzez odpowiednie przełączniki. Na przykład gdybyśmy chcieli zobaczyć tylko połączenia po protokole ntp.
tshark -r /root/boot.pcap -Y ‘ntp’
Możemy też dokonać konwersji całego pliku I przeglądać go w innym narzędziu lub w takiej postaci już można eksportować go do centralnego logowania.
tshark -r boot.pcap -T text > log-tekstowy.txt