TSHARK

Commandoregel Versie van Wireshark

TSHARK

De tool die we deze week gaan bespreken is Tshark, het commando-regel programma uit het Wireshark pakket.

Wireshark is een tool die veel gebruikt wordt door IT professionals voor het zoeken naar netwerkproblemen (troubleshooting), indringers, debuggen, etc. Het laat onder bepaalde omstandigheden zelfs toe om SSL verkeer te decoderen (voor probleemopsporing).

Tshark en Wireshark maken beide gebruik van libpcap 1 en ze hebben bijna dezelfde functionaliteit en de PCAP(NG) bestanden die je met deze tools kunt maken zijn uitwisselbaar. Dit heeft als voordeel, dat je het verkeer op een systeem kunt “onderscheppen” met Tshark en het later analyseren in Wireshark. Maar aangezien dit een CLI artikel is gaan we ons vooral bezig houden met Tshark.

Tshark is niet standaard geïnstalleerd dus dat moet eerst gebeuren. Dit doe je met de pakketbeheerder van jouw distributie (bij Debian en Debian-based distro’s zoals Ubuntu en Mint doe je dit met apt : $ sudo apt install tshark).

Debian zal vragen of je een niet-root gebruiker wil toelaten om pakketten te filteren.

Figuur 1. $ sudo apt install tshark

Omdat het gebruikt van Tshark//Wireshark als root een groot beveiligingsrisico kan vormen is het aan te raden om dit te doen met een gebruiker met zo weinig mogelijk rechten om de risico’s te beperken. Bij Debian kun je bij deze vraag JA antwoorden en de gebruiker toevoegen aan de “wireshark” groep ($ sudo usermod -a -G wireshark $GEBRUIKER), maar we kunnen ook een speciale gebruiker aanmaken speciaal voor Tshark/Wireshark en dat gaan we hier doen 2. Wil je toch de "gewone" procedure volgen ga dan verder vanaf De gebruiker "tshark" kan nu netwerk pakketten filteren:

Als Eerst maken we de nieuwe gebruiker aan :

$ sudo adduser tshark (eventueel met aanvullende opties als de shell, Gecos naam e.d.)

Als je een andere gebruikersnaam kiest (bijv. patrick) dan moet je de groep tshark nog aanmaken met:

$ sudo groupadd tshark

En de gebruiker toevoegen aan deze groep:

$ sudo usermod -a -G tshark patrick

Nu doen we nog wat aanpassingen aan de groep:

$ sudo chgrp tshark /usr/bin/dumpcap

$ sudo chmod 750 /usr/bin/dumpcap

$ sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

En ter controle: $ sudo getcap /usr/bin/dumpcap

Het resultaat moet zijn : usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

De gebruiker "tshark" kan nu netwerk pakketten filteren.

Deze methode staat vermeld in de Handleiding die ik heb geraadpleegd voor dit artikel, er ik echter nog een 2de methode die minder aanpassingen verijst. Hiervoor moet je bij de vraag of niet root gebruikers pakketten mogen onderscheppen JA aangeven en de gebruiker daarna toevoegen aan de wireshark groep $ sudo usermod -aG wireshark GEBRUIKER (dit is de methode dit ik zelf gebruik).

Bij beide methodes moet je eerst uitloggen en opnieuw inloggen (of de PC herstarten 3) voor dit werkt!

Een manier om dit te testen is:

