1. Im Brennpunkt
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.
- Android: GrapheneOS, CalyxOS und Co. unter der Lupe – Custom-ROMs Teil1
- CalyxOS: De-Googled geht anders – Custom-ROMs Teil2
- iodéOS: Datenschutzfreundlich, aber Abstriche bei der Sicherheit – Custom-ROMs Teil3
- LineageOS: Weder sicher noch datenschutzfreundlich – Custom-ROMs Teil4
- DivestOS: Datenschutzfreundlich und erhöhte Sicherheit – Custom-ROMs Teil5
- /e/: Datenschutzfreundlich bedeutet nicht zwangsläufig sicher – Custom-ROMs Teil6
- GrapheneOS: Der Goldstandard unter den Android-ROMs – Custom-ROMs Teil7
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.
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:
- Google Pixel 6a
- CalyxOS-Image für das Google Pixel 6a (bluejay) in der Version
22405000
- Magisk-App (Version Magisk-v25.2)
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
:
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:
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:
- Magisk Trust User Certs (bis einschließlich Android 13)
- Move Certificates (bis einschließlich Android 13)
- ConscryptTrustUserCerts (ab Android 14)
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:
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 unterProxy-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 ZertifikatGet 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.
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
Wenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:
1 Ergänzungen zu “Android: GrapheneOS, CalyxOS und Co. unter der Lupe – Custom-ROMs Teil1”
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-ForumAbschließ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.
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