Sådan bruges Wireshark-filtre på Linux

Wireshark er en pakkeanalysator i verdensklasse tilgængelig på Linux, Windows og macOS. Dens filtre er fleksible og sofistikerede, men nogle gange kontraintuitive. Vi forklarer de “gotchas”, du skal være på udkig efter.

Pakkeanalyse med ægte bid

Wireshark er en af ​​juvelerne i open source-verdenen. Det er et softwareværktøj i verdensklasse, der bruges af både professionelle og amatører til at undersøge og diagnosticere netværksproblemer. Softwareudviklere bruger det til at lokalisere og karakterisere fejl i kommunikationsrutiner. Sikkerhedsforskere bruger det til at fange og fjerne ondsindet aktivitet på et netværk.

En typisk arbejdsgang er at køre Wireshark i Capture-tilstand, så den registrerer netværkstrafik gennem et af netværksgrænsefladerne på computeren. Netværkspakkerne vises i realtid, efterhånden som de fanges. Det er dog i post-capture-analysen, at den detaljerede detalje af, hvad der foregår i netværket, afsløres.

De opfangede pakker kaldes et spor. Når indfangningen er færdig, kan sporet gås igennem, pakke for pakke. Du er i stand til at inspicere enhver pakke i mindste detalje, kortlægge netværks-“samtaler” mellem enheder og bruge filtre til at inkludere (eller udelukke) pakker fra din analyse.

Wiresharks filtreringsevner er uden sidestykke, med stor fleksibilitet og opløsningsevne. Der er finesser i deres syntaks, der gør det nemt at skrive et filter og få et resultat, der ikke lever op til dine forventninger.

Hvis du ikke forstår, hvordan filtre fungerer i Wireshark, kommer du aldrig ud af første gear og drosler softwarens muligheder.

Installation af Wireshark

Når du installerer Wireshark, bliver du spurgt, om nogen, der bruger en ikke-root-konto, skal være i stand til at fange netværksspor. At sige nej til dette kan være en attraktiv idé. Du ønsker måske ikke, at alle skal kunne se, hvad der sker på netværket. Men at installere Wireshark, så kun dem med root-rettigheder kan bruge det, betyder, at alle dets komponenter kører med forhøjede tilladelser.

Wireshark indeholder over 2 millioner linjer kompliceret kode, og den interagerer med din computer på det laveste niveau. Bedste sikkerhedspraksis anbefaler, at så lidt kode som muligt skal køre med forhøjede privilegier – især når den fungerer på et så lavt niveau.

Det er langt mere sikkert at køre Wireshark med en almindelig brugerkonto. Vi kan stadig begrænse, hvem der har mulighed for at køre Wireshark. Dette kræver et par ekstra opsætningstrin, men det er den sikreste måde at fortsætte på. Datafangstelementerne i Wireshark vil stadig køre med forhøjede privilegier, men resten af ​​Wireshark kører som en normal proces.

For at starte installationen på Ubuntu skal du skrive:

sudo apt-get install wireshark

På Fedora, skriv:

sudo dnf install wireshark

På Manjaro, brug denne kommando:

sudo pacman -Syu wireshark-qt

Under installationen vil du se skærmen nedenfor, som anbefaler, at du ikke kører Wireshark som root. Tryk på Tab for at flytte den røde fremhævning til “” og tryk på mellemrumstasten.

På den næste skærm skal du trykke på Tab for at flytte den røde fremhævning til “” og tryk på mellemrumstasten.

Indstillingsskærmen, der tillader ikke-rootbrugere at køre Wireshark med

For at køre Wireshark skal du være medlem af “wireshark”-gruppen, som oprettes under installationen. Dette giver dig mulighed for at kontrollere, hvem der kan køre Wireshark. Enhver, der ikke er i “wireshark”-gruppen, kan ikke køre Wireshark.

  Linux-fil tidsstempler forklaret: atime, mtime og ctime

