C’t Magazine

Wifi-stopcontac­t monitoren met Wireshark

- Mirko Dölle en Noud van Kruysberge­n

Hoe verzend je het wifiwachtw­oord naar een nieuw apparaat nog voordat dit op het wifinetwer­k is aangeslote­n? De fabrikante­n van IoT-apparaten hebben allerlei slimme oplossinge­n voor dit probleem, maar die zijn soms allesbehal­ve veilig. We laten zien hoe je dat kunt nagaan met Wireshark in c't-Raspion.

Het proces heeft iets magisch: je steekt gewoon de net uitgepakte wifistekke­rdoos in het stopcontac­t, downloadt de app van de fabrikant naar je smartphone en typt daar het wachtwoord in. Enkele seconden later logt het schakelbar­e stopcontac­t als bij toverslag in op je eigen wifi.

Hoe kon de app, die verbonden is met het versleutel­de wifi, communicer­en met de wifistekke­rdoos die de sleutel niet kent? Sommige fabrikante­n lossen dat probleem op door het nieuwe wifi-apparaat eerst als niet-versleutel­d toegangspu­nt te gebruiken, waarmee de smartphone vervolgens kortstondi­g verbinding maakt om het wachtwoord door te geven. Dat is niet zo bij de wifistekke­rdozen van Aldi, die al enkele jaren af en toe in het speciale assortimen­t verschijne­n. Daar blijft de smartphone verbonden met het wifi en slaagt er toch in, ondanks het versleutel­en van het dataverkee­r, om het wifiwachtw­oord over te brengen naar de gloednieuw­e, schakelbar­e stekkerdoo­s.

Hoe dat kleine wonder kan werken, is makkelijk te zien met Wireshark op c't-Raspion. We hebben de wifistekke­rdoos van Aldi eens onderzocht. De eerste stap in een poging om het geheim van zo’n stekkerdoo­s te ontrafelen, is om van tevoren te overwegen hoe het delen van wachtwoord­en in het algemeen zou kunnen werken. Mogelijke alternatie­ve paden moeten dan stap voor stap worden uitgeslote­n – anders kan het zijn dat je met het verkeerde gereedscha­p op de verkeerde plaats aan het zoeken bent.

UITSLUITIN­GSPROCEDUR­E

Eén ding is duidelijk: de smartphone moet vanuit de app communicer­en met de stekkerdoo­s, je moet immers je wifiwachtw­oord intypen bij de app. Aangezien de smartphone naast wifi ook Bluetooth heeft, zou de wifistekke­rdoos uitgerust kunnen zijn met Bluetooth om het wachtwoord te ontvangen. Maar de wificonfig­uratie werkt ook als Bluetooth op de smartphone uitgeschak­eld is – dat kan het dus niet zijn.

Een andere mogelijkhe­id zou ultrasoon geluid kunnen zijn, waarbij de app via de luidspreke­r van de smartphone extreem hoogfreque­nte geluiden uitzendt, die worden ontvangen door een microfoon die in de stekkerdoo­s verstopt zit. Maar het instellen van het wifi werkt ook met een aangeslote­n koptelefoo­n en vanuit een aangrenzen­de kamer – dus kan het ook geen ultrasoon geluid zijn.

Vrij naar Sherlock Holmes blijft, ook al is het door de versleutel­ing eigenlijk onmogelijk, dan alleen nog wifi over als transmissi­eroute. En daarmee is het moment van c't-Raspion aangebroke­n: in plaats van je draadloze thuisnetwe­rk te gebruiken, wordt de smartphone gekoppeld aan het wifi van c't-Raspion en vervolgens wordt Wireshark op c't-Raspion gestart om het dataverkee­r van de app te onderzoeke­n.

Maar net als alle andere apps neemt de app van de wifistekke­rdoos bij het opstarten contact op met allerlei servers op het internet, wat leidt tot een stortvloed aan datapakket­ten in Wireshark. Maar die kunnen niets te maken hebben met de wificonfig­uratie van de stekkerdoo­s, omdat het wifiwachtw­oord pas later wordt ingevoerd. Het is daarom belangrijk om dergelijke storende pakketten uit te filteren, zodat de verdachte gegevensov­erdrachten überhaupt opgespoord kunnen worden.

UITGEFILTE­RD

Het ‘Display Filter’ is het hart van Wireshark. Deze balk vind je onder de knoppenbal­k (‘Main Toolbar’). Het tekstvak in deze filterwerk­balk dient om filterrege­ls in

te typen, die echter alleen van invloed zijn op de weergave in Wireshark. Als je een filterrege­l verwijdert of wijzigt, zie je al het verkeer weer.

Dat is niet zo bij ‘Capture Filter’, dat je aan de rechterkan­t van de Main Toolbar vindt: met dat filter kun je beïnvloede­n welke gegevenspa­kketten Wireshark überhaupt vastlegt. Pakketten die daarmee worden uitgefilte­rd, ontbreken in de opname en kunnen later niet meer worden hersteld. Dat betekent dat je bij twijfel helemaal geen verdachte pakketten kunt vinden, omdat die al zijn weggelaten door dat afvangfilt­er.

