Czy istnieje sposób na filtrowanie / śledzenie strumienia TCP / SSL w oparciu o konkretny identyfikator procesu za pomocą Wireshark ?
Czy istnieje sposób na filtrowanie / śledzenie strumienia TCP / SSL w oparciu o konkretny identyfikator procesu za pomocą Wireshark ?
Odpowiedzi:
Nie wiem jak. PID nie pojawia się na kablu (ogólnie rzecz biorąc), a Wireshark pozwala spojrzeć na to, co jest na kablu - potencjalnie wszystkie maszyny, które komunikują się przez kabel. W każdym razie identyfikatory procesów nie są unikalne na różnych komputerach.
Na wypadek, gdybyś szukał alternatywnego sposobu, a środowiskiem, którego używasz, jest Windows, dobrym wyborem jest Microsoft Network Monitor 3.3. Zawiera kolumnę z nazwą procesu. Z łatwością dodasz go do filtra za pomocą menu kontekstowego i zastosujesz filtr .. Jak zwykle GUI jest bardzo intuicyjne ...
Możesz dopasować numery portów od wireshark do numerów portów od, powiedzmy, netstat, który powie ci PID procesu nasłuchującego na tym porcie.
Użyj programu Microsoft Message Analyzer w wersji 1.4
Przejdź do ProcessId z selektora pól.
Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId
Kliknij prawym przyciskiem myszy i Dodaj jako kolumnę
W systemie Windows istnieje eksperymentalna kompilacja, która to robi, zgodnie z opisem na liście mailingowej Filtruj według nazwy procesu lokalnego
Jest to ważna rzecz, którą można zrobić, aby monitorować, gdzie pewne procesy próbują się połączyć, i wydaje się, że nie ma na to żadnego wygodnego sposobu na Linuksie. Jednak możliwych jest kilka obejść, dlatego uważam, że warto o nich wspomnieć.
Istnieje program o nazwie nonet, który umożliwia uruchamianie programu bez dostępu do Internetu (mam w systemie skonfigurowaną większość programów uruchamiających). Używa setguid do uruchamiania procesu w grupie nonet i ustawia iptables regułę aby odrzucać wszystkie połączenia z tej grupy.
Aktualizacja: teraz używam jeszcze prostszego systemu, możesz łatwo mieć czytelną konfigurację iptables za pomocą ferm i po prostu użyć programu sg
do uruchomienia programu z określoną grupą. Iptables pozwala również na przekierowanie ruchu, więc możesz nawet przekierować go do oddzielnego interfejsu lub lokalnego serwera proxy na porcie, co pozwala na filtrowanie w wireshark lub LOGowanie pakietów bezpośrednio z iptables, jeśli nie chcesz wyłączać całego internetu sprawdzają ruch.
Dostosowanie go do uruchamiania programu w grupie i odcinania całego pozostałego ruchu z iptables na czas wykonywania nie jest zbyt skomplikowane, a wtedy można przechwytywać ruch tylko z tego procesu.
Jeśli kiedykolwiek dojdę do napisania tego, zamieszczę link tutaj.
Z drugiej strony, zawsze możesz uruchomić proces na maszynie wirtualnej i powąchać odpowiedni interfejs, aby wyodrębnić połączenia, które tworzy, ale byłoby to znacznie gorsze rozwiązanie ...
Jeśli chcesz śledzić aplikację, która wciąż musi zostać uruchomiona, z pewnością jest to możliwe:
docker run -t -i ubuntu /bin/bash
(zmień „ubuntu” na swoją ulubioną dystrybucję, to nie musi być takie samo jak w prawdziwym systemie)any
, wlan0
, eth0
, ... wybrać nowy wirtualny interfejs docker0
zamiast.Możesz mieć wątpliwości co do uruchamiania oprogramowania w kontenerze, więc oto odpowiedzi na pytania, które prawdopodobnie zechcesz zadać:
W niektórych przypadkach nie można filtrować według identyfikatora procesu. Na przykład w moim przypadku musiałem węszyć ruch z jednego procesu. Ale znalazłem w jego konfiguracji adres IP maszyny docelowej, dodany filtr ip.dst==someip
i voila. W każdym razie to nie zadziała, ale dla niektórych jest przydatne.
Uzyskaj numer portu za pomocą netstat
:
netstat -b
A następnie użyj filtru Wireshark:
tcp.port == portnumber
Użycie strace
jest bardziej odpowiednie w tej sytuacji.
strace -f -e trace=network -s 10000 -p <PID>;
opcje -f
śledzenia wszystkich rozwidlonych procesów, -e trace=netwrok
filtrowania tylko wywołań systemowych sieci i -s
wyświetlania łańcucha o długości do 10000 znaków.
Możesz również śledzić tylko niektóre wywołania, takie jak operacje wysyłania, odbierania i odczytu.
strace -f -e trace=send,recv,read -s 10000 -p <PID>;
Możesz sprawdzić numery portów za pomocą tych przykładów poleceń w programie wireshark: -
tcp.port == 80
tcp.port == 14220