E-Rezept-App Gematik: SafetyNet-Checks und Tracking via Google Firebase Analytics
Der vierte Test der App-Aktionswochen befasst sich mit der Android- und iOS-App E-Rezept (Version 1.0.11/1.0.12). Die App kann in Kombination mit einem NFC-fähigen Smartphone Rezepte via Q-Code einlesen, speichern und dann in der Apotheke einlösen. Weitere Infos zur Funktion und eine FAQ stellt die Gematik bereit.
Ein Kurzcheck soll nun eine Einschätzung darüber geben, wie datenschutzfreundlich die E-Rezept-App ist. Dazu wird zunächst das Datensendeverhalten der App analysiert und anschließend ein Blick in die Datenschutzerklärung geworfen.
Nachfolgend ist das Datensendeverhalten der Android-Version dargestellt. Da beim iOS-Gerät das TLS-Certificate-Pinning nicht umgangen werden kann, kann ich keine genaue Aussage zur iOS-Variante treffen.
Vorbemerkung (für technisch Interessierte | Nerds)
Vorab ist festzuhalten, dass die Verbindungen der App mit TLS-Certificate-Pinning abgesichert sind. Mit den üblichen Methoden via Frida und Objection (android sslpinning disable) kann das Cert-Pinning allerdings umgangen und anschließend der TLS-verschlüsselte Datenverkehr mitgelesen werden.
App-Start: Unmittelbar nach dem Start (keine Interaktion des Nutzers)
Unmittelbar nach dem Start der App werden keine Verbindungen initiiert.
Einrichtung: Passwortvergabe / Gerätesicherheit
Ein Willkommensscreen begrüßt den Nutzer und fordert zu einer Vergabe eines Passworts/Kennworts auf. Alternativ kann auch die Gerätesicherung via Fingerabdruck, Wischmuster etc. als Schutz dienen. Das Kennwort wird dann jedes Mal, wenn die App geöffnet wird, abgefragt.
Nach der Vergabe des Kennworts hat man als Nutzer die Möglichkeit in einen Tracking- bzw. Analysedienst einzuwilligen. Dieser erfasst nach einem Opt-In »anonym« Nutzerströme, Abstürze etc. Ich belasse den Schieberegler auf Aus
. Zum Schluss muss man noch der Datenschutzbestimmung und den Nutzungsbedingungen, jeweils mit dem Setzen eines Häkchens, zustimmen und auf Bestätigen
tippen. Danach ist die Erst-Einrichtung zunächst abgeschlossen.
[1] Unmittelbar nach dem Tippen auf Bestätigen
wird eine Verbindung zu Google initiiert, um eine Geräteprüfung via SafetyNet-API durchzuführen [www.googleapis.com]:
POST /androidantiabuse/v1/x/create?alt=PROTO&key=AIzaSyBofcZsgLSS7BOnBjZPEkk4rYwzOIz-lTI HTTP/1.1 Content-Type: application/x-protobuf User-Agent: DroidGuard/213614039 Content-Length: 963 Host: www.googleapis.com Connection: close Accept-Encoding: gzip, deflate attestcom.google.android.gms BOARDMSM8953. BOOTLOADER MSM8998_SAGIT2.0_20180328145542 BRANDXiaomi CPU_ABI arm64-v8a CPU_ABI2 FINGERPRINTJxiaomi/sagit/sagit:8.0.0/OPR1.170623.026/8.1.10:user/release-keys MODELMi 6 [...]
[2] Und eine weitere Verbindung zu Google bzw. der SafetyNet-API [www.googleapis.com]:
POST /androidcheck/v1/attestations/attest?alt=PROTO&key=AIzaSyBcBLNLTZYhamznury3whfQ-FJ9lAxh7kM HTTP/1.1 Host: www.googleapis.com Content-Length: 22634 X-Android-Package: de.gematik.ti.erp.app X-Android-Cert: FC7451B63B200EA1F1E37B5E1BBD3DE0B79B0A44 Content-Type: application/x-protobuf User-Agent: SafetyNet/213614039 (sagit QQ3A.200805.001); gzip Accept-Encoding: gzip, deflate Connection: close [zusätzlich codiert/verschlüsselt]
Es werden jede Menge Geräteinformationen an Google übermittelt. Da die zweite Übertragung zusätzlich codiert/verschlüssel ist, kann ich leider keine Aussage darüber treffen, welche Informationen an Google übermittelt werden. Da mich die E-Rezept-App anschließend über eine »fehlende Gerätesicherung« informiert, werden in jedem Fall Informationen übermittelt, wie und ob das Gerät mit einem Code, Wischmuster oder Biometrie geschützt ist. Dieser Hinweis lässt sich über einen Schieberegler
Diesen Hinweis in Zukunft nicht mehr anzeigen
deaktivieren.
Anschließend werden erneut Daten an die Google SafetyNet-API übermittelt und geprüft, ob das Gerät gerootet ist – ja, ist es. Es handelt sich um mein Testgerät. Als Hinweis erscheint die Meldung:
Man kann das »erhöhte Risiko« allerdings in Kauf nehmen, in dem der Schieberegler
Ich nehme das erhöhte Risiko zur Kenntnis und möchte dennoch fortfahren
aktiviert wird. Nach diesem Vorgeplänkel befindet man sich nun in der Hauptansicht der App.
Während der Nutzung
Über Aktualisieren
möchte ich nun meine Gesundheitskarte einbinden. Das wird mir allerdings mit dem folgenden Hinweisfenster quittiert:
Nachvollziehen kann ich das nicht, da mein Gerät alle Voraussetzungen erfüllt – ich habe sogar extra ein Xiaomi Mi 6 reaktiviert, das über einen NFC-Chip verfügt. Eventuell verweigert die App aufgrund des negativen SafetyNet-Check (Gerät gerootet) seinen Dienst. Das ist allerdings lediglich eine Vermutung.
Ansonsten kann ich keine weitere Aktion innerhalb der App ausführen. Die Verknüpfung mit der Gesundheitskarte funktioniert nicht und ein E-Rezept liegt mir leider nicht vor. Ich kann nur nach Apotheken suchen.
[1] Bei der Suche nach einer Apotheke initiiert die App eine Verbindung zur Gematik [apovzd.app.ti-dienste.de]:
GET /api/Location?name=Karlsruhe HTTP/1.1 Host: apovzd.app.ti-dienste.de X-Api-Key: R8FeZZqd438eTtzoELyx3A== Accept-Encoding: gzip, deflate User-Agent: okhttp/4.9.0 Connection: close
[2] Über Einstellungen
aktiviere ich probeweise mal das Tracking. Eine Aktivierung löst dann nach jeder Aktion, die der Nutzer innerhalb der App ausführt, eine Verbindung zu Gematik aus [gematik.piwik.pro]:
GET /piwik.php?rand=53447&idsite=3d2710c5-c7fb-416a-9ae5-0ff5d22521b4&rec=1&apiv=1&send_image=0&cdt=2021-10-12%2009%3A36%3A38%2B0200&action_name=screen%2FPrescriptions&_cvar=%7B%221%22%3A%5B%22Platform%22%2C%22Xiaomi%20Mi6%22%5D%2C%222%22%3A%5B%22OS%20version%22%2C%22Dalvik%5C%2F2.1.0%20%28Linux%3B%20U%3B%20Android%2010%3B%20Mi%206%20Build%5C%2FQQ3A.200805.001%29%22%5D%2C%223%22%3A%5B%22App%20version%22%2C%221.0.11%22%5D%7D&_id=37b2dbfbfc62474b&url=http%3A%2F%2Fde.gematik.ti.erp.app%2Fscreen%2FPrescriptions HTTP/1.1 User-Agent: Dalvik/2.1.0 (Linux; U; Android 10; Mi 6 Build/QQ3A.200805.001) Host: gematik.piwik.pro Connection: close Accept-Encoding: gzip, deflate
Das Tracking erfolgt datenschutzfreundlich über Matomo.
Ich habe mich dann noch etwas durch die App getippt und einfach auch mal gewartet. Dann fiel mir eine Verbindung zu Google auf.
[3] Es findet ein Verbindungsaufbau zu Google statt, bei dem Google Firebase Analytics mit Daten beliefert wird [firebaselogging.googleapis.com]:
POST /v0cc/log/batch?format=json_proto3 HTTP/1.1 User-Agent: datatransport/2.3.3 android/ Content-Type: application/json Accept-Encoding: gzip, deflate Host: firebaselogging.googleapis.com Connection: close Content-Length: 850 { "logRequest":[ { "requestTimeMs":1634024583553, "requestUptimeMs":608712125, "clientInfo":{ "clientType":"ANDROID_FIREBASE", "androidClientInfo":{ "sdkVersion":29, "model":"Mi 6", "hardware":"qcom", "device":"sagit", "product":"lineage_sagit", "osBuild":"QQ3A.200805.001", "manufacturer":"Xiaomi", "fingerprint":"xiaomi/sagit/sagit:8.0.0/OPR1.170623.026/8.1.10:user/release-keys", "locale":"de", "country":"DE", "mccMnc":"26201", "applicationBuild":"23" } }, "logSourceName":"FIREBASE_ML_SDK", "logEvent"[ { "eventTimeMs":1634024553369, "eventUptimeMs":608681941, "sourceExtension":"ClgKFWRlLmdlbWF0aWsudGkuZXJwLmFwcBICMjMiBjE3LjAuMCoCTkFCBWRlLURFSiRlNzI2MjhiZC02ZjdjLTQ3ZjQtOWFjYi1lYzFhNDk4ZjJiNTVYAWgKEBboAwI6BBICCAU=", "timezoneOffsetSeconds":7200, "networkConnectionInfo":{ "networkType":"WIFI", "mobileSubtype":"UNKNOWN_MOBILE_SUBTYPE" } } ], "qosTier":"DEFAULT" } ] }
Zunächst ist nicht direkt ersichtlich, dass die Übermittlung in Verbindung mit der E-Rezept-App steht. Entfernen wir doch einfach mal die Base64-Codierung vom Parameter sourceExtension
:
Codiert:
ClgKFWRlLmdlbWF0aWsudGkuZXJwLmFwcBICMjMiBjE3LjAuMCoCTkFCBWRlLURFSiRlNzI2MjhiZC02ZjdjLTQ3ZjQtOWFjYi1lYzFhNDk4ZjJiNTVYAWgKEBboAwI6BBICCAU=
Entcodiert:
de.gematik.ti.erp.app23"17.0.0*NABde-DEJ$e72628bd-6f7c-47f4-9acb-ec1a498f2b55Xh
Der String de.gematik.ti.erp.app
steht stellvertretend für den Package-Name der E-Rezept-App. Es findet also ein Tracking via Google Firebase Analytics statt, obwohl das Tracking deaktiviert ist. Diese Beobachtung ist sehr interessant, da Exodus Privacy keine Tracking-Code-Signaturen in der Version 1.0.11 (Android) finden konnte.
Update
13.10.2021: Izzy hat die E-Rezept-App mit seinem Library-Checker geprüft und folgende Tracker gefunden:- Firebase Data Transport (/com/google/android/datatransport): NonFreeNet
- Google Mobile Services (/com/google/android/gms): NonFreeDep
- ML Kit (/com/google/mlkit): NonFreeDep
Diese Tracker hat Exodus Privacy noch nicht in seiner Datenbank bzw. weist sie nicht aus.
Datenschutzerklärung
Die über den Google PlayStore verlinkte Datenschutzerklärung informiert den Nutzer relativ transparent über den Umgang bzw. die Verarbeitung der Daten. Allerdings sind die Angaben leider nicht vollständig. Unter Ziffer »3.7. Werden meine Daten analysiert?« steht:
Es findet grundsätzlich keine Analyse Ihres Nutzungsverhaltens oder Ihrer Daten statt. Sie können jedoch zu der Weiterentwicklung der App beitragen, indem Sie in der App der Erhebung und Verarbeitung anonymer Nutzerdaten zustimmen. Ohne diese Zustimmung findet kein Analyse statt.
Wie aufgezeigt fließen auch ohne Zustimmung Daten an Google Firebase Analytics ab.
Und unter Ziffer »7. Übermittlung in Drittländer« wird Google nicht genannt. Sowohl der SafetyNet-Check, als auch Google Firebase Analytics löst eine Datenübermittlung an Google aus.
Fazit
Leider konnte ich die App nur oberflächlich testen, da sie auf meinem Testgerät den weiteren Dienst verweigert hat. Nach der Analyse und der Durchsicht der Datenschutzerklärung entsteht bei mir allerdings der Eindruck, dass die Verantwortlichen selbst nicht so genau wissen, wohin die E-Rezept-App Verbindungen aufbaut bzw. Daten übermittelt.
Persönlich würde ich von der Nutzung der App abraten, unter anderem auch deshalb, weil die Rezeptinformationen auf den Servern der Telematik-Infrastruktur zu lesen sind. Beim E-Rezept fehlt die Ende-zu-Ende-Verschlüsselung. Danke, ich verzichte.
Insgesamt hat sich die Gematik bereits in der Vergangenheit (Pannenserie Telematik-Infrastruktur (TI)) nicht gerade mit Ruhm bekleckert:
- Analyse: Warum 80.000 Arztpraxen ihre Verbindung zur Telematik verloren
- Apotheken: Wie Sicherheitsforscher das Impfzertifikats-Portal kompromittierten
- Schutz von Patientendaten: Informatiker befürworten Verfassungsklage
- rC3: Es krankt an der Sicherheit im Gesundheitswesen
- Sicherheitsmängel in Kartenterminals in Arztpraxen und Krankenkassen-Apps
- […]