Wifi bewaken – monitor je wifinetwerk met een Raspberry Pi en Nzyme

Marco den Teuling
0

Iedereen binnen bereik van je wifinetwerk kan de router, computers en andere apparaten in je netwerk aanvallen, vaak zonder dat je iets doorhebt. Met de oplossing in deze workshop kun je je wifi bewaken en alarm laten slaan bij verdachte activiteit.

Wat je voor deze workshop nodig hebt zijn een Raspberry Pi, een geschikte wifi-adapter en de gratis software Nzyme. Voor het installeren en instellen daarvan moet je wat tekstbestanden aanpassen en commando’s typen, daarvoor volg je net als bij andere Raspberry Pi projecten de aanwijzingen in deze workshop.

Na afloop heb je een systeem dat je wifi bewaken zal en alarm slaat als iemand met het wifi-netwerk probeert te knoeien.

wifi bewaken met Raspberry Pi en Nzyme

Nodig voor deze workshop:

  • Raspberry Pi. Een Pi 3 is genoeg voor kleine thuisnetwerken.
  • Wifi-adapter. Een wifimodule die de zogenaamde monitormodus ondersteunt (bijvoorbeeld met een Ralink RT-chipset). Een wifi-adapter met externe antenne zal ook meer bereik hebben dan de ingebouwde wifi van de Pi.
  • Nzyme, dat je downloadt op de Pi met wget (verderop beschreven).

Ontvang gratis tips voor andere Pi projecten, schrijf je in voor de nieuwsbrief:


De Raspberry Pi voorbereiden

Je kunt Nzyme installeren onder Debian, Ubuntu Server of Raspberry Pi OS (voorheen Raspbian). We gaan hier uit van Debian 10 Buster. Voor andere distributies of wifi-hardware heb je wat basis Linux-kennis nodig om eventueel stappen aan te passen. Zo moet je onder RaspberryPi OS ‘sudo’ voor de commando’s zetten om ze uit te voeren met systeembeheerrechten.

Haal eerst de nodige afhankelijk­heden en enkele extra pakketten op met het volgende commando:

apt install libpcap0.8 sudo wget iwd
openjdk-11-jre-headless wireless-tools postgresql-11 iw firmware-ralink
apt-transport-https -y

Wanneer je een andere wifichipset gebruikt dan Ralink, vervang je firmware-­ralink door het pakket van de fabrikant, bijvoorbeeld firmware-realtek.

Het is een goed idee de ssh-server op te starten en met de Pi te werken vanaf een andere computer.

De wifi-interface een unieke naam geven

Zorg er daarna voor dat de wifi-interface van de stick waarmee je wilt scannen met een unieke naam kan worden aangesproken. Je kunt een overzicht van relevante netwerkinterfaces krijgen met ­iwconfig.

wifi adapter voor Raspberry PI en Nzyme

Komen de generieke interface­namen wlan0 en wlan1 in de uitvoer voor, dan moet je handmatig vaste apparaatnamen instellen. Voeg hiervoor twee udev-regels toe in de directory /etc/udev/rules.d:

cat <<EOF >>/etc/udev/rules.d/
70-persistent-net.rules
SUBSYSTEM==”net”,
ACTION==”add”,
DRIVERS==”?*”,
ATTR{address}==”XX:XX:XX:XX:XX:XX”,
ATTR{dev_id}==”0x0″,
ATTR{type}==”1″,
KERNEL==”wlan*”,
NAME=”IDSWLAN”
EOF

Wanneer je Nzyme op Raspberry Pi OS installeert, heb je de udev rules niet nodig en is het voldoende om de symlink /etc/systemd/network/99-­default.link te verwijderen en de Pi te rebooten. Het systeem zal dan automatisch een vaste naam genereren op basis van het MAC-adres van de adapter, bijvoorbeeld ‘wlx00c0ca971201’. Onder Debian vervang je de XX-placeholders in het vorige commando door het MAC-adres van je wifistick, dat je achterhaalt met ip link show.

