Flipper Zero WiFi Devboard - Firmware anpassen und kompilieren

Flipper Zero WiFi Devboard

Firmware anpassen und kompilieren

Tomaso Vasella
von Tomaso Vasella
am 09. November 2023
Lesezeit: 17 Minuten

Keypoints

Das ist Flipper Zero

  • Flipper Zero bietet eine Vielzahl an Werkzeugen zum Erforschen und Testen von Funkstandards und Protokollen
  • Eine der bekanntesten Hardware-Erweiterungen für den Flipper Zero ist das WiFi Devboard
  • Kompilieren der Firmware ist einfach für Flipper Zero, aber recht kompliziert für das WiFi Devboard
  • Ist die Entwicklungsumgebung einmal eingerichtet, sind weitere Anpassungen einfach möglich

Flipper Zero ist ein sehr vielseitiges Werkzeug für die Erforschung und das Testen von Funkprotokollen, Zugangskontrollsystemen, Hardware in den Bereichen RFID, RF, Infrarot, HID-Emulation, GPIO, Hardware-Debugging, 1-Wire/iButton, Bluetooth, Wifi und weiteren. Es ist von bekannten Open-Source-Projekten wie Proxmark, HydraNFC, Rubber Ducky, pwnagotchi inspiriert und wird in einem handlichen Formfaktor angeboten. Der Flipper Zero ist schon in seiner Standardkonfiguration mit vielen Funktionalitäten ausgestattet und kann aufgrund seiner Quelloffenheit recht einfach angepasst und erweitert werden. Einerseits können über seine GPIO PINs Hardware-Erweiterungen angeschlossen werden und andererseits stehen verschiedene Firmware-Distributionen als Open Source frei zur Verfügung. Dieser Artikel geht auf die beliebte Hardware-Erweiterung WiFi Devboard und ein und zeigt, wie vorgegangen werden kann, um die entsprechende Software und Firmware anzupassen, zu kompilieren und zu installieren. Alle in diesem Beitrag gezeigten Befehle gelten für Linux-Systeme, lassen sich aber sinngemäss auch auf macOS oder Windows-Systemen durchführen.

Übersicht Firmware

Die Firmware ist das Betriebssystem des Flipper Zero und beinhaltet meistens auch diverse Apps. Neben der offiziellen Version gibt es inzwischen ziemlich viele Alternativen mit verschiedenen Zusatzfunktionen und Anpassungen. Auf Github finden sich sehr viele Ressourcen zu diesen Themen. Eine der nützlichsten Sammlungen ist awesome-flipperzero.

Eine Übersicht der bekanntesten Firmware-Varianten ist in der nachfolgenden Tabelle zusammengefasst.

Name Beschreibung Link
Official Source Code der offiziellen Flipper Zero Firmware https://github.com/flipperdevices/flipperzero-firmware
Unleashed Firmware mit Unterstützung für Rolling Codes, Community-Plugins und weiteren Ergänzungen https://github.com/DarkFlippers/unleashed-firmware
RogueMaster Fork der Unleashed Firmware mit eigenen Grafiken, experimentellen Anpassungen, Plugins und Spielen https://github.com/RogueMaster/flipperzero-firmware-wPlugins
Xtreme Fork der offiziellen Firmware mit aufgeräumtem Code, mehr Erweiterungen und eigenen Assets https://github.com/ClaraCrazy/Flipper-Xtreme
Xvirus Fork der Unleashed Firmware https://github.com/DXVVAY/xvirus-firmware
SquachWare Fork der offiziellen Firmware mit eigenen Grafiken und Anwendungen aus der Community https://github.com/skizzophrenic/SquachWare-CFW
Haisenteck Fork der offiziellen Firmware mit diversen Anpassungen u.a. im Bereich SubGhz https://github.com/haisenteck/flipperzero-Haisenteck
Korai Fork der offiziellen Firmware mit vollständigem BLE-Stack https://github.com/Korai-Labs/Korai

Update-Methoden

Für die Aktualisierung der Firmware gibt es diverse Verfahren:

Firmware kompilieren

