Cum să utilizați filtrele Wireshark pe Linux

Wireshark este un analizor de pachete de clasă mondială disponibil pe Linux, Windows și macOS. Filtrele sale sunt flexibile și sofisticate, dar uneori, contraintuitive. Vă vom explica „obscurturile” la care trebuie să fiți atent.

Analiza pachetelor cu Real Bite

Wireshark este una dintre bijuteriile lumii open-source. Este un instrument software de clasă mondială, folosit atât de profesioniști, cât și de amatori, pentru a investiga și a diagnostica problemele de rețea. Dezvoltatorii de software îl folosesc pentru a identifica și caracteriza erorile din rutinele de comunicare. Cercetătorii în domeniul securității îl folosesc pentru a capta și a elimina activitățile rău intenționate dintr-o rețea.

Un flux de lucru tipic este să rulați Wireshark în modul Captură, astfel încât să înregistreze traficul de rețea printr-una dintre interfețele de rețea de pe computer. Pachetele de rețea sunt afișate în timp real, pe măsură ce sunt capturate. Cu toate acestea, în analiza post-captură este dezvăluit detaliul granular a ceea ce se întâmplă în rețea.

Pachetele capturate sunt numite urmă. Când captura este completă, urma poate fi parcursă, pachet cu pachet. Puteți inspecta orice pachet în cel mai mic detaliu, puteți planifica „conversațiile” din rețea între dispozitive și puteți utiliza filtre pentru a include (sau exclude) pachete din analiza dumneavoastră.

Capacitățile de filtrare ale Wireshark sunt de neegalat, cu o mare flexibilitate și putere de rezoluție. Există subtilități în sintaxa lor care fac ușor să scrieți un filtru și să obțineți un rezultat care nu corespunde așteptărilor dumneavoastră.

Dacă nu înțelegeți cum funcționează filtrele în Wireshark, nu veți ieși niciodată din prima treaptă și nu veți accelera capabilitățile software-ului.

Instalarea Wireshark

Când instalați Wireshark, sunteți întrebat dacă cineva care utilizează un cont non-root ar trebui să poată captura urmele rețelei. A spune nu la asta ar putea fi o idee atractivă. Este posibil să nu doriți ca toată lumea să poată vedea ce se întâmplă în rețea. Cu toate acestea, instalarea Wireshark astfel încât numai cei cu privilegii root să-l poată utiliza înseamnă că toate componentele sale vor rula cu permisiuni ridicate.

Wireshark conține peste 2 milioane de linii de cod complicat și interacționează cu computerul la cel mai de jos nivel. Cele mai bune practici de securitate recomandă să ruleze cât mai puțin cod posibil cu privilegii ridicate, mai ales când funcționează la un nivel atât de scăzut.

Este mult mai sigur să rulezi Wireshark cu un cont de utilizator obișnuit. Putem încă restricționa cine are capacitatea de a rula Wireshark. Acest lucru necesită câțiva pași suplimentari de configurare, dar este cel mai sigur mod de a continua. Elementele de captare a datelor din Wireshark vor rula în continuare cu privilegii ridicate, dar restul Wireshark rulează ca un proces normal.

Pentru a începe instalarea pe Ubuntu, tastați:

sudo apt-get install wireshark

Pe Fedora, tastați:

sudo dnf install wireshark

Pe Manjaro, utilizați această comandă:

sudo pacman -Syu wireshark-qt

În timpul instalării, veți vedea ecranul de mai jos, care vă recomandă să nu rulați Wireshark ca root. Apăsați Tab pentru a muta marcajul roșu la „” și apăsați pe bara de spațiu.

Pe următorul ecran, apăsați Tab pentru a muta evidențierea roșie la „” și apăsați pe bara de spațiu.

Ecranul de opțiuni care permite utilizatorilor non-root să ruleze Wireshark, cu

Pentru a rula Wireshark, trebuie să fiți membru al grupului „wireshark”, care este creat în timpul instalării. Acest lucru vă permite să controlați cine poate rula Wireshark. Oricine nu este în grupul „wireshark” nu poate rula Wireshark.

  Cum se instalează software-ul de supraveghere Bluecherry pe Linux

