
Abbildung 1: Der RasPi sitzt im Heimnetzwerk und holt sich die Kopien aller IP-Pakete von der Fritzbox.
Die Magie einer Pipe hilft hier ausnahmsweise nicht: Suricata bricht seine Arbeit ab, sobald kein Datenstrom durch die Pipe fließt, sprich, wenn die Fritzbox im Leerlauf döst. Die Lösung besteht in einem Dummy-Netzadapter, der sich wie ein zweites Loopback-Interface verhält. Konkret holt sich Wget PCAP-Dateien von der Fritzbox und sendet die darin enthaltenen IP-Pakete an das Dummy-Interface. An dieser Dummy-NIC lauscht Suricata und erhält damit alle Pakete in Kopie, die durch die eigene Internet-Leitung fließen. In den Paketen stöbert Suricata nach verdächtigen Inhalten. Der Umweg über das Dummy-Interface bietet den Vorteil, dass sich ohne Umbau weitere Analysewerkzeuge andocken können, etwa Tcpdump.
Suricata sichert seine Ergebnisse im JSON-Format als Textdatei. Die grafische Aufarbeitung übernimmt Evebox: Das Tool zerlegt die JSON-Zeilen, extrahiert die wesentlichen Inhalte und stellt alles schick als Webseite dar.
Fritzbox und Fritzdump
Das angekündigte Bash-Gefummel mit Fritzbox und PCAP haben bereits andere als Skript formuliert und als fritzdump.sh auf Github platziert [2]. Das Zielsystem ist dabei kein IDS, sondern das Monitoring-Paket Ntop-NG, aber der Umbau gestaltet sich überraschend einfach.
Doch zuerst wenden Sie sich dem Dummy-Interface zu. Da Pi OS den NetworkManager mitbringt, klappt die Einrichtung mit einem Einzeiler (Listing 2, erste Zeile). Der Dummy-Netzadapter dient als Bindeglied zwischen Fritzdump und Suricata. Die beiden systemctl-Zeilen am Schluss des Listings stellen sicher, dass der NetworkManager läuft und sich um das neue Interface ids0 kümmert.
Listing 2
Dummy-Interface einrichten
# nmcli con add type dummy ifname ids0 ipv4.method disabled ipv6.method disabled # systemctl enable NetworkManager # systemctl start NetworkManager
Zurück zur Fritzbox: Die muss die versteckte Funktion Paketmitschnitt unterstützen. Das lässt sich schnell prüfen, denn eine passende Fritzbox bietet dazu die Webseite http://fritz.box/html/capture.html an (Abbildung 2). Schlecht sieht es dagegen aus, falls nur ein 404-Fehler zurückkommt.

Abbildung 2: Bietet die Fritzbox einen Paketmitschnitt an, kann das IDS die Pakete abgreifen und analysieren.
Die große Auswahl der Schnittstellen wirft die Frage auf, welche davon wohl die richtige ist? Grundsätzlich untersucht ein IDS die Pakete auf der LAN-Seite, da auf der WAN-Seite Angriffe relativ normal sind. Die Wahl fällt demnach auf die Schnittstelle lan oder wifi0.
Ungünstigerweise hat die Schnittstelle intern noch einen weiteren Namen, den Fritzdump in exakter Schreibweise benötigt. Wenn Sie nicht den HTML-Quellcode durchstöbern möchten, klicken Sie auf der Webseite bei der entsprechenden Schnittstelle auf Start und untersuchen anschließend den Download-Link. Dieser enthält in der URL den Parameter ifaceorminor, gefolgt vom exakten Namen der ausgewählten Schnittstelle.
Zuletzt kommt das Skript an die Reihe. Es liegt bei Github [2] und erfordert nur wenige Anpassungen an seine neue Rolle als Paketzulieferer. Listing 3 zeigt die Installation und das Anpassen des Skripts an das RasPi-IDS. Tragen Sie im Skript fritzdump.sh für die Variable IFACE den Interface-Namen aus dem vorherigen Abschnitt ein.
Listing 3
Paketweiterleitung
# apt install tcpreplay # wget https://raw.githubusercontent.com/ntop/ntopng/dev/tools/fritzdump.sh # sed -i -e 's/ntopng.*/nice tcpreplay --mbps 1000 -i ids0 -/' fritzdump.sh # install --mode=755 fritzdump.sh /usr/bin/ # fritzdump.sh dslf-config Fritzbox-Passwort # systemctl restart suricata # tcpdump -nnli ids0
Das Sed-Kommando aus Zeile 3 entfernt kurzerhand Ntop-NG und ersetzt es durch Tcpreplay, ein Werkzeug, das Pakete aus PCAP-Dateien wieder ins Netz einspielt. Dabei gehen die Pakete über das Dummy-Interface hinaus und erreichen so Suricata. Da Tcpreplay viel CPU-Power verbrät, bremst Nice diesen Hunger etwas und lässt das Gesamtsystem weniger träge erscheinen.
Sobald die Vorbereitungen abgeschlossen sind, dürfen Sie fritzdump.sh und Suricata starten (Zeile 5 und 6). Das Skript erwartet den Benutzernamen und das Kennwort der Fritzbox als Kommandozeilenargument. Melden Sie sich an Ihrer Fritzbox ausschließlich per Passwort an, verwenden Sie für das Skript den Benutzer dslf-config oder fritz3103.
Das Skript beginnt sogleich damit, Pakete zur Dummy-NIC zu schaufeln. Ob das funktioniert, kann Tcpdump bestätigen, das die Pakete in der Konsole abbildet (Zeile 7). Damit Fritzdump nach einem Reboot seine Arbeit wieder aufnimmt, benötigt es einen Eintrag in der Datei /etc/rc.local vor der finalen Anweisung exit.
Regelwerk
In der Voreinstellung nutzt das IDS alle verfügbaren Signaturen, also auch solche von in Heimnetzen unüblichen Protokollen. Die Untersuchung der IP-Pakete durchläuft also unnötig viele Kontrollen und macht das IDS träge. Schlimmer noch: Manche Signaturen bemängeln sogar unerwartete Werte im TCP-Header und blähen damit die Log-Datei eve.json auf. Pro Tag wächst diese Datei dann um etwa 500 MByte an – das ist für das RasPi-IDS viel zu groß.





