Iedereen vermoedt dat de grote bedrijven van alles over ons naar hun hoofdkwartier sturen. De grote vraag is wat er allemaal wordt verzameld. In deze aflevering de eerste stap in dat ontrafelen met behulp van een Raspberry Pi...

hetlab logo
Henk van de Kamer

 

In PC-Active #310 (feb/mrt 2020) vertelde ik in Het Lab over vreemde pakketjes die Apple-producten naar hun thuisbasis versturen. Tot op heden heb ik geen uitleg van Apple mogen ontvangen wat zij in dit versleutelde verkeer willen versturen. Willen, want gelukkig houdt de door mij ingerichte firewall deze vermoedelijk privacyschending tegen.In PC-Active #310 (feb/mrt 2020) vertelde ik in Het Lab over vreemde pakketjes die Apple-producten naar hun thuisbasis versturen. Tot op heden heb ik geen uitleg van Apple mogen ontvangen wat zij in dit versleutelde verkeer willen versturen. Willen, want gelukkig houdt de door mij ingerichte firewall deze vermoedelijk privacyschending tegen.

Raspberry Pi
Zelfs vóór bovenstaande ontdekking had ik plannen om eens Android en Windows af te luisteren. Het grootste probleem is de versleuteling van de data. Onlangs ontdekte ik bij toeval een artikel waarin de auteurs laten zien dat het meestal https is. Daarmee is het afluisteren van een apparaat in ons netwerk veel eenvoudiger. Hoe? Dat wordt het onderwerp van de volgende aflevering. In deze gaan we de basis leggen.
De Raspberry Pi 3 of hoger is in feite een zeer simpele router met twee netwerkkaarten: wifi en de normale netwerkaansluiting. Raspbian – tegenwoordig Raspberry Pi OS genoemd – plaatst beide in een bridge waardoor het niet uitmaakt welke van de twee je gebruikt. Zonder deze instelling kunnen we van elk een eigen netwerk maken met compleet andere instellingen. Vervolgens kunnen we het verkeer van de ene naar de andere routeren en/of blokkeren. Eén van de netwerken sluiten we aan op ons normale, interne netwerk en daarmee dus ook naar het internet. Op de andere sluiten we het apparaat aan waarvan we willen weten wat die allemaal uitspookt.