Pentru a vă adăuga în grupul „Wireshark”, utilizați această comandă:

sudo usermod -a -G wireshark $USER

Pentru ca noul dvs. membru al grupului să intre în vigoare, puteți să vă deconectați și să vă reconectați sau să utilizați această comandă:

newgrp wireshark

Pentru a vedea dacă vă aflați în noul grup, utilizați comanda grupuri:

groups

Ar trebui să vedeți „wireshark” în lista de grupuri.

Se pornește Wireshark

Puteți lansa Wireshark cu comanda de mai jos. Ampersand (&) lansează Wireshark ca sarcină de fundal, ceea ce înseamnă că puteți continua să utilizați fereastra terminalului. Puteți chiar să închideți fereastra terminalului și Wireshark va continua să ruleze.

Introduceți următoarele:

Wireshark &

Apare interfața Wireshark. Sunt listate dispozitivele de interfață de rețea prezente în computerul dvs., împreună cu unele pseudo-dispozitive încorporate.

O linie ondulată lângă o interfață înseamnă că aceasta este în direct și traficul de rețea trece prin ea. O linie plată înseamnă că nu există activitate pe interfață. Elementul de top din această listă este „enp0s3”, conexiunea prin cablu pentru acest computer și, așa cum era de așteptat, arată activitatea.

Pentru a începe capturarea pachetelor, facem clic dreapta pe „enp0s3”, apoi selectăm „Start Capture” în meniul contextual.

Clic

Puteți seta filtre pentru a reduce volumul de trafic captat de Wireshark. Preferăm să surprindem totul și să filtram tot ceea ce nu dorim să vedem atunci când facem o analiză. În acest fel, știm că tot ce s-a întâmplat este în urmă. Nu doriți să pierdeți din neatenție un eveniment de rețea care explică situația pe care o investigați datorită filtrului de captură.

Desigur, pentru rețelele cu trafic ridicat, urmele pot deveni rapid foarte mari, așa că filtrarea la captură are sens în acest scenariu. Sau, poate doar preferați așa.

Rețineți că sintaxa pentru filtrele de captare sunt ușor diferite decât atât pentru afișaje.

Pictogramele evidențiate din imaginea de mai sus indică următoarele, de la stânga la dreapta:

Înotătoarea de rechin: dacă aceasta este albastră, făcând clic pe ea va începe o captură de pachet. Dacă Wireshark captează pachete, această pictogramă va fi gri.
Pătrat: Dacă acesta este roșu, făcând clic pe acesta va opri o captură de pachet în execuție. Dacă Wireshark nu captează pachete, această pictogramă va fi gri.
Înotătoarea de rechin cu săgeată circulară: dacă aceasta este verde, făcând clic pe ea, se va opri trasarea curentă. Acest lucru vă oferă posibilitatea de a salva sau de a elimina pachetele capturate și de a reporni urmărirea. Dacă Wireshark nu captează pachete, această pictogramă va fi gri.

Analizarea Urmei

Făcând clic pe pictograma pătrat roșu, va opri captura de date, astfel încât să puteți analiza pachetele capturate în urmărire. Pachetele sunt prezentate în ordine de timp și sunt codificate cu culori conform protocolului pachetului. Detaliile pachetului evidențiat sunt afișate în cele două panouri inferioare din interfața Wireshark.

O modalitate simplă de a facilita citirea urmei este ca Wireshark să furnizeze nume semnificative pentru adresele IP sursă și destinație ale pachetelor. Pentru a face acest lucru, faceți clic pe Vizualizare > Rezoluție nume și selectați „Rezolvare adrese de rețea”.

Wireshark va încerca să rezolve numele dispozitivelor care au trimis și primit fiecare pachet. Nu va putea identifica fiecare dispozitiv, dar cele pe care le poate vă vor ajuta să citiți urma.

Derularea ecranului spre stânga va dezvălui mai multe coloane în partea dreaptă. Coloana de informații arată orice informații pe care Wireshark le poate detecta din pachet. În exemplul de mai jos, vedem câteva solicitări și răspunsuri ping.

  Cum să faci o copie de rezervă a hard diskului de la distanță pe Linux