Eine Firmware des Flipper Zero besteht normalerweise aus verschiedenen Komponenten: Radio Stack, Hardware Abstraction Layer (HAL), Betriebssystem (OS), Treiber und Anwendungen.

Die meisten Firmware-Distributionen beinhalten das Firmware Build Tool fbt, welches aus der originalen Firmware stammt und im Wesentlichen ein Wrapper für SCons ist. Dieses Tool ist sehr nützlich, weil es eine vorgefertigte Toolchain direkt aus dem Internet beziehen kann und das Kompilieren und Installieren der Flipper Firmware mit einem einfachen Befehl ermöglicht. Am Beispiel der Xtreme Firmware wird nachfolgend gezeigt, wie diese Firmware kompiliert und auf einem Flipper Zero installiert wird.

Als erstes das git Repository klonen, das zurzeit ca. 670 MB gross ist: $ git clone https://github.com/Flipper-XFW/Xtreme-Firmware.git

Einen am USB-Port angeschlossenen Flipper Zero erkennt Linux als Virtual Serial USB Device unter /dev/ttyACM0 (die Zahl kann auch grösser sein), wofür das Kernelmodul cdc_acm zuständig ist.

Mit Hilfe von fbt lässt sich in einem Befehl das Kompilieren mit anschliessender Installation der erzeugten Firmware auf dem Flipper verbinden: ./Xtreme-Firmware/fbt COMPACT=1 DEBUG=0 flash_usb_full

Wenn dieser Befehl das erste Mal ausgeführt wird, lädt fbt als erstes die Toolchain, bestehend aus dem GNU Compiler für ARM und zugehörigen Werkzeugen und Bibliotheken und legt sie unter ./Xtreme-Firmware/toolchain ab. Zusätzlich werden mehrere Submodule, u.a. der FreeRTOS-Kernel, automatisch von Github bezogen. Nun wird die gesamte Firmware als “self-update package” mit allen Ressourcen, d.h. einschliesslich aller Apps, erzeugt und im Verzeichnis ./Xtreme-Firmware/dist/f7-C/ abgelegt. Es werden mehrere Dateien generiert, wobei die Datei firmware.dfu die eigentliche Firmware ist und die Datei resources.tar die Apps und weitere Ressourcen enthält. Falls fbt einen angeschlossenen Flipper findet, wird dieser automatisch aktualisiert. Möchte man nur das Updatepaket erzeugen, ohne es zu installieren, so muss anstatt flash_usb_full die Option updater_package verwendet werden.

WiFi Devboard / ESP32

Die wahrscheinlich bekannteste Hardware-Erweiterung für den Flipper Zero ist das WiFi Devboard. Es bietet eine System-on-a-Chip (SoC) Plattform basierend auf dem Chipsatz ESP32-S2 des Herstellers Espressiv, der 2.4 GHz WLAN-Konnektivität bietet und eine eigene CPU enthält.

WiFi Devboard mit Anschlüssen und Knöpfen

Das Wifi Devboard verwendet eigene Firmware und kann über Apps auf dem Flipper gesteuert werden. Das Board wird über die GPIO-PINs an den Flipper Zero angeschlossen.

Funktionalität

Die Standard-Firmware des WiFi Devboard enthält Black Magic Debug, wodurch Debugging der Flipper Zero Firmware auf Basis des GNU Debuggers (GDB) möglich ist. Das WiFi Devboard agiert dabei als GDB-Server und lässt sich via WiFi oder USB-Schnittstelle ansprechen. Mit der Standard-Firmware stehen keine Funktionalitäten zur WiFi Netzwerkanalyse oder zum Penetration Testing zur Verfügung.

Aktualisierung der Firmware

Standard-Firmware

Die Standard-Firmware des WiFi Devboards ist mit dem micro Flipper Build Tool (uFBT) Python-Modul sehr einfach aktualisierbar. Es wird wie folgt installiert: python -m pip install --upgrade ufbt

