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[31] 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.

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[32]. Wil je toch de "gewone" procedure volgen ga dan verder vanaf De gebruiker tshark kan nu netwerk pakketten filteren.

Wil je de 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. Hiervoer 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[33]) voor dit werkt!

een manier om dit te testen is:

# su tshark (enkel indien de huidige gebruiker
geen rechten heeft om tcpdump uit te voeren.
$ tshark -c 1 -q

    

Behalve Tshark, bevat het pakket nog andere tools zoals:

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.

$ 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:

$ tshark -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.

[Opmerking]PRO TIP

Hoewel het mogelijk is om een netwerk adapter te selecteren bij naam of nummer wordt het aangeraden om het niet via het nummer maar via de naam te doen. De reden hiervoor is dat het mogelijk is dat de nummering van de adapters verandert terwijl je aan het systeem aan het werken bent (als een adapter uitvalt of wordt verwijderd bijv). Gebruik dus de naam om dit te voorkomen.

$ 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.

[Opmerking]PRO TIP

Omdat het na gebruik van een Capture Filter ervoor zorgt dat bepaalde pakketten worden overgeslagen tijden het Capture> proces, en dus niet beschikbaar zijn in het PCAP/PCAP-NG bestand. Het is dus beter om Capture Filters zo weing mogelijk te gebruiken en in plaats daarvan zo veel mogelijk Display Filters gebruiken.

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

$ tshark -f “tcp port 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.

$ 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:

$ 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.

$ 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.

$ 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 paketten te beperken een goed idee.

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

$ tshark -r linuxusers.pcap tcp



[31] In feite maken ze gebruik van TCPDUMP welke onder Linux gebruik maakt van de libpcap library, bij Windows™ is dat winpcap

[32] Dit is een alternatieve methode zoals beschreven in een TSHARK handleiding. Dit is niet altijd de ideale optie.

[33] Voor de mensen die de "Microsoft™ Windows™" methode gewoon zijn ;-)