În mod implicit, Wireshark afișează toate pachetele în ordinea în care au fost urmărite. Multe dispozitive trimit pachete simultan înainte și înapoi. Aceasta înseamnă că o singură conversație între două dispozitive este probabil să aibă pachete de la altele întrețesute între ele.

Pentru a examina o singură conversație, o puteți izola prin protocol. Protocolul pentru fiecare pachet este afișat în coloana de protocol. Majoritatea protocoalelor pe care le veți vedea aparțin familiei TCP/IP. Puteți specifica protocolul exact sau puteți utiliza Ethernet ca un fel de catchall.

Faceți clic dreapta pe oricare dintre pachetele din secvența pe care doriți să o examinați, apoi faceți clic pe Filtru conversație > Ethernet. În exemplul de mai jos, am selectat un pachet de solicitare ping.

Ping izolat

Secvența de pachete este afișată fără altele între ele, deoarece Wireshark a generat automat un filtru pentru a face acest lucru. Este afișat în bara de filtre și evidențiat în verde, ceea ce indică că sintaxa filtrului este corectă.

Pentru a șterge filtrul, faceți clic pe „X” pe bara de filtru.

Crearea propriilor filtre

Să punem un filtru simplu în bara de filtre:

ip.addr == 192.168.4.20

Aceasta selectează toate pachetele care au fost trimise sau primite de către dispozitiv cu adresa IP 192.168.4.20. Observați semnele dublu egal (==) fără spațiu între ele.

Pentru a vedea pachetele trimise de un dispozitiv (sursa), puteți folosi ip.src; pentru a vedea pachetele care au ajuns la un dispozitiv (destinația), puteți utiliza ip.dst, după cum se arată mai jos:

ip.dst == 192.168.4.20 && ip.src == 192.168.4.28

Rețineți că folosirea unui ampersand dublu (&&) pentru a indica „și” logic. Acest filtru caută pachetele care au ajuns la 192.168.4.20 de la 192.168.4.28.

Oamenii nou la filtrele Wireshark cred adesea că un filtru ca acesta va capta toate pachetele dintre două adrese IP, dar nu este cazul.

Ceea ce face de fapt este să filtreze toate pachetele către sau de la adresa IP 192.168.4.20, indiferent de unde au venit sau de unde au fost trimise. Face același lucru cu toate pachetele de la adresa IP 192.168.4.28. Pentru a spune mai simplu, filtrează tot traficul către sau de la oricare dintre adresele IP.

Puteți căuta activitate și pe alte protocoale. De exemplu, puteți introduce acest filtru pentru a căuta solicitări HTTP:

http.request

Pentru a exclude pachetele care au provenit sau au fost trimise către un dispozitiv, utilizați un semn de exclamare (!) și includeți filtrul în paranteze [()]:

!(ip.addr == 192.168.4.14)

Acest filtru exclude toate pachetele trimise către sau de la 192.168.4.14.

Este contraintuitiv deoarece filtrul conține operatorul de egalitate (==). Poate v-ați fi așteptat să introduceți acest filtru astfel:

ip.addr !=192.168.4.14

Totuși, acest lucru nu va funcționa.

De asemenea, puteți căuta șiruri în cadrul pachetelor, după protocol. Acest filtru caută Protocol de control al transmisiei (TCP) pachete care conțin șirul „youtube”:

tcp contains youtube

Un filtru care caută retransmisia este util ca o modalitate de a verifica dacă există o problemă de conectivitate. Retransmisiile sunt pachete care sunt retrimise deoarece au fost deteriorate sau pierdute în timpul transmisiei inițiale. Prea multe retransmisii indică o conexiune lentă sau un dispozitiv care răspunde lent.

Introduceți următoarele:

tcp.analysis.retransmission

Naștere, viață, moarte și criptare

O conexiune de rețea între două dispozitive este inițiată ori de câte ori unul îl contactează pe celălalt și trimite un pachet SYN (sincronizare). Dispozitivul de primire trimite apoi un pachet ACK (confirmare). Indică dacă va accepta conexiunea prin trimiterea unui pachet SYN.

  Cum să actualizați Debian Linux la o nouă versiune

