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:

E-Rezept-Root

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:

E-Rezept-Anforderung

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:

Unterstütze den Blog mit einem Dauerauftrag! Mitmachen ➡