For at tilføje dig selv til “Wireshark”-gruppen, brug denne kommando:

sudo usermod -a -G wireshark $USER

For at dit nye gruppemedlemskab træder i kraft, kan du logge ud og ind igen eller bruge denne kommando:

newgrp wireshark

For at se, om du er i den nye gruppe, skal du bruge kommandoen grupper:

groups

Du bør se “wireshark” på listen over grupper.

Starter Wireshark

Du kan starte Wireshark med kommandoen nedenfor. Et-tegnet (&) starter Wireshark som en baggrundsopgave, hvilket betyder, at du kan fortsætte med at bruge terminalvinduet. Du kan endda lukke terminalvinduet, og Wireshark fortsætter med at køre.

Indtast følgende:

Wireshark &

Wireshark-grænsefladen vises. De netværksgrænsefladeenheder, der findes på din computer, er listet sammen med nogle indbyggede pseudo-enheder.

En bølget linje ved siden af ​​en grænseflade betyder, at den er live, og netværkstrafik passerer gennem den. En flad linje betyder, at der ikke er nogen aktivitet på grænsefladen. Det øverste punkt på denne liste er “enp0s3”, den kablede forbindelse til denne computer, og som forventet viser den aktivitet.

For at begynde at fange pakker, højreklikker vi på “enp0s3” og vælger derefter “Start Capture” i kontekstmenuen.

Klik

Du kan indstille filtre for at reducere mængden af ​​trafik, som Wireshark fanger. Vi foretrækker at fange alt og filtrere alt fra, vi ikke ønsker at se, når vi laver en analyse. På denne måde ved vi, at alt, hvad der skete, er i sporet. Du ønsker ikke utilsigtet at gå glip af en netværksbegivenhed, der forklarer den situation, du undersøger på grund af dit opsamlingsfilter.

For netværk med høj trafik kan sporene naturligvis hurtigt blive meget store, så filtrering ved optagelse giver mening i dette scenarie. Eller måske foretrækker du det bare sådan.

Bemærk, at syntaksen for capture-filtre er lidt anderledes end det for skærme.

De fremhævede ikoner på billedet ovenfor angiver følgende, fra venstre mod højre:

Hajfinne: Hvis denne er blå, starter en pakkefangst ved at klikke på den. Hvis Wireshark fanger pakker, vil dette ikon være gråt.
Firkant: Hvis dette er rødt, vil et klik på det stoppe en kørende pakkefangst. Hvis Wireshark ikke fanger pakker, vil dette ikon være gråt.
Hajfinne med cirkulær pil: Hvis denne er grøn, vil et klik på den stoppe det aktuelle spor. Dette giver dig mulighed for at gemme eller kassere de optagne pakker og genstarte sporingen. Hvis Wireshark ikke fanger pakker, vil dette ikon være gråt.

Analyserer sporet

Ved at klikke på det røde firkantede ikon stopper dataopsamlingen, så du kan analysere de pakker, der er fanget i sporet. Pakkerne præsenteres i tidsrækkefølge og farvekodes i henhold til pakkens protokol. Detaljerne for den fremhævede pakke vises i de to nederste ruder i Wireshark-grænsefladen.

En enkel måde at gøre læsningen af ​​sporet nemmere på er at få Wireshark til at give meningsfulde navne til pakkernes kilde- og destinations-IP-adresser. For at gøre dette skal du klikke på Vis > Navneopløsning og vælge “Løs netværksadresser.”

Wireshark vil forsøge at bestemme navnet på de enheder, der sendte og modtog hver pakke. Det vil ikke være i stand til at identificere alle enheder, men dem, det kan, vil hjælpe dig med at læse sporet.

  Sådan installeres Bluecherry Surveillance Software på Linux

Hvis du ruller displayet til venstre, vises flere kolonner til højre. Infokolonnen viser enhver information, som Wireshark kan registrere fra pakken. I eksemplet nedenfor ser vi nogle ping-anmodninger og -svar.