SYN și ACK sunt de fapt două steaguri în același pachet. Dispozitivul original recunoaște SYN prin trimiterea unui ACK, iar apoi dispozitivele stabilesc o conexiune la rețea.

Aceasta se numește strângere de mână în trei căi:

A -> SYN -> B

A  ACK -> B

În captura de ecran de mai jos, cineva de pe computer „nostromo.local” face o Shell Securizat (SSH) conexiune la computerul „ubuntu20-04.local”. Strângerea de mână în trei căi este prima parte a comunicării dintre cele două computere. Rețineți că cele două linii care conțin pachetele SYN au coduri de culoare gri închis.

Derularea afișajului pentru a afișa coloanele din dreapta dezvăluie pachetele de handshake SYN , SYN/ACK și ACK.

Veți observa că schimbul de pachete dintre cele două computere alternează între protocoalele TCP și SSH. Pachetele de date sunt transmise prin conexiunea SSH criptată, dar pachetele de mesaje (cum ar fi ACK) sunt trimise prin TCP. Vom filtra pachetele TCP în curând.

Când conexiunea la rețea nu mai este necesară, aceasta este eliminată. Secvența de pachete pentru a întrerupe o conexiune de rețea este o strângere de mână în patru căi.

O parte trimite un pachet FIN (terminare). Celălalt capăt trimite un ACK pentru a confirma FIN și apoi trimite, de asemenea, un FIN pentru a indica că este de acord că conexiunea ar trebui să fie întreruptă. Prima parte trimite un ACK pentru FIN pe care tocmai l-a primit, iar conexiunea la rețea este apoi demontată.

Iată cum arată strângerea de mână în patru căi:

A -> FIN -> B

A  ACK -> B

Uneori, FIN original se îndreaptă pe un pachet ACK care urma să fie trimis oricum, după cum se arată mai jos:

A -> FIN, ACK -> B

A  ACK -> B

Acesta este ceea ce se întâmplă în acest exemplu.

Dacă vrem să vedem doar traficul SSH pentru această conversație, putem folosi un filtru care specifică acel protocol. Introducem următoarele pentru a vedea tot traficul folosind protocolul SSH către și de la computerul de la distanță:

ip.addr == 192.168.4.25 && ssh

Aceasta filtrează totul, cu excepția traficului SSH către și de la 192.168.4.25.

Alte șabloane de filtre utile

Când introduceți un filtru în bara de filtru, acesta va rămâne roșu până când filtrul este corect din punct de vedere sintactic. Acesta va deveni verde când filtrul este corect și complet.

Dacă introduceți un protocol, cum ar fi tcp, ip, udp sau shh, urmat de un punct (.), apare un meniu. Acesta va lista filtrele recente care au conținut acel protocol și toate câmpurile care pot fi utilizate în filtre pentru acel nume de protocol.

De exemplu, cu ip, puteți utiliza ip.addr, ip.checksum, ip.src, ip.dst, ip.id, ip.host și zeci de altele.

Utilizați următoarele șabloane de filtre ca bază pentru filtre:

Pentru a afișa numai pachetele de protocol HTTP: http
Pentru a afișa numai pachetele de protocol DNS: dns
Pentru a afișa numai pachetele TCP cu 4000 ca sursă sau port destinație: tcp.port==4000
Pentru a afișa toate pachetele de resetare TCP: http.request
Pentru a filtra pachetele ARP, ICMP și DNS: !(arp sau icmp sau dns)
Pentru a afișa toate retransmisiile într-o urmă: tcp.analysis.retransmission
Pentru a filtra steaguri (cum ar fi SYN sau FIN): trebuie să setați o valoare de comparație pentru acestea: 1 înseamnă că steagul este setat, iar 0 înseamnă că nu este. Deci, un exemplu ar fi: tcp.flags.syn == 1.

Am acoperit aici câteva dintre principiile directoare și utilizările fundamentale ale filtrelor de afișare, dar, desigur, sunt multe altele.

Pentru a aprecia întregul scop și puterea filtrelor Wireshark, asigurați-vă că verificați referința sa online.