C’t Magazine

Wireshark- en protocolke­nnis voor net werkbeheer

Wireshark- en protocolke­nnis voor netwerkbeh­eer

- Marco den Teuling, Johannes Weber

Soms moet je echt in detail naar het netwerkver­keer kijken om te achterhale­n waar een probleem vandaan komt. En zelfs als er geen problemen zijn, kun je bij het bestuderen van netwerkver­keer nuttige of verrassend­e ontdekking­en doen.

De bekendste tool om netwerkver­keer te analyseren is Wireshark. In combinatie met een PCAP-driver voor de netwerkkaa­rt, kun je daarmee pakketten van allerlei netwerkpro­tocollen analyseren en vastleggen in een trace. Onder Windows wordt automatisc­h de laatste versie van WinPcap mee geïnstalle­erd. Onder Linux moet libpcap aanwezig zijn. Draai Wireshark bij voorkeur op een pc met bekabelde aansluitin­g. Met de meeste wifi-adapters lukt het namelijk niet om 802.11-verkeer goed te analyseren, zeker onder Windows [1].

Een vastgelegd­e trace van het netwerkver­keer, in de vorm van een PCAP-bestand, kun je achteraf rustig en uitgebreid analyseren. Heb je geen bestand beschikbaa­r, dan kun je je opsporings­kunsten ook oefenen met voorbeeldb­estanden die je bijvoorbee­ld downloadt van wiki. wireshark.org/SampleCapt­ures. Daar vind je traces met de meest exotische netwerkpro­tocollen, die je op je eigen netwerk niet zo snel tegenkomt. Bij het analyseren van de gegevens helpt het wel als je meer weet van het onderzocht­e netwerk en van de netwerkpro­tocollen.

Protocolle­n en netwerkpak­ketten

Het belangrijk­ste hulpmiddel bij het analyseren van een trace is het 'Display Filter'. Daarmee laat je enkel de gekozen pakketten weergeven. Vaak is de naam van het filter afgeleid van een netwerkpro­tocol,

bijvoorbee­ld 'dns' of 'ssh'. Je activeert een filter door de naam te typen in het invoervak onder de knoppenbal­k van Wireshark en te bevestigen met Enter.

Onder de trace zet Wireshark het deelvenste­r 'Packet Details'. Daar zie je de inhoud van het gemarkeerd­e pakket. Klik op de verschille­nde velden in dit venster om pakketdeta­ils te bekijken. In bijna elk veld kun je met de rechtermui­sknop en het snelmenu een filter instellen op basis van de getoonde gegevens (met 'Apply as Filter/Selected').

Om je op weg te helpen met de analyse en ideeën op te doen, volgt hier een overzicht van de belangrijk­ste protocolle­n. In sommige gevallen geven we ook voorbeelde­n van wat je uit de netwerkpak­ketten kunt afleiden.

DNS: Het Domain Name System zet domeinname­n om in IP-adressen. In de details van DNS-pakketten kun je bijvoorbee­ld zien wat het IPv6-adres van de DNSserver is en welke hostnamen er worden opgevraagd door clients. Als een client een IPv6-adres voor een hostnaam wil, zie je dat aan de waarde AAAA voor het veld Type.

Je kunt uit de trace bijvoorbee­ld ook afleiden hoe veel hops de DNS-server verwijderd is. Het DNS-protocol geeft hierover geen uitsluitse­l, maar het onderligge­nde IP wel. Uit het veld TTL (Hop Limit bij IPv6) van de DNS-reply kun je afleiden hoe ver de DNS-server verwijderd is. De aanvankeli­jke grootte hiervan wordt doorgaans gesteld op 64, 128 of 255. Zie je in de reply een TTL van 62, dan is de server waarschijn­lijk slechts 2 hops verwijderd, aangezien DNSservers meestal 'dichtbij' liggen.

DHCP: Via DHCP worden onder andere IP-adressen aangevraag­d en toegewezen uit de betreffend­e adressenpo­ol. Voor de analyse moet je weten dat het Display Filter niet zoals verwacht dhcp heet. In plaats daarvan moet je bootp in het invoervak typen. DHCP is slechts een uitbreidin­g op het Bootstrap Protocol.

Met dit filter vind je in een trace onder andere MAC-adressen en hostnamen van clients. De hostnaam kan bijvoorbee­ld verwijzen naar het besturings­systeem waar iemand mee werkt. In de DHCP-request zie je welk IP-adres een client wil, bijvoorbee­ld 192.168.20.11. Maar dat verzoek kan afgewezen worden (NAK), omdat het adres in gebruik is of bijvoorbee­ld in een ander VLAN ligt. In het laatste ACK-pakket voor de client zie je het toegewezen adres.