Debian
Raspbian is – zoals de laatste vier letters al aangeven – gebaseerd op Debian. Die gebruik ik op bijna alles en daardoor weet ik ook vrij aardig hoe dingen geregeld worden. De makers van Raspbian hebben een andere werkwijze en dat levert de nodige frustraties op. Gelukkig maakt Debian tegenwoordig zelf images voor alle versies van de Raspberry Pi (https://raspi.debian.net/). Deze kunnen op de gebruikelijke manier naar een (micro)sd-kaart worden geschreven. Uiteraard kies je de versie (family) van jouw exemplaar omdat deze, in tegenstelling tot Raspbian, is geoptimaliseerd voor de aanwezige processor.
Ik gebruik voor het maken van de (micro)sd-kaart de commandline. Het dd-commando is slechts 80 kilobyte groot en vergelijk dat maar eens met de ruim 90 megabyte grote zip van belenaEtcher. Tegenwoordig is programmeren blijkbaar zoveel mogelijk werk van anderen aan elkaar knopen. Het commando:

xzcat xxx_raspi_3_bullseye.img.xz | dd of=/dev/sdb bs=64k

De 3 in de gedownloade image komt overeen met de gebruikte Raspberry Pi 3B v1.2. De xxx is de datum waarop Debian deze heeft gemaakt. Met behulp van het xzcat-commando wordt het geheel uitgepakt en standaard naar het beeldscherm gestuurd. Dankzij de | wordt het nu echter als invoer doorgestuurd naar het dd-commando en deze schrijft alles weg naar de (micro)sd-kaart. In mijn geval was dat /dev/sdb maar die laatste letter kan bij jou anders zijn! Aangezien je dit commando als root uitvoert, kan een verkeerde keuze voor de letter je harde schijf overschrijven. En dat zonder waarschuwing, want Linux verwacht dat root-gebruikers weten waar ze mee bezig zijn. Grijns...

Systemd
Ik ga ervan uit dat lezers, die dit experiment thuis op hun eigen spullen willen uitproberen, voldoende kennis van Linux hebben om bijvoorbeeld een root-wachtwoord en SSH-sleutel in te stellen. Indien gewenst, kan ik op aanvraag per e-mail een verkorte versie van een hoofdstuk uit één van mijn boeken sturen.
Meestal wordt een Raspberry Pi ingezet als normale computer, maar voor dit experiment is die grafische onzin overbodig. Omdat Debian de image heeft voorbereid op genoemd doel, heeft systemd – ik blijf dat een virus noemen – het netwerk overgenomen. Dat maakt het geplande experiment een stuk moeilijker. Oftewel: die ellende gaan we als eerste vermanend toespreken:

root@rpi3:~# systemctl stop systemd-networkd.socket systemd-networkd systemd-networkd-wait-online systemd-resolved  
root@rpi3:~# systemctl disable systemd-networkd.socket systemd-networkd systemd-networkd-wait-online systemd-resolved

Na een herstart – het kan sowieso geen kwaad om te controleren of wijzigingen inderdaad correct zijn doorgevoerd – kan het netwerk op de ouderwetse en daardoor veel simpeler manier worden geconfigureerd.

Wifi
Voor het afluisteren van een BMAX Y11-notebook en een OnePlus 8-smartphone – beide Chinese merken – ga ik wifi gebruiken. Deze krijgt dus een andere  dan mijn normale netwerk. Voor meer controle over de DNS die beide slachtoffers gaan gebruiken, installeer ik dnsmasq. Dit programma doet tevens dienst als DHCP-server. Het configureren beschrijf ik in mijn labjournaal (https://www.hetlab.tk/raspberry-pi/afluisteren-instellen-dnsmasq-en-wlan0).
De volgende stap is ervoor zorgen dat de Raspberry Pi een wifi-hotspot wordt. Daarvoor installeren we hostapd. Deze configureren is wat lastiger (https://www.hetlab.tk/raspberry-pi/afluisteren-instellen-hostapd). Uiteraard kies je een andere naam voor ssid en wpa_passphrase tijdens het doorvoeren van de wijzigingen. Na een herstart zag de OnePlus 8 de nieuwe hotspot en ging ook het aanmelden goed. Waarna geheel correct gemeld werd dat er geen internetverbinding is...

Tcpdump
Het ontbreken van een internetverbinding is perfect als startpunt in het afluisteren. Het apparaat probeert van alles, maar er komen geen antwoorden terug. Je hoeft je dus niet door bergen overbodig verkeer te worstelen. De enige antwoorden die wel werken, zijn de DNS-aanvragen. En die geven al een goede indicatie van wat er wordt uitgespookt.
Het afluisteren op de commandline kan via het programma tcpdump. Het resultaat kan worden weggeschreven in een bestand, die je vervolgens op een gewone computer in Wireshark kan inlezen en verder bestuderen. Het afvangen gaat als volgt:

root@rpi3:~# tcpdump -i wlan0 -ttnvvS -w op8_exp01.pcap &

De -i geeft aan welke netwerkkaart afgeluisterd moet worden. De serie opties daarna geven aan hoe de informatie moet worden bewaard; voor de details verwijs ik je naar de documentatie.
De -w geeft aan dat de data moeten worden weggeschreven naar het aangegeven bestand.
De op8 geeft aan dat we de OnePlus 8 afluisteren.
Op deze is de standaardconfiguratie doorlopen en heb ik alles waar mogelijk geweigerd. Ofwel: er is geen Google-account aanwezig! De enige geïnstalleerde app is Signal en diens apk is via hun website gedownload (https://www.hetlab.tk/android/signal-overzetten).

Eerste resultaat
De telefoon is uitgezet, vervolgens is bovenstaand commando gestart, waarna de telefoon weer is aangezet. Op het toestel heb ik alleen gecontroleerd of er een wifiverbinding met HetLab_AP is gemaakt. Daarna is het geheel voor circa 20 minuten niet aangeraakt. Ofwel: al het verkeer zijn zaken die tijdens en na het opstarten door Android op de achtergrond worden uitgespookt.Omdat er geen internetverbinding is, blijft het bij DNS-aanvragen. In de bijgaande afbeelding zie je in rood een zeer complex uitziende opdracht. Het tcpdump-deel toont nu de inhoud van het bestand en die gaat via de | door als invoer naar de grep. Deze filtert op het DNS-verkeer – het IP-adres is de aan wlan0 toegekende en de laatste .53 is de poort die DNS gebruikt – waarna de overgebleven regels aan de sed-opdracht wordt gegeven. Die filtert het interessante deel uit de regel, zodat sorteren mogelijk wordt. Tot slot worden alle identieke regels geteld en op één na verwijderd. Het resultaat is de getoonde uitvoer.

325 dns aanvragen
Met welke sites wordt contact gelegd

Bijna alle aanvragen zijn voor domeinen die door Google worden beheerd. De beacons.gvt2.com is door MarkMonitor geregistreerd voor Google. De eerste levert onder andere een dienst om merknamen te beschermen. Verder lijkt het erop dat Signal op de achtergrond is gestart, maar dat is niet geheel onverwacht.

Spionage?
In de lijst met aangevraagde domeinen zien we tot slot twee stuks voor OnePlus. Toen ik in mijn labjournaal meldde dat ik deze Chinese telefoon had gekocht, vroeg een aantal lezers of ik niet bang was voor spionage. Mijn antwoord is nee. In de nabije toekomst gaat de door Google – en in mindere mate OnePlus – aangeklede Android vervangen worden door een versie die ontgoogeld – mijn vertaling van het Engelse degoogled – is. Ofwel geen Play Store of andere rotzooi waarmee Google onze privacy tot een product maakt. In de volgende aflevering ga ik kijken naar de genoemde BMAX Y11-notebook die vanuit de Chinese fabriek is voorzien van Windows 10. Voor een uitleg waarom deze en niet de smartphone moet je nog twee maandjes wachten...