Som standard viser Wireshark alle pakker i den rækkefølge, de blev sporet i. Mange enheder sender pakker frem og tilbage samtidigt. Dette betyder, at en enkelt samtale mellem to enheder sandsynligvis vil have pakker fra andre sammenflettet mellem dem.

For at undersøge en enkelt samtale kan du isolere den efter protokol. Protokollen for hver pakke er vist i protokolkolonnen. De fleste af de protokoller, du vil se, tilhører TCP/IP-familien. Du kan angive den nøjagtige protokol eller bruge Ethernet som en slags catchall.

Højreklik på en af ​​pakkerne i den rækkefølge, du vil undersøge, og klik derefter på Samtalefilter > Ethernet. I eksemplet nedenfor valgte vi en ping-anmodningspakke.

Isoleret ping

Sekvensen af ​​pakker vises uden andre mellem dem, da Wireshark automatisk genererede et filter for at gøre dette. Det vises i filterlinjen og fremhævet med grønt, hvilket indikerer, at filterets syntaks er korrekt.

For at rydde filteret skal du klikke på “X” på filterlinjen.

Oprettelse af dine egne filtre

Lad os sætte et simpelt filter i filterlinjen:

ip.addr == 192.168.4.20

Dette vælger alle pakker, der er blevet sendt fra eller modtaget af enheden med IP-adressen 192.168.4.20. Bemærk de dobbelte lighedstegn (==) uden mellemrum mellem dem.

For at se pakkerne sendt af en enhed (kilden), kan du bruge ip.src; for at se pakker, der er ankommet til en enhed (destinationen), kan du bruge ip.dst, som vist nedenfor:

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

Bemærk brugen af ​​et dobbelt og-tegn (&&) for at angive det logiske “og.” Dette filter leder efter pakker, der ankom til 192.168.4.20 fra 192.168.4.28.

Folk, der er nye til Wireshark-filtre, tror ofte, at et filter som dette vil fange alle pakker mellem to IP-adresser, men det er ikke tilfældet.

Hvad det faktisk gør, er at filtrere alle pakker til eller fra IP-adressen 192.168.4.20, uanset hvor de kom fra eller hvor de blev sendt. Det gør det samme med alle pakker fra IP-adressen 192.168.4.28. For at sige det mere enkelt filtrerer den al trafik til eller fra begge IP-adresser.

Du kan også kigge efter aktivitet på andre protokoller. For eksempel kan du indtaste dette filter for at søge efter HTTP-anmodninger:

http.request

For at udelukke pakker, der enten kom fra eller blev sendt til en enhed, skal du bruge et udråbstegn (!) og sætte filteret i parentes [()]:

!(ip.addr == 192.168.4.14)

Dette filter udelukker alle pakker sendt til eller fra 192.168.4.14.

Det er kontraintuitivt, fordi filteret indeholder lighedsoperatoren (==). Du havde måske forventet, at du ville skrive dette filter sådan:

ip.addr !=192.168.4.14

Dette vil dog ikke virke.

Du kan også søge efter strenge i pakker efter protokol. Dette filter søger efter Transmissionskontrolprotokol (TCP)-pakker, der indeholder strengen “youtube”:

tcp contains youtube

Et filter, der leder efter retransmission, er nyttigt som en måde at kontrollere, om der er et forbindelsesproblem. Gentransmissioner er pakker, der sendes igen, fordi de blev beskadiget eller mistet under den første transmission. For mange retransmissioner indikerer en langsom forbindelse eller en enhed, der er langsom til at reagere.

Indtast følgende:

tcp.analysis.retransmission

Fødsel, liv, død og kryptering

En netværksforbindelse mellem to enheder startes, hver gang den ene kontakter den anden og sender en SYN-pakke (synkronisering). Den modtagende enhed sender derefter en ACK-pakke (bekræftelse). Den angiver, om den vil acceptere forbindelsen ved at sende en SYN-pakke.

  Sådan kører du Linux-apps fra Bash på Windows 10 [Guide]