Nun wird das Board per USB angeschlossen. Anschliessend den BOOT-Knopf auf dem Board gedrückt halten und dann den RESET-Knopf drücken, anschliessend den BOOT-Knopf loslassen. Das Devboard erscheint nun als Device unter /dev/ttyACM0. Aktualisiert wird die Firmware mit folgendem Befehl: python3 -m ufbt devboard_flash

Anschliessend den RESET-Knopf drücken, die USB-Verbindung trennen und wiederherstellen, womit das Devboard als Serielles Gerät erscheint und bereit ist.

Alternative Firmware

Möchte man das WiFi Devboard für offensive Zwecke verwenden, braucht es entsprechende Firmware. Die bekanntesten sind Marauder, das verschiedene offensive und defensive WiFi-Tools enthält und Evil Portal, das einen Access Point mit Captive Portal zum sammeln von Zugangsdaten realisiert. Beide Repositories beinhalten vorkompilierte .bin Dateien, welche mit dem Marauder Flasher (automatisch) oder mit dem webbasierten Tool https://esp.huhn.me/ installiert werden können. Ausserdem bietet die Xtreme Firmware die Möglichkeit, direkt vom Flipper aus mit einer App die Marauder oder die Evil Portal Firmware auf das WiFi Devboard aufzuspielen, was aber in unseren Tests nicht sauber funktionierte. Auf dem Flipper Zero selbst braucht es Apps zur Interaktion mit dem WiFi Devboard, diese sind in der Xtreme Firmware bereits enthalten.

Bemerkung: Die neusten Versionen von Marauder enthalten inzwischen zwar auch eine Evil Portal Funktion, dies scheint aber eine SD-Karte zu benötigen, die direkt mit dem ESP32 verbunden ist und funktioniert somit nicht mit dem WiFi Devboard.

Quellcode kompilieren und installieren

Möchte man Anpassungen an der Firmware des WiFi Devboards vornehmen, muss man anschliessend den Quellcode kompilieren und die so erzeugte Firmware auf dem Devboard installieren. Die folgenden Abschnitte zeigen am Beispiel der Marauder-Firmware, wie das bewerkstelligt wird.

Installation der Entwicklungstools für Arduino

  1. Als erstes wird die Entwicklungsumgebung (IDE) für Arduino installiert. Dazu gibt es auf der Arduino Website verschiedene Pakete für Linux, macOS und Windows. Beim ersten Start der IDE werden verschiedene Pakete automatisch geladen und installiert.
  2. Nun müssen unter File > Preferences die folgenden “Board manager URLs” hinzugefügt werden:
    • https://dl.espressif.com/dl/package_esp32_index.json
    • https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
      Arduino IDE mit zusätzlichen Board Manager URLs
  3. Als nächstes wird unter Tools > Board > Boards Manager nach esp32 gesucht. Nun beim Suchergebnis “esp32 by Espressif Systems” die Version 2.0.14 auswählen und auf den Knopf INSTALL klicken.
    Installation der ESP32 Board Unterstützung
  4. Nun müssen ein paar Anpassungen der Compiler-Einstellungen vorgenommen werden. Dazu die Datei ~/.arduino15/packages/esp32/hardware/esp32/2.0.14/platform.txt in einem Editor öffnen.
  5. Bei allen folgenden Einstellungen das Flag -w hinzufügen:
    • build.extra_flags.esp32
    • build.extra_flags.esp32s2
    • build.extra_flags.esp32s3
    • build.extra_flags.esp32c3
  6. Bei allen folgenden Einstellungen das Flag -zmuldefs hinzufügen:
    • compiler.c.elf.libs.esp32
    • compiler.c.elf.libs.esp32s2
    • compiler.c.elf.libs.esp32s3
    • compiler.c.elf.libs.esp32c3
  7. Die folgenden Bibliotheken müssen nun als Zip-Dateien von Github heruntergeladen und in der Arduino IDE über das Menu Sketch > Include Library > Add .ZIP Library... installiert werden. Die Arduino IDE kann anschliessend diese Libraries automatisch aktualisieren und zeigt eine Meldung, wenn ein Update verfügbar ist.
  8. Zum Upload der Firmware auf das Devboard wird der Arduino ESP32 Filesystem uploader benötigt. Dazu die jüngste Release herunterladen und mit folgendem Befehl im korrekten Verzeichnis ablegen: unzip ESP32FS-1.1.zip -d ~/Arduino/tools Das Ergebnis sollte dann so aussehen: ~/Arduino/tools/ESP32FS/tool/esp32fs.jar
  9. Nun kann der Quellcode von Marauder heruntergeladen werden: git clone https://github.com/justcallmekoko/ESP32Marauder.git