De naam van het apparaat moet uniek zijn en mag niet conflicteren met andere apparaten in het netwerk. Gebruik een naam zonder koppeltekens, underscores en andere bijzondere tekens, aangezien deze Nzyme storen bij het wisselen van kanaal. Als voorbeeldnaam voor de interface gebruiken we hier de naam IDSWLAN, waarmee je aan de veilige kant zit.


Ontvang gratis informatie en tips over wifi en beveiliging, schrijf je in voor de nieuwsbrief:


Nadat je de eerste regel hebt ingesteld, herstart je de Raspberry Pi en voer je vervolgens de tweede regel in:

cat <<EOF >>/etc/udev/rules.d/
75-persistent-net-generator.rules
KERNEL!=”wlan*|ath*|msh*|ra*|sta*|ctc*|
lcs*|hsi*”,
GOTO=”persistent_net_generator_end”
EOF

Na nog een herstart zou de wifi-interface toegankelijk moeten zijn onder de naam IDSWLAN.

Database maken voor gegevens van wifi bewaken

De volgende stap is het opzetten van de PostgreSQL database die Nzyme nodig heeft. Maak daartoe een database aan met de naam nzyme en de databasegebruiker nzyme. Vervang de sterretjes door je eigen wachtwoord, dat je goed moet bewaren:

sudo -Hiu postgres psql -c
“create database nzyme;”
sudo -Hiu postgres psql -c
“create user nzyme with encrypted password ‘******’;”
sudo -Hiu postgres psql -c “grant all privileges on database nzyme to nzyme;”

PostgreSQL bevestigt deze commando’s met de uitvoer CREATEDATABASE, CREATE ROLE en GRANT.

Wachtwoord voor Nzyme

Als laatste stap voor het installeren van het Nzyme-­pakket maak je met het commando echo -n XXXXXX | sha256sum een wachtwoord-hash aan om straks in te loggen op de webinterface. Vervang XXXXXX door het gewenste wachtwoord.

Zet de hash (zonder het koppelteken aan het eind) in een tijdelijk bestand in de home-directory om later te kunnen kopiëren en plakken.

Nzyme dashboard voor je wifi bewaken

Op het dashboard van Nzyme kun je in één oogopslag de status van het systeem zien.

Nzyme downloaden

Download nu met wget het Debian-pakket van de huidige Nzyme-versie. Bij het ter perse gaan was dit versie 1.1.1 Cherry Bomb:

wget https://assets.nzyme.org/releases/nzyme-1.1.1.deb

Vergelijk de SHA256-checksum van het pakket met de nummerreeks op de website van Nzyme om de authenticiteit van het pakket te controleren. Ga alleen door met de installatie via dpkg als de checksum correct is:

sha256sum nzyme-1.1.1.deb
dpkg -i nzyme-1.1.1.deb

Nzyme configureren

Nzyme wordt geleverd met een geannoteerd configuratievoorbeeld dat je eenvoudigweg kunt kopiëren om als basis te gebruiken:

cp /etc/nzyme/nzyme.conf.example /etc/nzyme/nzyme.conf

Gebruik een willekeurige teksteditor om de voorbeeldwaarden in het bestand /etc/nzyme/nzyme.conf te vervangen door je eigen.