SYN og ACK er faktisk to flag i samme pakke. Den originale enhed bekræfter SYN ved at sende en ACK, og derefter etablerer enhederne en netværksforbindelse.

Dette kaldes tre-vejs håndtryk:

A -> SYN -> B

A  ACK -> B

I skærmbilledet nedenfor laver nogen på computeren “nostromo.local” en Sikker Shell (SSH) forbindelse til computeren “ubuntu20-04.local.” Trevejshåndtrykket er den første del af kommunikationen mellem de to computere. Bemærk, at de to linjer, der indeholder SYN-pakkerne, er farvekodet i mørkegrå.

Hvis du ruller på skærmen for at vise kolonnerne til højre, afsløres SYN , SYN/ACK og ACK-håndtrykpakkerne.

Du vil bemærke, at pakkeudvekslingen mellem de to computere skifter mellem TCP- og SSH-protokollerne. Datapakkerne sendes gennem den krypterede SSH-forbindelse, men beskedpakker (som ACK) sendes via TCP. Vi filtrerer TCP-pakkerne fra snart.

Når netværksforbindelsen ikke længere er nødvendig, kasseres den. Pakkesekvensen til at afbryde en netværksforbindelse er et fire-vejs håndtryk.

Den ene side sender en FIN (finish)-pakke. Den anden ende sender en ACK for at bekræfte FIN, og sender derefter også en FIN for at angive, at den er enig i, at forbindelsen skal afbrydes. Den første side sender en ACK for den FIN, den lige har modtaget, og netværksforbindelsen afmonteres derefter.

Sådan ser fire-vejs håndtrykket ud:

A -> FIN -> B

A  ACK -> B

Nogle gange piggybacks den originale FIN på en ACK-pakke, der alligevel skulle sendes, som vist nedenfor:

A -> FIN, ACK -> B

A  ACK -> B

Det er, hvad der sker i dette eksempel.

Hvis vi kun vil se SSH-trafikken for denne samtale, kan vi bruge et filter, der specificerer denne protokol. Vi skriver følgende for at se al trafik ved hjælp af SSH-protokollen til og fra fjerncomputeren:

ip.addr == 192.168.4.25 && ssh

Dette frafiltrerer alt undtagen SSH-trafik til og fra 192.168.4.25.

Andre nyttige filterskabeloner

Når du skriver et filter i filterlinjen, forbliver det rødt, indtil filteret er syntaktisk korrekt. Den bliver grøn, når filteret er korrekt og komplet.

Hvis du skriver en protokol, såsom tcp, ip, udp eller shh, efterfulgt af et punktum (.), vises en menu. Den vil vise de seneste filtre, der indeholdt den pågældende protokol, og alle de felter, der kan bruges i filtre for det pågældende protokolnavn.

For eksempel med ip kan du bruge ip.addr, ip.checksum, ip.src, ip.dst, ip.id, ip.host og snesevis af andre.

Brug følgende filterskabeloner som grundlag for dine filtre:

For kun at vise HTTP-protokolpakker: http
For kun at vise DNS-protokolpakker: dns
For kun at vise TCP-pakker med 4000 som kilde- eller destinationsport: tcp.port==4000
For at vise alle TCP-nulstillingspakker: http.request
Sådan filtreres ARP-, ICMP- og DNS-pakker fra: !(arp eller icmp eller dns)
For at vise alle retransmissioner i et spor: tcp.analysis.retransmission
For at filtrere flag (som SYN eller FIN): Du skal indstille en sammenligningsværdi for disse: 1 betyder, at flaget er sat, og 0 betyder, at det ikke er det. Så et eksempel ville være: tcp.flags.syn == 1.

Vi har dækket nogle af de vejledende principper og grundlæggende anvendelser af displayfiltre her, men der er selvfølgelig meget mere.

For at værdsætte Wireshark-filtres fulde omfang og kraft, skal du sørge for at tjekke ud dens online reference.