Netzwerk-Monitoring bzw. Man-in-the-Middle auf dem Raspberry Pi einrichten

Für eine Aufgabe, bei der es darum geht, Netzwerk-Verkehr aufzuzeichnen wir ein Raspberry Pi benötigt, der als Man-in-the-Middle eingerichtet ist. Ein Man-in-the-Middle ist eine Netzwerk-Einrichtung, die in der Lage ist Netzwerkverkehr abzuhören, aufzuzeichnen und zu manipulieren. Damit das gelingt, wird das entsprechende Gerät in eine Netzwerk-Verbindung bzw. zwischen zwei Endpunkten gesetzt.

Aufgabe

  1. Für diesen Zweck soll der Raspberry Pi mit einem WLAN-Adapter ausgestattet werden, der einen Monitor-Modus hat.
  2. Der WLAN-Adapter soll als WLAN-Zugangspunkt dienen.
  3. Der Ethernet-Port soll als Übergang ins leitungsgebundene Netz dienen.
  4. Zwischen dem WLAN-Adapter und dem vorhandenen Ethernet-Port soll eine Netzwerk-Brücke konfiguriert werden.

Lösung: Raspberry Pi als Netzwerk-Brücke (Bridge-Modus)

Im Prinzip könnte man hergehen und den Raspberry Pi einfach zum WLAN-Access-Point machen. Allerdings macht das nur dann Sinn, wenn man ein größeres Netzwerk mit verschiedenen IP-Adressbereichen betreibt. In diesem Fall reicht es aus, wenn der Raspberry Pi als WLAN-to-LAN-Bridge läuft. Das macht die Sache einfacher, als wenn man ihn zum Access-Point konfigurieren müsste.

Der Betrieb als Netzwerk-Brücke setzt natürlich voraus, dass sich in dem lokalen Netzwerk ein DHCP-Server und Standard-Gateway betrieben werden.
Damit diese Lösung gelingt sollte man die Distribution Raspbian verwenden und sicherstellen, dass der WLAN-Adapter mit dem Raspberry Pi funktioniert. Der WLAN-Adapter sollte außerdem den Monitor-Modus beherrschen, was nicht alle können. Hiermit kann man herausfinden, ob der WLAN-Adapter überhaupt erkannt wurde:

lsusb

Wenn hier etwas von "wireless" oder "802.11" steht, dann hat man schon fast gewonnen.

Ob der WLAN-Adapter den Monitor-Modus beherrscht, findet man folgendermaßen heraus:

iw list | grep monitor

Wenn dieser Befehl Zeilen mit „monitor“ auswirft, dann ist alles im grünen Bereich und der WLAN-Adapter beherrscht den Monitor-Modus. Wenn nicht, dann sollte man sich einen anderen WLAN-Adapter besorgen.
Hinweis: Gegebenenfalls muss "iw" nachinstalliert werden:

sudo apt-get install iw

Bevor man anfängt zu installieren und zu konfigurieren empfiehlt es sich zuerst ein Update der bereits installierten Software zu machen:

sudo apt-get update && sudo apt-get upgrade

Hat man sichergestellt, dass der WLAN-Adapter geeignet und ein Software-Update vorgenommen ist, geht es an die Installation der notwendigen Software. Hier sind im wesentlichen „hostapd“ und „bridge-utils“ zu erwähnen. Das eine für die WLAN-Access-Point-Funktion und das andere für die Netzwerk-Brücke:

sudo apt-get install hostapd bridge-utils

Ist die Software erfolgreich installiert muss eine Konfigurationsdatei für "hostapd" erstellt werden:

sudo nano /etc/hostapd/hostapd.conf

Dort trägt man folgende Zeilen als Minimal-Konfiguration ein:

# Minimal-Konfiguration
interface=wlan0
bridge=br0
driver=nl80211
country_code=DE
ssid=RasPiBridge
hw_mode=g
channel=1
ieee80211n=1
wmm_enabled=1

Grundsätzlich sollte man ein WLAN immer verschlüsselt betreiben.

# Verschlüsselung
wpa=2
wpa_passphrase={WLANPASSWORT}
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Anschließend speichern und schließen: Strg+O, Return, Strg+X.

Jetzt geht es darum, die Netzwerk-Interfaces und die Brücke zu konfigurieren. Dazu öffnet man die Datei mit den Netzwerk-Einstellungen:

sudo nano /etc/network/interfaces

Bei der folgenden IP-Konfiguration muss man berücksichtigen, dass die Angaben von IP-Adresse usw. hier beispielhaft eingesetzt sind und an das jeweilige Netzwerk angepasst werden müssen. Es wäre auch denkbar, dass „eth0“ und „br0“ ihre IP-Konfiguration per DHCP bekommen. In diesem Beispiel wurden feste IP-Adressen vergeben. Das vereinfacht die spätere Verbindungsaufnahme per SSH und das Netzwerk-Monitoring.

# Localhost
auto lo
iface lo inet loopback
# Ethernet
iface eth0 inet static
address 192.168.168.1
netmask 255.255.255.0
gateway 192.168.168.8
dns-servers 192.168.168.8
# WLAN
allow-hotplug wlan0
iface wlan0 inet manual
# Bridge
auto br0
iface br0 inet static
address 192.168.168.2
netmask 255.255.255.0
gateway 192.168.168.8
dns-servers 192.168.168.8
bridge-ports eth0 wlan0
bridge_fd 0
bridge_stp no
# Default
iface default inet dhcp

Anschließend speichern und schließen: Strg+O, Return, Strg+X.

Dann startet man „hostapd“ testweise mit der erstellten Konfigurationsdatei:

sudo hostapd -dd /etc/hostapd/hostapd.conf

Wenn „hostapd“ mit Fehlermeldungen abbricht, dann hat man einen Fehler gemacht. Die Fehler sind allerdings äußerst vielfältig, weshalb nicht alle erwähnt werden können. In der Regel fehlt der Treiber für den WLAN-Adapter oder er beherrscht den Monitor-Modus nicht. Was auch ein Problem sein kann, wenn man eine andere Distribution als „Raspbian“ verwendet. Auch ein „Minibian“ oder andere abgespeckte Varianten können Probleme machen.

Wenn alles in Ordnung ist, dann läuft das Programm durch und wird nicht beendet. Das heißt, „hostapd“ kehrt nicht zur Befehlseingabe zurück. Mit Strg+C kann man das Programm abbrechen.

Da wir „hostapd“ nicht händisch, sondern automatisch beim Booten und im Hintergrund starten wollen, müssen wir noch eine weitere Konfiguration vornehmen. Dazu müssen wir eine Konfigurationsdatei öffnen und den Start als Daemon (Hintergrund-Start) eintragen.

sudo nano /etc/default/hostapd

Hier trägt man folgende Zeilen ein:

DAEMON_CONF="/etc/hostapd/hostapd.conf"
RUN_DAEMON=yes

Anschließend speichern und schließen: Strg+O, Return, Strg+X.

Um den Raspberry Pi als Man-in-the-Middle zu testen muss man ihn nur noch neu starten:

sudo reboot

Nach dem Neustart müsste es möglich sein, dass die WLAN-Clients den Raspberry Pi als Access Point nutzen und so Zugang zum Netzwerk bekommen. Wenn die WLAN-Verbindung möglich ist, dann kann man den Raspberry Pi als Man-in-the-Middle verwenden.