general: {
role: LEADER
id: nzyme-node-01
admin_password_hash:
database_path: “postgresql:/localhost:5432/
nzyme?user=nzyme&password=YOUR_PASSWORD”
python {
path: /usr/bin/python3.8
script_directory: /tmp
script_prefix: nzyme_
}

Geef in de sectie general je Nzyme-instantie ­achter id een unieke naam die alleen uit alfanumerieke tekens bestaat. Vul bij admin_password_hash je eerder aangemaakte password-hash in, die je in een tijdelijk bestand hebt opgeslagen. De regel database_­path laat de verbindingsstring van PostgreSQL zien. Vervang de placeholder YOURPASSWORD door je eigen databasewachtwoord.

Vergelijk in de sectie python bij path het standaard /usr/bin/python3.8 met het versienummer en pad van de geïnstalleerde Python-versie en corrigeer dit indien nodig. Veel distributies stellen hier symbolische links in, maar het is beter om rechtstreeks naar de Python-executable te verwijzen.

De sectie alerting met de gegevens voor e-mail notificaties kun je voorlopig overslaan. Voordat Nzyme bij elke alert mails verstuurt, moet je eerst het systeem afstellen. Bij de eerste ingebruikname zijn er meestal veel foutpositieven.

interfaces: {
rest_listen_uri: “http://127.0.0.1:22900/”
http_external_uri: “http://127.0.0.1:22900/”
}

802_11_monitors: [
{
device: wlx00c0ca971201
channels: [1,2,3,4,5,6,7,8,9,10,11]
channel_hop_command: “sudo /sbin/iwconfig {interface} channel {channel}”
channel_hop_interval: 1
skip_enable_monitor: false
}
]

Vervang in de sectie interfaces het standaard 127.0.0.1 door het ip-adres van de Pi LAN-inter­face waarmee hij in het lokale netwerk bereikbaar is. Controleer ook of de Raspberry Pi van een DHCP-server in het netwerk een vast ip-adres krijgt.

Naam wifi-interface en wifi-kanalen

De sectie 802_11_monitors is van speciaal belang. Vervang daar achter device: de placeholder ­wlx00c0ca971201 door de vaste ingestelde naam van de interface, bijvoorbeeld IDSWLAN.

De lijst van te scannen kanalen staat, gescheiden met ­komma’s, achter channels:. Voor de 2,4GHz-band zijn dit bijvoorbeeld de kanalen van 1 tot 14. Een volledige lijst van alle beschikbare kanalen van een wifistick kun je te zien krijgen met het commando iwlist channel.

Nzyme Networks wifi netwerken bekijken

Onder het menupunt Networks geeft Nzyme een lijst van alle wifinetwerken binnen het bereik.

Nzyme starten en inloggen

Tot slot maak je Nzyme als service bekend bij systemd en voer je het programma uit. Zorg dat Nzyme voortaan automatisch opstart na een reboot van de Pi:

systemctl enable nzyme
systemctl start nzyme

Na een korte wachttijd is de Nzyme-webinterface beschikbaar onder het ip-adres van de Raspberry Pi op poort 22900. Inloggen gebeurt met de gebruikersnaam admin en het vooraf ingestelde wachtwoord. Als Nzyme niet start, is er waarschijnlijk een probleem met het configuratiebestand.

Het commando journalctl -xe en een blik op het logbestand /var/log/nzyme/nzyme.log kunnen je helpen om het probleem te vinden.

Eigen wifi bewaken instellen

Na het inloggen op de webinterface ga je naar Networks in het hoofdmenu en open je daar de Network Details voor alle zichtbare wifinetwerken. Lees daar voor jouw wifi de gegevens uit zoals SSID, BSSID, Beacon Rate en Network Fingerprint en sla ze tijdelijk op.

Nzyme netwerk details monitor

Bij Network Details vind je de waarden voor het configuratiebestand en informatie zoals de beacon rate en de signaalsterkte.

Vul daarmee de informatie aan in het configuratiebestand van Nzyme, in de sectie 802_11_networks.

ssid: mywifinetwork
channels:[1,2,3,4,5,6,7,8,9,10,11,12,13]
security: [WPA2-PSK-CCMP]
beacon_rate: 40
bssids: [
{
address: “f0:9f:c2:dd:18:f6”,
fingerprints: [ 45933326ca0 ]
}
]

Na het herstarten van de service, kent Nzyme voortaan zijn eigen netwerk en diens normale toestand. Als Nzyme afwijkingen hiervan registreert, logt hij deze en slaat alarm.

Wanneer Nzyme bijvoorbeeld een verhoogde beacon rate registreert, kan dit erop wijzen dat een aanvaller probeert je accesspoint te imiteren (spoofing). Bij elke Alert geeft Nzyme informatie over het mogelijke aanvalsscenario, maar geeft voor een betere inschatting ook uitleg over ‘natuurlijke oorzaken’ van de anomalie.

Je wifi bewaken met Nzyme

Het dashboard is het eerste aanspreekpunt in de webinterface van Nzyme en toont de status van het systeem, evenals mogelijke problemen. Gekleurde statusindicatoren, beknopte overzichten van recente gebeurtenissen en een grafiek van de afgelopen 24 uur geven een snel overzicht van de situatie.

Netwerken

Gedetailleerde informatie over gedetecteerde wifinetwerken en basisstations vind je in het hoofdmenu onder Networks. Nzyme creëert voor het onder­scheid een zo uniek mogelijke vingerafdruk. Het kan voorkomen dat een apparaat hiervan meerdere krijgt toegewezen, afhankelijk van op welke kanalen het uitzendt of voor welke draadloze netwerken het verantwoordelijk is.

Alerts

Een volledig overzicht van alle door Nzyme geregistreerde ‘alerts’ is te vinden onder de gelijk­namige optie in het hoofdmenu. Laat je in het begin niet afschrikken door de vele alarmmeldingen. Zoals elk meetinstrument heeft een pas geïnstalleerd ­Nzyme wat kalibratie en tijd nodig voordat het aantal foutpositieven afneemt.

monitoren wifi netwerk waarschuwing van Nzyme

Nyzme slaat alarm: bij elke Alert geeft het programma uitleg waarom het een aanval of foutpositief kan zijn.

Om dat te doen, pas je bijvoorbeeld de drempel van de beacon-rate, die je als normaal hebt ervaren, overeenkomstig aan in het configuratiebestand. Met een beetje uitproberen zijn dan na een paar dagen de ideale drempelwaarden gevonden voor de beacon rates van je basisstations, die natuurlijk enigszins fluctueren.

Pas als de foutpositieve alerts afnemen, kun je de e-mailmeldingen instellen die je tevoren in het configuratiebestand hebt over­geslagen.

Wifi bewaken tegen hackers

Nzyme duidt met ‘bandit’ apparaten aan die op ­basis van hun fabrikantidentificatie worden herkend als typische hackertools, zoals de Wifi Pineapple of Deauther. Een aantal daarvan hebben we al eens onderzocht.

Naast de voorgedefinieerde lijst van Nzyme kun je ook zelf bandits definiëren en volgen, bijvoorbeeld om een netwerk­apparaat in de gaten te houden dat een bepaalde bedrijfsomgeving niet mag betreden of verlaten.

Meer mogelijkheden

Voor een grootschalige dekking kun je meerdere Raspberry Pi’s met Nzyme opzetten als meetpunten, die hun verzamelde gegevens doorsturen naar een centraal logbeheersysteem.

Je kunt met Nzyme ook mobiele trackers bouwen die de fysieke locatie van bandits en sniffers op het spoor komen door de signaalsterkte te meten. Instructies en veel achtergrondinformatie zijn beschikbaar op de website van Nzyme.

In een eigen test kon Nzyme een gesimuleerde afluisteraanval detecteren, evenals het imiteren van het eigen accesspoint met SSID-spoofing (Rogue AP-aanval door WiFi Pineapple van Hak5) en alarm slaan via e-mail.

(Deze informatie is afkomstig uit het artikel in c’t 1-2/2022, pagina 126 met medewerking van Tomas Jakobs en Marco den Teuling)

Meer Pi-projecten in c't magazine mei/2022

Meer over

NetwerkenWifi

Deel dit artikel

Lees ook

Virus zoeken met c’t-rescue Windows – scan je pc

We laten je zien hoe je rescue-Windows en de verschillende virusjagers kunt gebruiken, die variëren van snelle tests tot grondige analyses, om een vir...

Virus infectie vinden en verwijderen met c’t-rescue Windows

Met rescue-Windows en verschillende virusscanners, variërend van snelle tests tot grondige analyses, een virus, infectie vinden.

Interessant voor jou

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er