$ sudo tshark (enkel indien de huidige gebruiker geen rechten heeft om tcpdump uit te voeren.

$ tshark -c 1 -q

Figuur 2. $ tshark -c 1 -q
Behalve Tshark, bevat het pakket nog andere tools zoals:
  • dumpcap (dit wordt gebruikt om de gegevens te verzamelen)
  • rawshark
  • capinfos
  • editcap
  • mergecap
  • text2pcap

De simpelste manier om Tshark te gebruiken is gewoon het commando $ tshark ingeven, Tshark zal dan alle netwerk pakketten op de eerst gevonden actieve netwerk adapter (niet de loopback interface) filteren en een info regel per pakket weergeven op het scherm.

.
Figuur 3. tshark

Maar wat als we een andere netwerk adapter willen scannen, of iedere (any, any is een “cooked capture”) ? hiervoor starten we tshark met de -D optie:

Figuur 4. $ harkt -D

De namen en nummers van de interfaces zullen per systeem variëren, mijn netwerk op deze “virtuele computer” heet ens3, maar op mijn “gewone” computer is het wlp3s0 (draadloos).

De -i (interface) optie laat toe om een andere interface te kiezen, en bepaalde systemen hebben ook een “any” optie, deze optie scant alle netwerk adapters, maar heeft wel enkele beperkingen.

Figuur 5. $ tshark -i ens3

Omdat tshark standaard alle pakketten “onderschept” en logt zal dit een negatieve invloed hebben op de prestaties van het systeem. Daarom maakt tshark gebruik van zogenaamde BPF’s oftewel Berkely Package Filters, ook wel Capture Filters genoemd (gedocumenteerd in de libpcap-filter handleiding), deze moet je niet verwarren met Display Filters want dat is iets helemaal anders. Het BPF filter wordt gebruikt tijdens het scannen en bepaalt welke data er gescand wordt terwijl je met een Display Filter aangeeft wat tshark moet weergeven. Display filters zijn in de wireshark-filter handleiding gedocumenteerd.

Een BPF gebruik je door de -f optie mee te geven, bijvoorbeeld:

Figuur 6. $ tshark -f "tcp 443" -i ens3

De plaats van de -f optie (voor of na -i) heeft in bepaalde gevallen een ander resultaat, maar in deze simpele voorbeelden maakt het in principe niets uit.

Het is ook mogelijk om bepaalde poorten te negeren i.p.v. een enkele te selecteren. Bijv.

Figuur 7. $ tshark -i ens3 -f "port not 53 and not arp"

$ tshark -i ens3 -f “port not 53 and not arp” (dit sluit ARP en DNS verkeer uit).

Op packetlife.net staat een handige “Cheat Sheet” met veel gebruikte Capture Filters. Er staat tcpdump, maar het werkt ook voor Tshark en Wireshark.

Capture filters zijn vaak niet voldoende om bepaalde informatie te isoleren en ze worden dan ook vaak gebruikt samen met Display Filters.

Tshark heeft honderden opties (en protocol opties) en het is dus onmogelijk om ze hier allemaal op te noemen. Maar je kunt de -G optie gebruiken om ze weer te geven en bijv. te filteren met grep, een voorbeeld:

Figuur 8. $ tshark – G | cut -f3 | grep “^udp”

cut -f3 geeft aan dat we enkel de 3de kolom willen weergeven.

grep “^udp” geeft aan dat we enkel de regels die beginnen met udp willen weergeven en niet alle regels die udp in de volledige tekst bevatten.

grep “^udp” geeft aan dat we enkel de regels die beginnen met udp willen weergeven en niet alle regels die udp in de volledige tekst bevatten.

Gelukkig heeft Packetlife.net ook een "cheat sheet " met veel gebruikte Display Filters, en als wat je zoekt er niet op staat kun je dus nog altijd de -G optie gebruiken.

De optie voor een display filter is -R als je een multiple-pass methode gebruikt en -Y in de “normale” gevallen.

Figuur 9. $ tshark -i ens3 -f “port not 53 and not arp” -Y ssl.handshake.type

Om tshark niet steeds te moeten uitvoeren in de volgende voorbeelden gaan we eerst een PCAP bestand maken waar we dan de meeste van de volgende voorbeelden op kunnen toepassen. Om een PCAP bestand op te slaan gebruiken we de -w (write) optie gevold door de naam van het bestand. Voer het volgende uit en terwijl het bezig is genereer je wat netwerk verkeer (google, facebook, youtube, downloaden, …) als er genoeg paketten onderschept zijn kun je tshark stoppen met CTRL+C of bij het commando -c (count) ingeven met het aantal pakketten dat je wil laten scannen voor tshark stopt, dit is handig als je via SSH werkt en je geen CTRL+C kunt versturen.

$ tshark -i ens3 -w any.pcap -c 1500

In het commando moet je ens3 aanpassen naargelang jouw netwerk adapter. Nu hebben we een PCAP bestand met ieder 1500 pakketten (omdat ik -c 1500 in mijn commando gebruikt heb), om verder te gaan met tshark zonder steeds een nieuwe capture te moeten doen.

Met de -r (read) optie kunnen we deze PCAP bestanden dan weer openen en Display Filters toepassen of andere bewerkingen uitvoeren, hier volgen enkele voorbeelden.

Figuur 10. $ tshark -r linuxusers.pcap -V | less

De -V (verbose) optie geeft gedetailleerde informatie over de pakketten, pipe de uitvoer door less om de uitvoer te kunnen lezen, ook is het gebruik van de -c optie om het aantal weergegeven pakketten te beperken een goed idee.

Het is ook mogelijk om een protocol in te geven zonder voorafgaande parameter:

Figuur 11. $ tshark -r linuxusers.pcap tcp

STATISTIEKEN

Tshark kan met de -z optie een veelvoud aan statistieken weergeven. Om deze weergave te verbeteren gebruiken we ook de -q (quiet) optie.Je kunt een volledige lijst met opties bekomen door na de -z iets willekeurig te zetten) bijv.

