Android: GrapheneOS, CalyxOS und Co. unter der Lupe – Custom-ROMs Teil1

1. Im BrennpunktAndroid Custom-ROMs

Das Android-Universum hat sich in den letzten Jahren rasant weiterentwickelt. Insbesondere in der Custom-ROM-Szene war bzw. ist einiges in Bewegung. Zu verdanken ist das alternativen Android-Systemen wie GrapheneOS, CalyxOS, /e/, iodéOS, aber auch dem Evergreen LineageOS. Während Nutzer von herkömmlichen Android-Systemen oftmals mit (Hersteller-)Bloatware zu kämpfen haben, sind Custom-ROMs frei davon und hauchen auch älteren Geräten, die vom Hersteller längst nicht mehr mit Updates versorgt werden, ein zweites Leben ein.

In der Artikelserie »Custom-ROMs« möchte ich einige alternative Android-Systeme näher beleuchten. Der Schwerpunkt wird in der Analyse des Datensendeverhaltens liegen. Es wird geprüft, wohin die Custom-ROMs Verbindungen aufbauen und welche Daten dabei übermittelt werden. Die Ergebnisse sollen Aufschluss darüber geben, wie datenschutzfreundlich ein Custom-ROM in der Standardkonfiguration ist und Tipps ableiten, wie sich das »Nach-Hause-Telefonieren« einschränken oder sogar vollständig abschalten lässt.

Im vorliegenden Beitrag möchte ich kurz mein (Geräte-)Setup vorstellen und erörtern, was ich neben dem Datensendeverhalten im Rahmen der Artikelserie betrachten möchte.

Dieser Beitrag ist Teil einer Artikelserie:

2. Geräteauswahl & Custom-ROMs

Für die Analyse unterschiedlicher Custom-ROMs wird natürlich ein Gerät benötigt. Ich habe mich für ein Google Pixel 6a entschieden, das bis Juli 2027 mit (Sicherheits-)Updates versorgt wird und von jedem Custom-ROM unterstützt wird, das ich im Rahmen der Artikelserie betrachten möchte. Aktuell ist ein Test folgender Custom-ROMs geplant:

Eventuell wird es Abweichungen geben oder ein weiteres ROM hinzukommen. Abschließend ist diese Liste daher nicht.

3. Bei der Macht von Root: Magisk

Während der Planung der Artikelserie wurde mir schnell klar: Ohne Root-Rechte geht es nicht. Denn für eine möglichst aussagekräftige Prüfung des Datensendeverhaltens ist es nicht ausreichend, zu analysieren, wohin die Systeme (Daten-)Verbindungen aufbauen, sondern eben auch zu betrachten, was inhaltlich übertragen/empfangen wird. Voraussetzung dafür ist allerdings, dass der TLS-verschlüsselte Datenverkehr der Custom-ROMs eingesehen werden kann. Seit Android 7 ist es ohne Root allerdings praktisch nicht mehr möglich, den TLS-verschlüsselten Datenverkehr »aufzubrechen«. Der Grund: Ab Android-Version 7 vertrauen Apps standardmäßig nicht mehr den selbst installierten Benutzerzertifikaten. Damit der Einblick in den TLS-verschlüsselten Datenverkehr allerdings gelingt, ist es erforderlich, das CA-Zertifikat des Intercepting-Proxys (bspw. mitmproxy oder BurpSuite) auf dem Android-System auszurollen – und zwar als Systemzertifikat. Nur so ist es möglich, den TLS-verschlüsselten Datenverkehr letztendlich beim Mittelsmann (dem Proxy) »aufzubrechen« bzw. einzusehen.

Um Android ein eigenes CA-Zertifikat als Systemzertifikat unterzujubeln, gibt es mehrere Möglichkeiten. Für die Artikelserie habe ich mich für Magisk entschieden – eine Modifikation für Android, die es unter anderem erlaubt, Root-Rechte auf dem System zu erlangen bzw. Benutzerzertifikate als Systemzertifikate auszurollen. Magisk nimmt bei der Installation keine Veränderungen an der /system-Partition vor, sondern integriert sich in das Boot-Image des Androiden. Alle Änderungen (Unroot) lassen sich, ohne Rückstände zu hinterlassen, wieder entfernen.