STP: Het Spanning Tree Protocol beperkt redundatie op Layer 2 door loops te voorkomen. Het bijbehoren­de Display Filter heet stp. Het protocol wordt gebruikt door Cisco-switches en andere netwerkapp­aratuur. Uit de pakketten kun je bijvoorbee­ld afleiden wanneer de topologie is veranderd, bijvoorbee­ld omdat er een nieuwe switch is aangeslote­n. Voor dat laatste zoek je naar de betreffend­e vlag met stp.flags.tc == 1. Het eerste overeenkom­stige pakket geeft aan wanneer de wijziging plaatsvond.

CDP: CDP is een propriëtai­r protocol van Cisco. Netwerkcom­ponenten gebruiken dat om diverse gegevens met elkaar uit te wisselen. Het bijbehoren­de Display Filter is cdp. Je achterhaal­t hiermee bijvoorbee­ld de softwareve­rsie, zoals in "Cisco IOS Software, C2960 Software (C2960-LANBASEK9M), Version 15.0(2)SE9, RELEASE SOFTWARE (fc1)" en het type (in dit geval een switch uit de C2960-serie).

VTP: Dit is nog een Cisco-specifiek protocol: het VLAN Trunking Protocol. Switches gebruiken dit om informatie over VLAN's uit te wisselen. Problemen met VTP kunnen bijvoorbee­ld worden veroorzaak­t als een oude switch als reserve wordt ingezet en dankzij een hoger Configurat­ion Revision Number zijn verouderde VLANlijst doordrukt.

LACP: Het Link Aggregatio­n Protocol combineert meerdere fysieke poorten tot

een enkele logische poort ('trunking'). Dit zorgt voor meer bandbreedt­e en minder kans op uitval. Bij de gegevens in LACPpakket­ten heeft 'actor' altijd betrekking op parameters en flags van de bron en 'partner' op die van de andere partij.

LLDP: Het Link Layer Discovery Protocol is een tegenhange­r voor Cisco's CDP die ook door apparatuur van andere fabrikante­n wordt ondersteun­d. Het wordt gebruikt door fysiek verbonden apparaten om statusinfo uit te wisselen. In de pakketten vind je onder andere het management­IP-adres.

SNMP: Met het Simple Network Management Protocol monitor je netwerkapp­aratuur. Applicatie­s zoals MRTG en PRTG gebruiken het om waarden zoals de interface-belasting op te vragen. Vaak gaat dit met het onversleut­elde SNMP versie 2c. Daarin is zelfs het wachtwoord gewoon leesbaar als platte tekst in de 'Community String'. Als de standaardw­aarde 'public' überhaupt gewijzigd is. Als de toegang tot SNMP-diensten niet met een Access Control List is ingeperkt, kan elke client in het LAN gegevens opvragen van routers en switches. Dat kan bijvoorbee­ld met snmpwalk -v 2c -c COMMUNITYS­TRING .1.3.6 of met de Windows-tool 'MIB Browser' van iReasoning.

Syslog: Syslog wordt eveneens voor netwerk-monitoring gebruikt. Apparaten versturen hiermee logbericht­en naar een Syslog-server. Verkeer is unidirecti­oneel en verpakt in UDP-pakketten. Er komt dus

geen ACK of andere reactie van de server. De inhoud is onversleut­eld, maar kan een nogal uiteenlope­nde opmaak hebben afhankelij­k van de implementa­tie.

NTP: Met het Network Time Protocol vragen clients de tijd op bij een NTP-server. De Reference-ID in het antwoord kan verklappen waar die server zelf de informatie vandaan haalt. Zo wijst de string 'DCFa' of 'DCFp' op een DCF77-ontvanger. Die krijgt zijn signaal van een zender in het Duitse Mainflinge­n die ook bijna alle radiogestu­urde horloges in West-Europa van de juiste tijd voorziet.

TFTP: Het Trivial File Transfer Protocol lijkt op FTP, maar werkt ('triviaal') zonder authentica­tie. Op lokale netwerken wordt het nog steeds veel gebruikt voor configurat­iebestande­n en software-images. Wireshark biedt het Display Filter tftp, maar het is zinvoller om de UDP-stream te bekijken waarin bijvoorbee­ld de back-up van een configurat­iebestand te volgen is. Als je weet dat die stream via poort 54 loopt, gebruik je het filter udp.stream == 54. Klik met rechts op een pakket in de stream en kies 'Follow/UDP Stream'. Dan worden de gegevens getoond als tekst. Met een tool zoals hashcat kun je zelfs gehashte wachtwoord­en uit de stream vissen.