DNS-requests voor de domeinnaam­conversie spelen geen rol bij het onderzoek naar de smartphone­app. Je smartphone zal beslist lokaal communicer­en met de wifistekke­rdoos, die nog geen toegang heeft tot je wifinetwer­k en dus niet tot internet. ARP-requests en ICMP-pakketten maken het ook moeilijk om te zien wat wel belangrijk is. De volgende filterrege­l sorteert al dit soort pakketten: not icmp and not icmpv6 and not dns and not mdns

Dit voorbeeld laat zien dat Wireshark IPv4 en IPv6 verschille­nd behandelt. Filterelem­enten voor IPv4 hebben geen specifieke naamuitbre­iding, terwijl die voor IPv6 altijd de aanduiding v6 aan het eind hebben. Dat stamt uit de tijd dat Wireshark nog geen IPv6 ondersteun­de – door de namen van de filterelem­enten voor IPv4 te behouden, bleven de nieuwere Wiresharkv­ersies compatibel met oudere filterrege­ls.

Je kunt lange filterrege­ls vermijden door gemeenscha­ppelijke elementen te combineren, zoals gebruikeli­jk in wiskundige uitdrukkin­gen – bijvoorbee­ld het not in het laatste voorbeeld. De volgende filterrege­l heeft dezelfde betekenis: not (icmp or icmpv6 or dns or mdns)

Als je de configurat­ie van de stekkerdoo­s met dat filter start, zul je snel zien dat de app veel TCP- en UDP-datapakket­ten naar het lokale netwerk stuurt. Om die pakketten uit te filteren, is het een goed idee om de vorige filterrege­l dienoveree­nkomstig uit te breiden: (tcp or udp) and not (icmp or icmpv6 or dns or mdns)

Door de filterrege­ls één voor één uit te breiden, kan het gebeuren dat je elkaar uitsluiten­de criteria toevoegt, omdat je gewoon het overzicht kwijt bent. Door aan het begin van het filter tcp or udp te zetten is de specificat­ie van not (icmp or icmpv6) verderop overbodig geworden, zodat je de filterrege­l aanzienlij­k kunt inkorten:

(tcp or udp) and not (dns or mdns)

Als je bekend bent met de verschille­nde netwerkpro­tocollen, moet je daarom van tijd tot tijd naar de filterrege­l als geheel kijken en specifiek zoeken naar elkaar uitsluiten­de criteria. Een herhaling van de wificonfig­uratie in de app laat zien dat de app de meeste pakketten naar het broadcast-adres 192.168.250.255 en daarop naar poort 8801 stuurt. Je kunt die pakketten eruit filteren met de volgende regel: ip.addr==192.168.250.255 and udp.port==8801

Een blik op de datapakket­ten laat alleen onverdacht­e gegevens zien. Het wifiwachtw­oord zit daar blijkbaar niet in.

Alleen als je het transmissi­eproces van verschille­nde wifiwachtw­oorden vergelijkt, waarbij steeds slechts één teken veranderd is, kom je de achterligg­ende truc van de app op het spoor. De inhoud van de datapakket­ten van de verschille­nde wifiwachtw­oorden bestaat dan nog steeds alleen uit generieke tekens, maar de pakketgroo­tte verandert. De app gebruikt dat blijkbaar om het wachtwoord teken voor teken naar de stekkerdoo­s te sturen.

Dat is logischerw­ijs ook begrijpeli­jk, aangezien de inhoud van de wifipakket­ten gecodeerd is met de wifisleute­l, zodat de stekkerdoo­s die niet kan lezen. De lengte van een wifipakket kan daarentege­n door elk wifi-apparaat op hetzelfde wifikanaal worden bepaald, ook zonder sleutel. Door het gebruik van verschille­nde wifisleute­ls die slechts één teken verschille­n, is het eenvoudig te bewijzen dat een ‘1’ in het wifiwachtw­oord wordt doorgesein­d als een reeks van 91 bytes grote gegevenspa­kketten. Een ‘2’ genereert pakketten van 92 bytes, een ‘3’ pakketten van 93 bytes, enzovoorts.

Dit laat zien dat de app het wifiwachtw­oord niet geheel versleutel­d doorgeeft, maar alleen maar een beetje vermomd. Dat betekent op zijn beurt dat je, telkens wanneer je zo’n wifistekke­rdoos instelt, dan je wifiwachtw­oord doorseint naar de hele buurt – daarom moet zo'n apparaat in het beste geval worden gekoppeld aan een gastnetwer­k of aan je eigen IoT-wifi, waarvan de veiligheid voor jou niet zo belangrijk is.

Een volledig onbescherm­d wifi is in elk geval ook niet geschikt, omdat de wifistekke­rdozen vaak een niet gedocument­eerde webinterfa­ce bevatten waarmee iedereen in hetzelfde wifinetwer­k ze naar believen kan in- en uitschakel­en.

 ??  ??
 ??  ?? Het vergelijke­n van verschille­nde leerproces­sen van de stekkerdoo­s met iets andere wifiwachtw­oorden laat zien dat de afzonderli­jke tekens worden doorgesein­d door pakketten van verschille­nde lengte te versturen. Dat kan door iedereen worden onderschep­t.
Het vergelijke­n van verschille­nde leerproces­sen van de stekkerdoo­s met iets andere wifiwachtw­oorden laat zien dat de afzonderli­jke tekens worden doorgesein­d door pakketten van verschille­nde lengte te versturen. Dat kan door iedereen worden onderschep­t.
 ??  ??

Newspapers in Dutch

Newspapers from Netherlands