Der Kuketz-Blog ist spendenfinanziert!

Unabhängig. Kritisch. Informativ. Praxisnah. Verständlich.

Die Arbeit von kuketz-blog.de wird vollständig durch Spenden unserer Leserschaft finanziert. Sei Teil unserer Community und unterstütze unsere Arbeit mit einer Spende.

Mitmachen ➡

3.1 Installation

Die Installation von Magisk setzt allerdings das Patchen (Verändern) des Boot-Images voraus. Nachfolgend möchte ich das kurz für CalyxOS in Kombination mit dem Google Pixel 6a beschreiben. Voraussetzung dafür:

Die Modifikation des Boot-Images erfolgt via Magisk. Dazu ist es erforderlich, das Boot-Image des Custom-ROMs zunächst zu extrahieren. Entpackt daher das bluejay-factory-22404010.zip Zipfile. Die entpackten Dateien beinhalten wiederum ein Zipfile unter /PfadZuEntpacktenDaten/bluejay-tq1a.221205.011/image-bluejay-tq1a.221205.011.zip. Öffnet dieses Zipfile und extrahiert das boot.img, dieses werdet ihr später benötigen.

Befolgt nun zunächst die Installationsanleitung von CalyxOS bis zu jenem Schritt, bei dem man aufgefordert wird, den Bootloader (Lock the Bootloader) wieder zu schließen. Diesen letzten Schritt lässt man aus, bootet CalyxOS und wird dann vom Einrichtungsassistenten begrüßt. Sobald man diesen absolviert hat, wird der Entwicklermodus aktiviert und die folgenden Einstellungen aktiviert (falls nicht bereits aktiv):

  • OEM-Entsperrung
  • USB-Debugging

Anschließend kopiert ihr das boot.img auf euer Android-Gerät und installiert die Magisk-App. Startet Magisk und tippt direkt oben in der App unter »Magisk« auf Installieren und wählt im nächsten Screen Eine Datei auswählen und patchen:

Magisk boot.img

Nach der Auswahl der boot.img-Datei wird Magisk das Boot-Image patchen und wie folgt benennen: magisk_patched-25200_M9J6E.img. Dieses veränderte Boot-Image kopiert ihr zurück auf euren Rechner. Schaltet das Google Pixel 6a nun komplett aus. Anschließend versetzt ihr es in den Fastboot-Mode, indem ihr die Lautstärkenwippe (leiser) und den Power-Button für mehrere Sekunden gleichzeitig drückt. Auf dem Screen erscheint dann »Fastboot Mode« gefolgt von einigen Informationen zu eurem Gerät. Unter »Device state« sollte unlocked stehen, ansonsten könnt ihr das Boot-Image nicht modifizieren. Verbindet das Gerät nun via USB-Kabel mit dem Rechner und flasht das veränderte Boot-Image auf das Google Pixel 6a:

fastboot flash boot magisk_patched-25200_M9J6E.img

Nach einem Neustart ist Magisk nun einsatzbereit. Startet einfach die Magisk-App – so sollte es nun aussehen:

Magisk installiert

Warnung

Bevor ihr Magisk installiert, lest euch bitte die offizielle Installationsanleitung durch. Ich rate übrigens davon ab, Magisk auf einem Gerät zu installieren, das im täglichen Gebrauch ist. Auf Testsystemen ist die Installation zu unterschiedlichen Zwecken sinnvoll bzw. sogar erforderlich. Mit der »Macht von Root« geht allerdings eine große Verantwortung einher, mit der nicht jeder umgehen kann. Die Folge: Die Sicherheit des Android-Systems wird empfindlich geschwächt und insbesondere Banking-Apps werden den Dienst oftmals verweigern. Gerootete Systeme mit offenem Boot-Loader hebeln das Android Sicherheitsmodell aus und sind nicht für den alltäglichen Gebrauch zu empfehlen.

3.2 Module: Trust User Certs