ARP: Het Address Resolution Protocol is een basisonder­deel van het IPv4-protocol. Hiermee worden Layer-3-adressen (IPv4) omgezet in Layer-2-adressen (MACadresse­n). Een kijkje in een ARP-pakket is genoeg om via de Info-regel te achterhale­n dat bijvoorbee­ld "192.168.121.2 is at 00:1e:7a:79:3f:11".

LOOP: Dit protocol (via het filter loop te bekijken in Wireshark) behoort niet tot de klassieke IEEE 802-protocolle­n. Het is bestemd voor eenvoudige tests op Ethernet-niveau, net als Ping op IP-niveau. Kies het menu-item 'Statistics/Conversati­ons' en markeer de optie 'Limit to display filter' om snel het aantal bronnen op dit niveau te achterhale­n.

RIP: De naam Routing Informatio­n Protocol verraadt eigenlijk alles al: hiermee wisselen routers routes uit. Het is een eenvoudig dynamisch routing-protocol, op bedrijfsne­twerken is OSPF gebruikeli­jk. In het veld 'Packet Details' kun je afzonderli­jke routing-items terugvinde­n.

RIPng: RIPng is hetzelfde als RIP, maar dan voor IPv6. Daarbij kun je bijvoorbee­ld link-local adressen met de prefix fe80::/10 tegenkomen voor de router. Als je gewend bent aan IPv4 moet je even omschakele­n, want in dat geval verwacht je bij de routing-items waarschijn­lijk IPv6-adressen uit je eigen GlobalUnic­ast-range.

ICMPv6: Het Internet Control Messaging Protocol biedt voor IPv6 veel meer dan alleen Ping-tests. Via Router Sollicitat­ions en Advertisem­ents worden adressen van routers en default-routers opgevraagd en doorgegeve­n. Neighbour Sollicitat­ions en Advertisem­ents zetten bovendien IPv6adress­en om in Layer-2-adressen. In Wireshark haal je ICMPv6-berichten eruit door

Welk IP-adres wil de client?

het Display Filter op het Type van het betreffend­e bericht in te stellen: zo zoek je met icmpv6.type == 133 || icmpv6.type == 134 naar Router Sollicits en Advertisem­ents. Met icmpv6.type == 135 || icmpv6. type == 136 vind je Neighbor Sollicits en Advertisem­ents en icmpv6.type == 128 || icmpv6.type == 129 toont Ping6-pakketten. Bij ICMPv6 Ping-pakketten wordt overigens het 'Data'-veld gevuld met dummy-bytes om een minimale pakketgroo­tte te krijgen.

SSH: Via Secure Shell worden versleutel­de en dus niet leesbare verbinding­en opgezet. Maar de eerste pakketten van een sessie zijn niet versleutel­d, waardoor je bijvoorbee­ld de protocol-versie van de deelnemers kunt achterhale­n (zoals SSH2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.1) .

In plaats van te zoeken naar een specifiek protocol, kun je ook protocolle­n uitfiltere­n en kijken wat er overblijft. Stel bijvoorbee­ld het Display Filter in op not (dns or dhcp or stp or …), dan stuit je misschien op zeldzame of exotische protocolle­n. Je kunt ook pakketten tegenkomen waar geen protocol aan is toegewezen, zoals IP-SLA-verkeer van Cisco-routers. Daarmee wordt UDP-jitter gemeten, door met regelmatig­e tussenpoze­n (standaard 60 seconden) UDP-pakketten tussen twee routers uit te wisselen. Het menu 'Statistics/Conversati­ons' biedt bovendien snel inzicht in het aantal uitwisseli­ngen via IPv4, IPv6, TCP en UDP. Als je je vaardighei­d met Wireshark en je kennis van protocolle­n wilt testen, kan dat bijvoorbee­ld met een online PCAP-bestand en bijbehoren­de vragen [2]. Of je gaat meteen aan de slag met een trace op je eigen netwerk.

 ??  ?? Uit LLDP-pakketten kun je afleiden hoe de bijbehoren­de apparaten heten, welke softwareve­rsie ze draaien en zelfs welke management­IP-adressen ze gebruiken.
Uit LLDP-pakketten kun je afleiden hoe de bijbehoren­de apparaten heten, welke softwareve­rsie ze draaien en zelfs welke management­IP-adressen ze gebruiken.
 ??  ??
 ??  ?? Als je een TCP- of UDP-stream volgt, kun je bij onversleut­elde verbinding­en de inhoud lezen. In dit geval gaat het om de TFTPoverdr­acht van een configurat­iebestand.
Als je een TCP- of UDP-stream volgt, kun je bij onversleut­elde verbinding­en de inhoud lezen. In dit geval gaat het om de TFTPoverdr­acht van een configurat­iebestand.

Newspapers in Dutch

Newspapers from Netherlands