Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med tshark kan vi dessutom avlyssna trafiken på en server i realtid.

Med Wireshark kan vi också bekräfta att kryptering av trafiken fungear. Utan att titta på nätverkstrafiken kan vi bara anta att det fungerar. Ett exempel på detta är SMTP som kan använda både krypterade och okrypterade anslutningar över samma port – port 25.

Vi kan också lära oss hur olika protokoll fungerar genom att titta på trafiken.

Installera programmen

För att kunna titta på trafik i realtid i Wireshark från en server utan grafiskt gränssnitt behöver vi två delar. På den lokala datorn behöver vi installera Wireshark. På servern behöver vi installera tshark, och även göra vår användare medlem i wireshark-gruppen.

Vi utgår här från att vi använder en Debian-baserad Linuxdistribution så som Debian, Ubuntu eller liknande.

Installera Wireshark på den lokala datorn med:

$ sudo apt install wireshark

Installera tshark på servern med:

$ sudo apt install tshark

Under installationen av tshark blir vi tillfrågade om vi vill göra det möjligt för vanliga användare att använda tshark. I vårt fall vill vi detta så vi svarar ja på frågan.

Ska vanliga användare få avlyssna trafik?

ANNONS FÖR VÅRA EGNA BÖCKER Demonerna på internet

Därefter måste vi lägga till användaren i wireshark-gruppen:

$ sudo usermod -a -G wireshark jake

Avlyssna trafiken på servern

Nu kan vi avlyssna trafiken i realtid på servern så att vi ser den i vår lokala Wireshark. För detta kör vi följande kommando på den lokala datorn:

$ ssh jake@192.168.5.30 'tshark -i enp1s0 -f "port 25" -w -' \  
| wireshark -k -i -

Här använder vi SSH för att köra tshark -i enp1s0 -f "port 25" -w - på servern, som i det här fallet är 192.168.5.30.

Argumentet -i enp1s0 är nätverkskortet på servern som vi vill lyssna på. Argumentet -f "port 25" är ett filter som säger att vi endast vill lyssna på port 25 (SMTP). Argumentet -w anger ett filnamn för att spara datan i, men här anger vi istället - vilket betyder standard output.

Därefter omdirigerar vi datan som skickas över SSH via standard output till vår lokala Wireshark. Här anger vi argumenten -k -i - som talar för Wireshark att vi vill starta avlyssningen direkt (-k) och att vi vill avlyssna nätverkskortet - (med -i -). Här är nätverkskortet istället standard input (-).

Vi skickar alltså den avlyssnade trafiken över SSH till vår lokala Wireshark.

Notera att lösenordsprompten kan försvinna eller vara svår att se när vi kör kommandot eftersom det kommer data som stör prompten. Men skriv in lösenordet för servern även om ingen prompt syns, då startas överföringen. Använder vi SSH-nycklar behövs dock inget lösenord för servern.

Nu startar Wireshark, och så fort det flödar trafik på port 25 på servern syns det i Wireshark.

För att enklare kunna läsa SMTP-trafiken kan vi högerklicka på en rad med SMTP och välja Follow → TCP Stream.

Follow TCP Stream Översikten av all trafik som Wireshark har fångat upp.

Nu kan vi enkelt läsa SMTP-trafiken. Blå text är det som servern har skickat; röd text är det som klienten har skickat.

Läsa ett helt mejl i Wireshark En okrypterad SMTP-anslutning där vi kan läsa hela mejlet som skickades.

Här ser vi att anslutningen är okrypterad. Vi kan således läsa hela mejlet i klartext. Detta visar på vikten av kryptering.

Om vi försöker läsa ett mejl som har skickats över krypterad SMTP ser vi bara skräptecken.

Krypterad SMTP När anslutningen är krypterad kan vi inte längre läsa mejlen.

Exempel med HTTP-trafik

Vi kan göra samma procedur med HTTP-trafik. Vi anger då istället port 80 i filtret för tshark. När trafiken börjar trilla in i Wireshark högerklickar vi på någon av raderna med HTTP i kolumnen Protocol och väljer Follow → HTTP Stream. Vi ser då hela HTTP-konversationen som har skett mellan servern och klienten.

HTTP-trafik i Wireshark Även här markerar röd text det som klienten har skickat och blå text är det som servern har skickat.

Om vi istället försöker avlyssna HTTPS-trafik på port 443 kommer vi inte att kunna se något annat än skräptecken – bortsett från adressen till sidan.

HTTPS-trafik i Wireshark Även här är röd text det som klienten har skickat och blå text är det som servern har skickat.

Wireshark för att lära sig TCP/IP-protokoll

Genom att titta på trafiken som flödar från och till en server kan vi lära oss hur dessa protokoll fungerar. I exemplet med HTTP-trafiken såg vi datan som klienten skickade till servern. Vi kan nu testa att själva skicka denna datan till servern med exempelvis nc – Netcat.

Netcat installeras i Debian och Ubuntu med:

$ sudo apt install netcat-traditional

När Netcat är installerat ansluter vi till servern:

$ nc -C demontest.cyberinfo.se 80 

Vi skriver därefter in nedanstående text och avslutar med två radbrytningar.

GET / HTTP/1.1
Host: demontest.cyberinfo.se
User-Agent: curl/8.6.0
Accept: */*

Detta är samma text som vi såg i Wireshark. Det går att utelämna User-Agent och Accept, men här väljer vi att ha med det för att efterlikna datan vi såg i Wireshark.

När vi avslutar med två radbrytningar svarar webbservern med att skicka tillbaks sidan som finns på adressen demontest.cyberinfo.se.

Test att efterlikna en HTTP-klient

På samma sätt kan vi testa att prata med en SMTP-server genom att skicka samma data som vi såg när vi avlyssnade port 25.

Vi kan göra samma övning med i stort sett vilket protokoll som helst som skickar kommandon i klartext till en server. På så sätt kan vi lära oss exakt hur ett protokoll fungerar – bara genom att titta på trafiken i Wireshark.