Magisk bietet einige Basisfunktionen, wie bspw. Root-Rechte (MagiskSU). Über Magisk Modules können zusätzliche Funktionen nachgerüstet werden. Auf GitHub sind im Repository Magisk-Modules-Repo einige (aber nicht alle) Module gelistet. Im Rahmen der Artikelserie benötige ich ein spezielles Modul, mit dem Benutzerzertifikate im Speicher für Systemzertifikate abgelegt werden und somit als »vertrauenswürdig« für das System und die darauf installierten Apps gelten. Erreichen lässt sich das mit einem der folgenden Module:

Entscheidend für die Auswahl ist die verwendete Version von Android. Die Installation ist denkbar einfach. Einfach das Zip-File herunterladen, auf das Gerät kopieren und dann über Magisk -> Module -> Aus dem Speicher installieren integrieren:

Magisk Module

4. PCAPdroid

Mit Magisk und dem Modul Magisk Trust User Certs (Android 13) sind nun alle notwendigen Voraussetzungen erfüllt, um den TLS-verschlüsselten Datenverkehr des Systems bzw. der darauf installierten Apps mitzulesen. Damit dies nun gelingt, habe ich mich für die Kombination PCAPdroid und mitmproxy entschieden. Nachfolgend werde ich das Konzept kurz beschreiben.

Ausführliche Anleitung

Matthias hat unter tracktor.it ausführlich beschrieben, wie man das Datensendeverhalten von Apps mit der Kombination PCAPdroid und mitmproxy analysieren kann.

PCAPdroid ist eine quelloffene App, die ebenfalls im F-Droid-Store angeboten wird. Um den Netzwerkverkehr zu erfassen, simuliert PCAPdroid lokal auf dem Gerät eine VPN-Verbindung, durch die alle ein- und ausgehenden Datenpakete geschleust werden. Das funktioniert sogar ohne Root-Rechte, allerdings mit der Einschränkung, dass dann lediglich erfasst wird, wohin das System bzw. Apps Verbindungen hin aufbauen. Um den TLS-verschlüsselten Datenverkehr mitzulesen, ist die Installation eines CA-Zertifikats (bspw. mitmproxy) in den Speicher für Systemzertifikate erforderlich. Diese Aufgabe wird durch Magisk bzw. das Modul Magisk Trust User Certs erfüllt.

Nach der Installation von PCAPdroid hat man nun zwei Möglichkeiten, um den TLS-verschlüsselten Datenverkehr mitzulesen:

  • Direkt auf dem Gerät via PCAPdroid: Seit der Version 1.5.0 erlaubt PCAPdroid das Entschlüsseln/Anzeigen von TLS-Verbindungen direkt innerhalb der App. Dazu nutzt PCAPdroid die Erweiterung PCAPdroid-mitm addon. Die Installation und Inbetriebnahme ist ausführlich im PCAPdroid User Guide beschrieben.
  • Auf einem externen Rechner via mitmproxy: Sofern man das System/Apps professionell analysieren möchte, würde ich zu einem Intercepting-Proxy raten, über den alle aus- und eingehenden Datenpakete geschleust werden. Dazu ist ein Rechner erforderlich, auf dem mitmproxy installiert ist. Folgende Schritte sind notwendig, um den Datenverkehr von PCAPdroid an mitmproxy zu übermitteln bzw. den TLS-verschlüsselten Datenverkehr einzusehen:
    • Sowohl das Android-Gerät als auch der Rechner mit mitmproxy müssen sich im selben Netzwerk befinden
    • Startet mitmproxy mit dem folgenden Befehl
      mitmproxy --mode socks5 --listen-port 8050

      Oder ausführlicher mit Hostnamen inkl. Dump:

      mitmproxy --mode socks5 --listen-port 8050 --showhost -w +output.mitm

      Auslesen des Dumps bzw. Wiedereinlesen in mitmproxy:

      mitmproxy -r output.mitm
    • Startet PCAPdroid und aktiviert unter Einstellungen die Option SOCKS5. Tragt unter Proxy-IP-Adresse die IP-Adresse des Rechners ein, auf dem mitmproxy läuft.
    • Anschließend startet ihr PCAPdroid und navigiert mittels Chrome auf die URL http://mitm.it. Sofern mitmproxy läuft und erreichbar ist, wird eine Website ausgeliefert, über die ihr euch das CA-Zertifikat herunterladen könnt. Wählt unter »Android« das Zertifikat Get mitmproxy-ca-cert.cer und speichert es auf eurem Android-Gerät.
    • Das CA-Zertifikat müsst ihr nun in den Zertifikatsspeicher von Android installieren. Öffnet dazu die Einstellungen -> Sicherheit -> Weitere Sicherheitseinstellungen -> Verschlüsselung & Anmeldedaten -> Ein Zertifikat installieren -> CA-Zertifikat. Wählt im Dateisystem dann das Zertifikat mit der Bezeichnung »mimproxy-ca-cert-cer.crt« aus.
    • Ganz wichtig: Danach müsst ihr das System neu starten, damit das Magisk Modul Magisk Trust User Certs das Benutzerzertifikat in den Speicher der Systemzertifikate kopiert bzw. verankert. Ohne diesen Schritt, erhaltet ihr lediglich eine Fehlermeldung, dass das System/App dem Proxy-Zertifkat nicht vertraut.
    • Nach dem Neustart von Android startet ihr erneut PCAPdroid und könnt direkt damit beginnen, den Netzwerkverkehr in das VPN umzuleiten bzw. den Datenmitschnitt starten. PCAPdroid wird dann alle aus- und eingehenden Datenpakete an den mitmproxy weiterleiten.
    • Sofern alles korrekt umgesetzt ist, könnt ihr via mitmproxy nun auch TLS-verschlüsselten Datenverkehr einsehen. Eine Ausnahme gibt es allerdings: Sofern das System/App Certificate-Pinning verwendet, müsst ihr tiefer in die Trickkiste greifen und bspw. die Kombination Frida + Objection nutzen. Das ist im Beitrag »Android: TLS-Verifikation und Certificate-Pinning umgehen« ausführlich beschrieben.