Figuur 12. $ tshark -i wlp3s0 -q -z BENL

Enkele voorbeelden van statistieken zijn:

Figuur 13. $ tshark -r linuxusers.pcap -q -z hosts
Figuur 14. $ tshark -r linuxusers.pcap -q -z expert,warn
Figuur 15. $ tshark -r linuxusers.pcap -q -z expert,note
Figuur 16. $ tshark -r linuxusers.pcap -q -z http,tree
Figuur 17. $ tshark -r linuxusers.pcap -q -z http_req,tree
Figuur 18. $ tshark -r linuxusers.pcap -q -z http_srv,tree
Figuur 19. $ tshark -r linuxusers.pcap -q -z io,phs
Figuur 20. $ tshark -r linuxusers.pcap -q -z conv,eth
Figuur 21. $ tshark -r linuxusers.pcap -q -z conv,tcp

SSL DECRYPTIE

Het is mogelijk om (in bepaalde omstandigheden) SSL pakketten die met Tshark/Wireshark worden onderschept te decoderen. Dit kan handig zijn met het zoeken naar problemen met SSL. Dit werkt wel niet met ieder programma, zo maken Firefox en Chromium (en dus Chrome) gebruik van de NSS Library, Deze library laat toe om deze programma’s (en andere programma’s die gecompileerd zijn met deze Library) te starten met een speciale parameter welke een SSL KEY logbestand opslaat, dit kan dan later gebruikt worden om de gegevens te decoderen.

Eerst starten we een capture: $ tshark -i ens3 -w ssl.pcap

Daarna starten we firefox of chrome/chromium met: (doe dit in de correcte volgorde anders kun je het PCAP bestand niet ontsleutelen).

$ SSLKEYLOGFILE=/home/tshark/SSLKEYFILE firefox

Dit werkt op mijn Debian machine zonder problemen, maar het is mogelijk dat je eerst de omgevingsvariabele moet instellen met export SSLKEYLOGFILE=/home/tshark/SSLKEYFILE

Genereer nu wat netwerk verkeer in firefox, surf naar YouTube, Facebook, Linuxgebruikers.nl, Google, …

Als je klaar bent sluit je Firefox en stop je tshark.

Nu heb je 2 bestanden:
  1. ssl.pcap
  2. SSLKEYFILE

Nu kun je deze PCAP openen in Wireshark en de SSL decoderen, maar wij gaan het vanuit de terminal doen.

Als je het bestand opent met $ tshark -r ssl.pcap -Y http zul je zien dat het bestand niet gedecodeerd is:

Figuur 22. $ tshark -r ssl.pcap -Y http

Maar als we nu het SSLKEYFILE gebruiken word de SSL gedecodeerd:

$ tshark -r ssl.pcap -o ssl.keylog_file:/home/tshark/SSLKEYFILE -Y http

Figuur 23. $ tshark -r ssl.pcap -o ssl.keylog_file:/home/tshark/SSLKEYFILE -Y http
Figuur 24. tshark met profiel

In bovenstaand voorbeeld heb ik een profiel dat enkel Protocol, Lenght en Info weergeeft.

Als je geen gebruik maakt van de GUI kun je ook velden (fields) specificeren met -T fields bijv:

$ tshark -r linuxusers.pcap -T fields -e ip.addr -e ip.src -e ip.dst

Figuur 25. $ tshark -r linuxusers.pcap -T fields -e ip.addr -e ip.src -e ip.dst
Dit geeft 3 velden weer:
  1. IP Adres
  2. IP adres van oorsprong
  3. Doel IP adres

Om alleen maar veldnamen te weergeven die te gebruiken zijn in een Display Filter kun je ook tshark -G fields gebruiken. Het weergeven duurt lang omdat er veel moet worden weggeschreven naar de terminal, maar met gebruik van een pager kan het sneller (gebruik pijltjestoetsen om te navigeren en q om de pager te sluiten): tshark -G fields | grep udp | column -ts | less

bron o.a. Sergey Guzenkov

1 In feite maken ze gebruik van TCPDUMP welke onder Linux gebruik maakt van de libpcap library, bij Windows™ is dat winpcap
2 Dit is een alternatieve methode zoals beschreven in een TSHARK handleiding. Dit is niet altijd de ideale optie.
3 Voor de mensen die de "Microsoft™ Windows™" methode gewoon zijn ;-)