Endlich kann die Datei esp32_marauder.ino in der Arduino IDE geöffnet werden, wodurch der gesamte Quellcode in der IDE geöffnet wird. Nun die Datei configs.h wählen und im Abschnitt BOARD TARGETS das Kommentarzeichen von der Zeile //#define MARAUDER_FLIPPER entfernen (ca. Zeile 19). Alle anderen Zeilen in diesem Abschnitt sollten auskommentiert sein. Der Quellcode kann nun editiert werden.

Kompiliert wird mit dem Menubefehl Sketch > Verify/Compile. Falls dabei der Fehler ModuleNotFoundError: No module named 'serial' auftritt, so muss das Python-Modul pyserial installiert werden.

Firmware installieren

  1. Zur Installation der Firmware auf dem WiFi Devboard muss dieses an einen USB-Port angeschlossen und dann in den Firmware Download Modus versetzt werden: den BOOT-Knopf auf dem Board gedrückt halten und dann den RESET-Knopf drücken, anschliessend den BOOT-Knopf loslassen.
  2. Nun in der Arduino IDE über das Menu Tools > Port das Devboard auswählen, es sollte als /dev/ttyACM0 (ESP32S2 Dev Module) angezeigt werden.
  3. Im Menu Tools > Board > esp32 den Eintrag ESP32S3 Dev Module auswählen.
  4. Im Menu Tools > Partition Scheme den Eintrag Minimal SPIFFS (1.9 MB App with OTA/190KB SPIFFS) auswählen.
  5. Im Menu Sketch den Befehl Upload wählen, wodurch die Firmware auf das Devboard geschrieben wird. Falls dabei die Fehlermeldung A fatal error occurred: Could not open /dev/ttyACM0, the port doesn't exist erscheint, sollten die Berechtigungen des Ports /dev/ttyACM0 überprüft und ggf. angepasst werden. Anschliessend das Devboard über den RESET-Knopf neu starten und die neue Firmware wird ausgeführt.

Zusammenfassung

Firmware für den Flipper Zero und für das WiFi Devboard selbst zu kompilieren und zu installieren ist durchaus machbar. Die offizielle Firmware für den Flipper enthält ein einfach zu bedienendes Werkzeug, das die Kompilation und Installation sehr einfach macht. Hingegen ist die initiale Einrichtung einer Entwicklungsumgebung für das WiFi Devboard relativ kompliziert und erfordert diverse Bibliotheken, die manuell installiert werden müssen. Ist das einmal gemeistert und alle nötigen Tools installiert, sind künftige Kompilationen und Installationen recht einfach zu bewerkstelligen.

Über den Autor

Tomaso Vasella

Tomaso Vasella hat seinen Master in Organic Chemistry an der ETH Zürich abgeschlossen und ist seit 1999 im Bereich Cybersecurity aktiv. Positionen als Berater, Engineer, Auditor und Business Developer zählen zu seinen Erfahrungen. (ORCID 0000-0002-0216-1268)

Links

Haben Sie Interesse an einem Penetration Test?

Unsere Spezialisten kontaktieren Sie gern!

×
Security Testing

Security Testing

Tomaso Vasella

Das neue NIST Cybersecurity Framework

Das neue NIST Cybersecurity Framework

Tomaso Vasella

Denial of Service Angriffe

Denial of Service Angriffe

Tomaso Vasella

Überwachung des Systemprotokolls

Überwachung des Systemprotokolls

Tomaso Vasella

Sie wollen mehr?

Weitere Artikel im Archiv

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

Sie wollen mehr?

Weitere Artikel im Archiv