PCAPdroid

4.1 Browser: Google Chrome & Firefox

Seit der Version 99 nutzt Chrome Certificate Transparency. Sobald man versucht den TLS-verschlüsselten Datenverkehr mittels (Intercepting-)Proxy mitzulesen, erscheint in Chrome die Fehlermeldung:

ERR_CERTIFICATE_TRANSPARENCY_REQUIRED

Damit das Mitlesen des TLS-Verkehrs auch innerhalb Chrome gelingt, muss eine Sicherheitseinstellung des Browsers angepasst werden. Über die Adresszeile wird chrome://flags/ aufgerufen und dort nach dem Parameter Enable Certificate Transparency gesucht. Der Parameter muss auf Disabled gestellt werden. Danach ist das Mitlesen von TLS-Verbindungen in Chrome wieder möglich.

Firefox hingegen ignoriert das ausgerollte CA-Zertifikat von mitmproxy (Systemzertifikate) standardmäßig, weil intern ein eigener Zertifikatsspeicher verwendet wird. Hier kann man sich Abhilfe verschaffen, indem innerhalb Firefox die Entwickleroptionen aktiviert werden. Dazu über Einstellungen bei »About Firefox/Über Firefox« siebenmal auf das Firefox-Logo tippen. Danach geht es wieder eine Ebene zurück und unter Secret Settings muss der Schieberegler bei Use third party CA certificates aktiviert werden.

4.2 Kompletter Datenmitschnitt

Manchmal kann es sinnvoll sein, den kompletten Datenverkehr des Geräts mitzuschneiden. Auch dafür bietet PCAPdroid eine Funktion. Mittels der Option UDP-Exporter kann bspw. der gesamte Datenverkehr an einen entfernen UDP-Server bzw. Rechner mit Wireshark übermittelt werden. Damit das gelingt, muss auf dem entfernten Rechner vor Beginn der Aufzeichnung, das Pyhton-Skript udp_receiver.py gestartet werden:

python udp_exporter.py -p 1234 | wireshark -k -i -

5. Testkriterien

