Förderjahr 2019 / Project Call #14 / ProjektID: 4430 / Projekt: IoT-WatchDog
Heute dürfen wir die Beta-Version des IoT-Watchdogs offiziell in die Freiheit entlassen!
In der Beta-Phase dient der IoT-Watchdog zum Analysieren und Finden von unsicheren Verbindungen von WLAN-Client-Geräten ins Internet.
Start
Was braucht man um den IoT-Watchdog zu verwenden
- Raspberry Pi 4 mit Netzteil (USB-C, min. 2.5A)
- MicroSD-Karte mit Kartenleser für PC - min. 8GB, wir empfehlen immer "High-Endurance" oder "Industrial"-Karten
- Internet-Router mit LAN-Anschlüssen
- Netzwerkkabel
- zu testendes Gerät (Muss WLAN a, b oder g unterstützen)
Als erstes braucht man das IoT-Watchdog Image - das kann man
- entweder selber bauen
- oder ein fertiges .img herunterladen
Image bauen
Die Images werden mittel pi-gen gebaut. Für den IoT-Watchdog gibt es ein Repository auf GitHub. Das Bauen geschieht auf einen X86-64 Linux-System, die Pakete werden dabei für die ARM-Plattform des Raspberry pi cross-compiled (keine Angst, passiert alles automatisch).
Folgende Schritte sind zum Bauen nötig:
- Benötigte Build-Dependencies installieren:
apt-get install coreutils quilt parted qemu-user-static debootstrap zerofree zip dosfstools bsdtar libcap2-bin grep rsync xz-utils file git curl bc
- Build-Umgebung einrichten:
./prepare.sh
- Image bauen:
./build.sh
Die fertigen images landen dann im Ordner "deploy"
Image auf die SD-Karte spielen
Nachdem wir die µSD-Karte in den Kartenleser gesteckt haben, müssen wir rausfinden, unter welchem Pfad sich die SD-Karte befindet: Hier hilft ein Blick ins System-log:
journalctl -n 30
Die SD-Karte ist dann zB unter /dev/sdd zu finden. Jetzt können wir das image direkt (byteweise) auf die SD-Karte spielen - wir entzippen und flashen mit einem Befehl (als root):
unzip -p image_2020-11-30-Raspbian-IoT-Watchdog.zip | dd of=/dev/sdd bs=10M
Wenn der Befehl fertig ist, nochmal "sync" eintippen, und die Karte in den Raspberry Pi stecken.
IoT-Watchdog starten
Der IoT-Watchdog wird mittels LAN-Kabel an den vorhandenen Internet-Router gehängt. Das Netzteil in die Steckdose, und dann in den Raspberry Pi stecken. Beim ersten Boot wird das Dateisystem auf die maximale Größe der Speicherkarte ausgedehnt, und nach einem automatischen Reboot fährt der IoT-Watchdog hoch.
Der Hotspot öffnet standardmäßig folgendes Netzwerk:
- SSID: IoT-Watchdog
- Passwort: Netidee2019
Das Setup sieht dann folgendermaßen aus:
)
Danach kann man sich entweder am Hotspot anmelden, oder via LAN verbinden. Die Adressen für den Zugriff aufs Webfrontend sind:
- http://192.168.42.1, wenn im WLAN-Hotspot des IoT-Watchdog eingeloggt
- http://iot-watchdog via LAN - oder die IP-Adresse (z.b 192.168.0.xx), wenn das Bonjour-Protokoll zur lokalen Namensauflösing nicht aktiv ist. Die LAN-IP-Adresse des IoT-Watchdog findet man entweder im Internet-Router oder in den Systemeinstellungen des IoT-Watchdog-Frontends wenn man via WLAN eingeloggt ist.
Analyse-Tools
Via Webbrowser mit dem IoT-Watchdog verbunden, kommt man vom Dashboard aus zu folgenden Apps:
- Internet Connection Map
- Internet Connection List
- Local Connection List
Weiters können folgende integrierte Open-Source-Tools auch direkt aufgerufen werden:
- Wireshark
- ntop-ng
Karten-Ansicht
Die App "Internet Connection Map" Hier werden die letzten Verbindungen ins Internet auf einer Karte dargestellt.
Wie gut der eigene Standort erkannt wird, ist vom verwendeten Internetprovider abhängig. Oft wird der Standort des Providers (meist Wien) verwendet. Für das Versetzen des eigenen Standorts (Grüner Punkt) einfach den Namen des Zielortes in das Feld "Search" eintippen, und auf "Go" drücken. Die Koordinaten werden aus der OpenStreetMap abgefragt und im Browser gespeichert. Der Zielserver jeder Verbindung wird als blauer Punkt dargestellt. Oft stehen viele Server an einem Punkt, oder werden einem Land (in dem Fall dem Flächenschwerpunkt) zugeordnet. Die Verbindungen werden als Linien dargestellt, wobei die Farbe einen ersten Blick auf die Abhörsicherheit der Verbindungen zu diesem Server (Über die Art der Verschlüsselung) erlaubt:
- Grün: Die Verbindung ist verschlüsselt (HTTPS, TLS etc.)
- Gelb: Fraglich - Es werden Ports verwendet, wo verschlüsselter oder unverschlüsselt Verkehr möglich ist
- Rot: Verbindungen über unverschlüsselte Protokolle (wie zB HTTP über Port 80)
In einer Linie werden alle Verbindungen zu diesem Server aggregiert - mehrere Linien zu einem Punkt bedeuten Verbindungen zu unterschiedlichen Servern in diesem Gebiet. Ein Klick auf die Linien öffnet ein Popup mit einer Übersicht auf die Verbindungen zu diesem Server.
In dem Popup sieht man zB, dass zu diesem Server mehrere Verbindungen (auf Port 443, 993) aufgebaut wurden. Detail-Statistiken zu diesem Server können mit einem Klick aufs orange "n" in ntopng geöffnet werden. Seit dem Laden der Seite neue Verbindungen können mit einem Klick auf den Knopf "Reload" neu angezeigt werden. Sollten zu viele Linien zu sehen sein, können ältere Verbindungen durch Reduzierung der Zahl im Feld "last # Connections" ausgeblendet werden.
Geolocation
Die Geolocation der Server-IP-Adressen ist mithilfe der Maxmind-Datenbank implementiert. Die Maxmind-Datenbank gibt es in mehreren Lizenzvarianten – die freie Variante ist mit einer persönlichen Lizenz versehen, unter der die Datenbank zwar verwendet, aber nicht weitergegeben werden darf. Hier befinden wir uns in einem Dilemma – es gibt leider keine Open Source-Datenbanken zur Geolocation von IP-Adressen, und wir wollen aus Datenschutzgründen keine IP-Adressen-Abfragen an irgendwelche zentralen Dienste wie Google schicken. Wir haben uns dazu entschlossen, dass jeder Nutzer die Maxmind-Datenbank selbst nachinstallieren muss, das ist die einzige 100% rechtskonforme und privacy-kompatible Lösung.
Darum muss man als Nutzer die Maxmind-Geodatenbank manuell mit einer persönlichen Lizenz nachinstallieren - am einfachsten in das laufende IoT-Watchdog-Image - das befolgt man am besten die Anleitung von ntopng.
Listen-Ansicht
Die Listenansicht bietet eine tabellarische Übersicht über die offenen Verbindungen, zeitlich sortiert - die zuletzt aktiven oben.
Erklärung der Spalten:
- Das bunte Symbol links zeigt die Abhörsicherheit der Verbindungen (Abgeleitet von den verwendeten Protokollen/Ports) an.
- Source IP und Dest. IP sind die IP-Adressen von Start und Ziel der Verbindung. Die mit 192.168. beginnende ist dabei diejenige vom Gerät im lokalen Netzwerk des IoT-Watchdogs.
- Mit Klick aufs orange "n" können Details des Zielservers via ntopng geöffnet werden.
- Info/Hostname zeigt den Namen des Servers im Internet an.
- Remote Location zeigt den Standort (Land oder wenn bekannt Stadt) des Servers im Internet an.
- L4 Prot zeigt das grundlegende Netzwerkprotokoll (meist TCP oder UDP) an.
- Src. Port und Dest. Port geben Quell- und Zielport der Verbindung an.
- L7 Protocol gibt das Protokoll auf Anwendungsebene an. Die meisten Verbindungen laufen heutzutage verschlüsselt über TLS oder HTTPS ab.
Wir freuen uns auf Verbesserungsvorschläge und Bug-Reports - am besten direkt als Issue auf Github im jeweiligen Repository :-)