Nach dem technischen Vorgeplänkel wird es nun spannend. Neben der Analyse des Datensendeverhaltens möchte ich noch weitere Kriterien prüfen. Diese sind wie folgt:

  • Custom-ROM: Wer steckt hinter dem Custom-ROM? Welche Geräte werden unterstützt?
  • Installationsvorgang: Wie simpel ist die Installation, gerade auch im Hinblick auf weniger versierter Anwender? Diesen Punkt kann ich natürlich nur aus Perspektive des Google Pixel 6a bewerten/betrachten.
  • Verfügbarkeit (Sicherheits-)Updates: Wie schnell sind die monatlichen (Sicherheits-)Updates verfügbar? In welcher Kontinuität werden Updates/Patches bereitgestellt?
  • Standard-Apps: Nicht nur das System als solches, sondern auch einige Standard-Apps, wie vorinstallierte Browser, sollen auf ihr Datensenderverhalten geprüft werden.
  • microG/Sandboxed Google Play: Einige Custom-ROMs bieten die Möglichkeit, die Google-(Play-)Services Alternativen microG oder Sandboxed Google Play (ausschließlich GrapheneOS) zu aktivieren/installieren. Interessant ist nun, wie sich das Datensendeverhalten der Custom-ROMs ändert, wenn diese Funktionen aktiviert werden.
  • Sicherheit/Datenschutz: Welche zusätzlichen Anstrengungen bezüglich Sicherheit/Datenschutz werden von den Custom-ROMs implementiert?

Hinweis

Diese Liste ist nicht abschließend und kann sich im Laufe der Artikelserie auch verändern.

6. Fazit

Das Setting für die Artikelserie »Custom-ROMs« steht. Auf dem Google Pixel 6a werkelt bereits CalyxOS inkl. einem gepatchten Boot-Image durch Magisk. Den TLS-verschlüsselten Datenverkehr leite ich via PCAPdroid an mitmproxy weiter, um ihn dort zu analysieren. Im nächsten Teil wird es dann spannend: CalyxOS kommt auf den Prüfstand und muss dort zeigen, wie es um die Sicherheit und den Datenschutz bestellt ist.

Bildquellen:

Phone: Those Icons from www.flaticon.com is licensed by CC 3.0 BY

Über den Autor | Kuketz

Mike Kuketz

In meiner freiberuflichen Tätigkeit als Pentester / Sicherheitsforscher (Kuketz IT-Security) schlüpfe ich in die Rolle eines »Hackers« und suche nach Schwachstellen in IT-Systemen, Webanwendungen und Apps (Android, iOS). Des Weiteren bin ich Lehrbeauftragter für IT-Sicherheit an der Dualen Hochschule Karlsruhe, sensibilisiere Menschen in Workshops und Schulungen für Sicherheit und Datenschutz und bin unter anderem auch als Autor für die Computerzeitschrift c’t tätig.

Der Kuketz-Blog bzw. meine Person ist regelmäßig in den Medien (heise online, Spiegel Online, Süddeutsche Zeitung etc.) präsent.

Mehr Erfahren ➡

SpendeUnterstützen

Die Arbeit von kuketz-blog.de wird zu 100% durch Spenden unserer Leserinnen und Leser finanziert. Werde Teil dieser Community und unterstütze auch du unsere Arbeit mit deiner Spende.

Folge dem Blog

Wenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:

Bleib aktuell ➡


Diskussion

1 Ergänzungen zu “Android: GrapheneOS, CalyxOS und Co. unter der Lupe – Custom-ROMs Teil1”

  1. Comment Avatar Anonymous sagt:

    Sandboxed Google Play lässt sich auch in der Custom-ROM ProtonAOSP aktivieren.
    Übrigens ist Sandboxed Google Play in Kooperation mit ProtonAOSP entwickelt worden: https://twitter.com/GrapheneOS/status/1520193441770188810

HilfeWenn du konkrete Fragen hast oder Hilfe benötigst, sind das offizielle Forum oder der Chat geeignete Anlaufstellen, um dein Anliegen zu diskutieren. Per E-Mail beantworte ich grundsätzlich keine (Support-)Anfragen – dazu fehlt mir einfach die Zeit. Kuketz-Forum

Abschließender Hinweis

Blog-Beiträge erheben nicht den Anspruch auf ständige Aktualität und Richtigkeit wie Lexikoneinträge (z.B. Wikipedia), sondern beziehen sich wie Zeitungsartikel auf den Informationsstand zum Zeitpunkt des Redaktionsschlusses.

Kritik, Anregungen oder Korrekturvorschläge zu den Beiträgen nehme ich gerne per E-Mail entgegen.