Ada: Gesundheits-App mit Facebook-Tracker

Am dritten Tag der App-Review-Week wird die Android-App Ada (Version 2.48.0) einem Kurzcheck unterzogen – eine Gesundheits-App, die eine Vielzahl von körperlichen und seelischen Beschwerden bzw. Erkrankungen anhand von Fragen erkennen kann. Beginnen wir mit den Netzwerkverbindungen, die Ada während der Nutzung aufbaut.

App-Start: Unmittelbar nach dem Start (keine Interaktion des Nutzers)

[1] Unmittelbar nach dem Start der App kontaktiert die App Facebook. Dabei meldet sich das Gerät praktisch bei der Gegenstelle an, damit Informationen, die bei der App-Nutzung gesammelt werden, dann später an Facebook übermittelt werden können [graph.facebook.com]:

POST /v3.3/1762502554034645/activities HTTP/1.1
User-Agent: FBAndroidSDK.5.0.1
Accept-Language: de_DE
Content-Type: application/x-www-form-urlencoded
Content-Encoding: gzip
Host: graph.facebook.com
Connection: close
Accept-Encoding: gzip, deflate
Content-Length: 538

[Verschlüsselt]

Facebook hat mit der Veröffentlichung der SDK-Version 5.x offenbar eine zusätzliche Verschlüsselung der übertragenen Daten eingeführt. Daher habe ich versucht, die Menge an übertragenen Daten mit anderen Apps zu vergleichen, die noch das SDK 4.x einsetzen. In der SDK-Version 4.x wurde unter anderem Folgendes übermittelt:

  • Google-Advertising-ID: advertiser_id = c3639f11-626a-4692-9574-6a0f632e1ea3
  • Ob Ad-Tracking aktiviert / erlaubt ist: advertiser_tracking_enabled = true
  • Ein Identifier: anon_id = XZce953baa-18a8-42e0-82ad-2d1b3866fe63
  • Ob das App-Tracking aktiviert / erlaubt ist: application_tracking_enabled = true
  • Weitere Informationen:
    • Paketname der App: also hier dann bspw. com.ada.app
    • Versionsnummer der App: 2.48.0
    • Android-Versionsnummer: 9
    • Gerätemodell: Mi A1
    • Länderkennung: de_DE
    • Zeitzone: MESZ, Europe/Berlin

Aufgrund der zusätzlichen Verschlüsselung ist nicht klar, ob auch bei Version 5.x diese Daten übermittelt werden – persönlich würde ich dies annehmen. Davon abgesehen ist die Einbindung von Facebok-Bausteinen (SDK) hinsichtlich der Privatsphäre im Grunde höchst bedenklich. Allein die Übermittlung der Google-Advertising-ID genügt im Grunde genommen, dass Facebook nun eine Verknüpfung zwischen Facebook-Nutzer und den übermittelten Daten herstellen kann. Der Grund: Auch die Facebook-App (sofern installiert) liest die Google-Advertising-ID aus. Damit hat Facebook anschließend einen Identifier, den sie einer Person exakt zuordnen können.

Wie wir später noch sehen werden, kommuniziert die App mit der Gegenstelle »graph.facebook.com im Verlauf der App-Nutzung übrigens regelmäßig – auch wenn man überhaupt kein Facebook-Konto hat.

[2] Ebenfalls direkt nach dem Start wird das Marketing- bzw. Tracking-Unternehmen Amplitude kontaktiert und dabei folgende Informationen übermittelt [api.amplitude.com]:

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 4454
Host: api.amplitude.com
Connection: close
Accept-Encoding: gzip, deflate
User-Agent: okhttp/3.12.1

v=2&client=01bef3d4872c06090aac7b331678b1ec&e=[{"event_type":"$identify","timestamp":1569240992481,"user_id":null,"device_id":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","session_id":1569240910889,"uuid":"80df8f04-f76c-4e1a-b9c2-98d2eff3ee6f","sequence_number":6,"version_name":"2.48.0","os_name":"android","os_version":"9","device_brand":"Xiaomi","device_manufacturer":"Xiaomi","device_model":"Mi A1","carrier":"","country":"DE","language":"de","platform":"Android","library":{"name":"amplitude-android","version":"2.20.0"},"api_properties":{"androidADID":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","limit_ad_tracking":false,"gps_enabled":true},"event_properties":{},"user_properties":{"$set":{"insurance":"-","thirdPartyConsent":false,"appLanguageSet":"de-DE","clinicalTrialConsent":false,"loginType":"facebook","locationCountryCode":null}},"groups":{},"group_properties":{},"event_id":3},{"event_type":"$identify","timestamp":1569240992492,"user_id":null,"device_id":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","session_id":1569240910889,"uuid":"f64f738c-9c96-48aa-8f6e-bec2e2d9410c","sequence_number":7,"version_name":"2.48.0","os_name":"android","os_version":"9","device_brand":"Xiaomi","device_manufacturer":"Xiaomi","device_model":"Mi A1","carrier":"","country":"DE","language":"de","platform":"Android","library":{"name":"amplitude-android","version":"2.20.0"},"api_properties":{"androidADID":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","limit_ad_tracking":false,"gps_enabled":true},"event_properties":{},"user_properties":{"$set":{"roles":[]}},"groups":{"roles":[]},"group_properties":{},"event_id":4},{"event_type":"Open.Open","timestamp":1569240992493,"user_id":null,"device_id":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","session_id":1569240910889,"uuid":"88e71b2d-7639-42f1-85c8-dc6443afecd9","sequence_number":8,"version_name":"2.48.0","os_name":"android","os_version":"9","device_brand":"Xiaomi","device_manufacturer":"Xiaomi","device_model":"Mi A1","carrier":"","country":"DE","language":"de","platform":"Android","library":{"name":"amplitude-android","version":"2.20.0"},"api_properties":{"androidADID":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","limit_ad_tracking":false,"gps_enabled":true},"event_properties":{},"user_properties":{},"groups":{},"group_properties":{},"event_id":4},{"event_type":"Welcome.ViewWelcome","timestamp":1569240992644,"user_id":null,"device_id":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","session_id":1569240910889,"uuid":"0fb29a7a-fdbe-4636-ab69-c298d0389dc8","sequence_number":9,"version_name":"2.48.0","os_name":"android","os_version":"9","device_brand":"Xiaomi","device_manufacturer":"Xiaomi","device_model":"Mi A1","carrier":"","country":"DE","language":"de","platform":"Android","library":{"name":"amplitude-android","version":"2.20.0"},"api_properties":{"androidADID":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","limit_ad_tracking":false,"gps_enabled":true},"event_properties":{"accountType":""},"user_properties":{},"groups":{},"group_properties":{},"event_id":5}]&upload_time=1569240993861&checksum=e095c453e4821135863b46b78b9fdeee

Mal etwas aufgeschlüsselt:

  • Google-Advertising-ID: device_id = a6d89b01-cd12-4f1f-96a2-3c4de090c02c
  • Versionsnummer der App: version_name = 2.48.0
  • Android-Versionsnummer: os_version = 9
  • Gerätemodell: device_brand = Xiaomi / device_model = Mi A1
  • Ob das App-Tracking aktiviert / erlaubt ist: limit_ad_tracking = false
  • GPS aktiv: gps_enabled = true
  • LoginType: Facebook (wie auch immer der Tracker darauf kommt)

Registrierung: Anmeldung via E-Mail-Adresse

Nach dem Tippen auf »Ich möchte mich neu registrieren« war ich für einen Augenblick schockiert:

  • Über Facebook registrieren
  • Mit E-Mail-Adresse registrieren

Eine Gesundheits-App, die einen Login via Facebook zulässt bzw. ermöglicht? Angesichts der Datenskandale, in die Facebook verwickelt war / ist und der Tatsache, dass es sich um eine Gesundheits-App handelt, ist ein Login via Facebook verantwortungslos. Eigentlich wollte ich an dieser Stelle den Test schon abbrechen – habe mich dann aber für die Registrierung per E-Mail entschieden – Ada nutzt zusätzlich Certificate-Pinning:

POST /api/ada/signup/email_check HTTP/1.1
authorization: Basic YWRhOjl4Q0dqZFJVcEJaVlVHdzJjVUROcTd2S3JCckFNQUU0
accept: application/json;charset=utf-8
user-agent: ada-api-js
x-ada-platform: android
x-ada-app-version: 2.48.0
Content-Type: application/json
Content-Length: 31
Host: prod-auth-4.adahealth.net
Connection: close
Accept-Encoding: gzip, deflate

{"email":"test@tutanota.de"}

Danach soll ich noch ein Passwort vergeben und anschließend in folgende drei Bedingungen einwilligen bzw. ein Häkchen setzen:

  • Über 16 Jahre
  • Nutzungsbedingungen gelesen und akzeptiert
  • Datenschutzrichtlinie gelesen und akzeptiert (Daten an zwei Tracker sind hier aber schon abgeflossen)

Danach soll man sich noch entscheiden, ob

  • Ada relevante Behandlungsoptionen anzeigen soll
  • Ada den App-Nutzer zu klinischen Forschungsprojekten kontaktieren darf

[3] Zu Testzwecken setze ich beide Häkchen und tippe auf Jetzt registrieren. Die Registrierung triggert gleich zwei Tracking-Anbieter. Nochmal Amplitude und den Tracker von Adjust. An Adjust, eine Analysefirma mit Hauptsitz San Francisco (USA), werden eine ganze Reihe von Informationen übermittelt [app.adjust.com]:

  • device_manufacturer: Xiaomi
  • android_uuid: 0e057325-08cf-4c30-a394-85d09486fa87
  • referrer (Installationsquelle): Google Play Store
  • Google Advertising-ID: a6d89b01-cd12-4f1f-96a2-3c4de090c02c
  • os: Android
  • Displayauflösung: 1080×1920
  • tracking_enabled: 1
  • hardware_name: lineage_tissot-userdebug+9+PQ3A.190705.003+0ae0a9df12
  • package_name: com.ada.app
  • app_version: 2.48.0
  • device_name: Mi A1
  • os_version: 9
  • cpu: arm64-v8a
  • […]

Genug Informationen, um den Nutzer App-übergreifend zu identifizieren – Adjust ist in einer Vielzahl von Apps integriert.

[4] Danach werden alle Angaben auch noch an Ada übermittelt [prod-auth-4.adahealth.net]:

POST /api/ada/signup HTTP/1.1
authorization: Basic YWRhOjl4Q0dqZFJVcEJaVlVHdzJjVUROcTd2S3JCckFNQUU0
accept: application/json;charset=utf-8
user-agent: ada-api-js
x-ada-platform: android
x-ada-app-version: 2.48.0
Content-Type: application/json
Content-Length: 178
Host: prod-auth-4.adahealth.net
Connection: close
Accept-Encoding: gzip, deflate
Cookie: route=8e7a3b98e7407099448b7ae599fccabbfd34cabc

{"email":"test@tutanota.de","password":"securepass1!11!","privacySettings":{"CLINICAL_TRIALS":true,"THIRD_PARTY_CONSENT":true},"location":"DE","region":"01","language":"de-DE"}

Obwohl meine Registrierung bzw. Anmeldung per E-Mail erfolgt und der Facebook-Login-Service nicht genutzt wird, trackt mich Facebook auch weiterhin bei der Nutzung der App.

Fragen nach der Registrierung

Nach der Registrierung soll ich einige Fragen beantworten:

  • Wie heißt du?
  • Männlich / Weiblich
  • Wann wurdest du geboren?

[5] Nach der Eingabe des Geburtstags fällt mir Folgendes ins Auge:

{"stateId":"WHAT_IS_DATE_OF_BIRTH","id":"WHAT_IS_DATE_OF_BIRTH-1569242296327-0","stateMachineIdStack":["MAIN_PROFILE_CREATION"],"answer":{"transitionId":"PROFILE_CREATION_BIRTHDAY",
"label":"Bitte Geburtsdatum wählen","undo":"NONE","type":"DATE_INPUT","perform":"REMOTE","profileName":"Albert","profileSex":"MALE","inputRequired":true,"minimumDate":"1919-09-23T00:00:00Z","maximumDate":"2003-09-23T00:00:00Z",
"tracking":{"eventType":"CreateProfile.SelectBirthday","facebookEventName":"3ProfileCreationSelectBirthday"},"input":"1984-12-31T23:00:00.000Z","accountLabels":[]}}

Unmittelbar danach wird eine Verbindung zu »graph.facebook.com« hergestellt und Daten übermittelt. Leider zusätzlich verschlüsselt, sodass diese nicht einsehbar / analysierbar sind. Ich gehe dann in den Netzwerk-Aufzeichnungen zurück und finde dieses Facebook-Tracking-Event auch bei der Namenseingabe:

[...]"tracking":{"eventType":"CreateProfile.EnterName","facebookEventName":"3ProfileCreationEnterName"},"input":"Albert","accountLabels":[]}}

Weiter geht es dann bei der Auswahl der Versicherung, auch hier wird offenbar via Facebook getrackt:

"tracking":{"eventType":"CreateProfile.SelectInsurance","facebookEventName":"3ProfileCreationSelectInsurance"},"input":"TK","accountLabels":[]}}

Auch die Frage ob ich Raucher bin wird offenbar durch das Facebook-SDK erfasst:

,"tracking":{"eventType":"HealthBackground.AnswerSmokerQuestion","properties":{"value":"NO"},"facebookEventName":"4HealthBGRSelectRFSmokerOption"},"accountLabels":[]}}

Weiter geht es dann mit der Frage nach Bluthochdruck:

"tracking":{"eventType":"HealthBackground.AnswerBloodPressureQuestion","facebookEventName":"4HealthBGRSelectRFBloodPressureOption"},"accountLabels":[]}}

…und abschließend mit der Frage nach Diabetes:

"tracking":{"eventType":"HealthBackground.AnswerDiabetesQuestion","properties":{"value":"NO"},"facebookEventName":"4HealthBGRSelectRFDiabetesOption"},"accountLabels":[]}}

Neuen Fall starten: Diagnose eines Leidens

Zunächst wird gefragt, ob es um mich geht oder um jemand anderen. Danach soll ich eingeben, was mich »am meisten beschäftigt«. Ich gebe zu Testzwecken mal Inkontinenz ein. Das wird dann gleich auch an Ada übermittelt:

GET /api/v1/symptoms?limit=20&query=Inkontinenz&sex=MALE&birthday=1984-12-31 HTTP/1.1
[...]

Aber nicht nur an Ada, sondern gemeinsam mit anderen Informationen auch an den Amplitude-Tracker [api.amplitude.com]:

v=2&client=01bef3d4872c06090aac7b331678b1ec&e=[{"event_type":"Search.SubmitSymptomSearch","timestamp":1569243524778,"user_id":"5d88bb65d9ea5700011cd303","device_id":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","session_id":1569240910889,"uuid":"2fc17a10-4f7c-4418-9922-4e7087e22507","sequence_number":35,"version_name":"2.48.0","os_name":"android","os_version":"9","device_brand":"Xiaomi","device_manufacturer":"Xiaomi","device_model":"Mi A1","carrier":"","country":"DE","language":"de","platform":"Android","library":{"name":"amplitude-android","version":"2.20.0"},"api_properties":{"androidADID":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","limit_ad_tracking":false,"gps_enabled":true},"event_properties":{"profileAge":34,"profileKey":"5d88bd14a7f63d000187bb37","lastUsedAdaCaseKey":"5d88c163a7f63d000187f00f","numberOfAutocompleteSuggestions":9,"submitType":"suggestion","query":"Inkontinenz","accountType":"email","profileSex":"MALE","adaCaseKey":"5d88c163a7f63d000187f00f"},"user_properties":{},"groups":{},"group_properties":{},"event_id":25},{"event_type":"Search.ReceiveSymptomResults","timestamp":1569243525343,"user_id":"5d88bb65d9ea5700011cd303","device_id":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","session_id":1569240910889,"uuid":"9e6e23f0-7454-4489-9b61-202ce0f9bc8b","sequence_number":36,"version_name":"2.48.0","os_name":"android","os_version":"9","device_brand":"Xiaomi","device_manufacturer":"Xiaomi","device_model":"Mi A1","carrier":"","country":"DE","language":"de","platform":"Android","library":{"name":"amplitude-android","version":"2.20.0"},"api_properties":{"androidADID":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","limit_ad_tracking":false,"gps_enabled":true},"event_properties":{"profileAge":34,"profileKey":"5d88bd14a7f63d000187bb37","lastUsedAdaCaseKey":"5d88c163a7f63d000187f00f","refinedSearch":false,"numberOfSymptoms":4,"query":"Inkontinenz","accountType":"email","profileSex":"MALE","engineName":"FINDING_EXACT","adaCaseKey":"5d88c163a7f63d000187f00f"},"user_properties":{},"groups":{},"group_properties":{},"event_id":26}]&upload_time=1569243525800&checksum=993b4f199987b9e1797730587a7593b1

Mal etwas aufgeschlüsselt:

  • Die Suchanfrage: Inkontinenz
  • Account-Type: E-Mail (also nicht per Facebook angemeldet)
  • Geschlecht: Male
  • Eine Ada-Fall-Nummer: 5d88c163a7f63d000187f00f
  • Und auch wieder die eindeutigen Idenfitikationsmerkmale, wie die Google-Advertising-ID

Bei den Symptomen wähle ich mal »Versehentlicher Urinverlust«. Auch diese Information bzw. Auswahl wird gleich an den Amplitude-Tracker übermittelt [api.amplitude.com]:

"finding:UrinaryIncontinence"

Übrigens werden auch dauerhaft Verbindungen zu Facebook aufgebaut und Daten übermittelt – leider sind diese aufgrund der Verschlüsselung nicht einsehbar.

Danach muss ich noch einige sensible Fragen beantworten, wie zum Beispiel, ob ich mich beim Schlafen Einnässe. Nach Beantwortung der Fragen werden alle drei Tracker (Adjust, Amplitude und Facebook) wieder mit Daten beliefert. Im Fall von Facebook bleibt allerdings unklar, um welche Daten es sich handelt. Danach kommt dann die abschließende Diagnose:

Personen mit ähnlichen Symptomen brauchen normalerweise keine sofortige medizinische Hilfe. Ein Arztbesuch innerhalb der nächsten zwei bis drei Wochen ist zu empfehlen. Wenn deine Symptome länger anhalten als erwartet, schlimmer werden oder neue hinzukommen, solltest du allerdings früher einen Arzt aufsuchen.

Insgesamt wird also alles von Ada aufgezeichnet und die drei Tracker werden dauerhaft mit Daten beliefert. An dieser Stelle sollte man sich vor Augen führen, dass Gesundheitsdaten nach EU-DSGVO Art. 9 unter die Kategorie der besonders schützenswerten Daten fallen. Gesundheitsdaten begleiten einen das ganze Leben! Vor diesem Hintergrund ist die Verwendung von Trackern höchst fraglich und aus meiner Sicht verantwortungslos.

Kurzcheck der Datenschutzerklärung

Da ist er wieder, dieser eine Satz in der Datenschutzerklärung, der einfach nur noch abgedroschen klingt, wenn man sich die Realität einmal vor Augen geführt hat:

Der Schutz Ihrer Daten, Privatsphäre und personenbezogenen Daten ist für die Ada Health GmbH („uns”, „unsere” oder „wir”) sehr wichtig. Es ist für uns unerlässlich, dass sich unsere Kunden bei der Nutzung der Leistungen sicher fühlen.

Wem die Privatsphäre seiner Nutzer wichtig ist, der Verzicht auf die Integration von Trackern und Facebook-Diensten. Weiterhin sollen sich die Nutzer bzw. Kunden »sicher fühlen«. Interessante Auslegung, denn zwischen sicher fühlen und sicher sein besteht ein deutlicher Unterschied.

Interessant ist auch folgender Absatz:

Die personenbezogenen Daten, die wir von Ihnen erheben (einschließlich E-Mail-Adressen, die einen Bestandteil unserer potenziellen Marketing-Datenbank bilden), wird im Europäischen Wirtschaftsraum („EWR”) verarbeitet und auf Amazon Web Services (Europe) Cloud Servern gespeichert. Diese Daten können jedoch von Mitarbeitern verarbeitet werden, die außerhalb des EWR tätig sind, die für uns oder für einen unserer Geschäftspartner oder Dienstanbieter arbeiten. Eine vollständige Liste unserer fremden Unterauftragsverarbeiter und Einzelheiten ihrer Datenschutzrichtlinien sind hier zu finden. Länder außerhalb des EWR können nicht das gleiche angemessene Schutzniveau für die Rechte und Freiheiten betroffener Personen in Bezug auf die Verarbeitung personenbezogener Daten erbringen; allerdings erteilen Sie durch Nutzung unserer Leistungen Ihre Einwilligung für die Ada Health GmbH, Ihre personenbezogenen Daten diesen Dritten gegenüber zu offenbaren.

Personenbezogene Daten können bzw. werden also auch von Mitarbeitern außerhalb des EWR verarbeitet bzw. eingesehen. Mit der Einwilligung in die Datenschutzerklärung erteilt der Nutzer sein Einverständnis, dass personenbezogene Daten gegenüber diesen Dritten offenzulegen – mit dem Hinweis, dass nicht das gleiche Schutzniveau für die personenbezogenen Daten erbracht werden kann. Persönlich würde nach dieser Passage von jeder Nutzung der App dankend absehen.

Eine kurze Randnotiz zu folgender Aussage:

Ihre Passwörter werden auf den Servern der Ada Health GmbH in verschlüsselter Form gespeichert.

Verschlüsselt? Das sind ja ganz neue Maßnahmen zum Schutz der Passwörter – vermutlich eher gehasht.

Insgesamt informiert die Datenschutzerklärung relativ transparent über die Erhebung und Verarbeitung der personenbezogenen Daten. Allerdings empfinde ich einige der Formulierungen als unglücklich bzw. sogar irreführend. So spricht Ada bspw. an mehreren Stellen von »anonym« bzw. einer Anonymisierung der Daten. Wie schwierig es ist Daten korrekt zu anonymisieren, zeigt unter anderem der EU-Bericht »Opinion 05/2014 on Anonymisation Techniques«. Darin wird auch deutlich herausgestellt, dass Pseudonymisierung ungleich Anonymisierung ist. Das bedeutet: Selbst, wenn Unternehmen beteuern, sie würden personenbeziehbare Daten vor der Speicherung bzw. Weitergabe ausreichend »anonymisieren«, so sieht die Realität oftmals wohl ganz anders aus.

Fazit

Im Grunde genügt ein Blick in die Datenschutzerklärung, um die App einen großen Bogen zu machen. Bei der Erhebung und Verarbeitung von Gesundheitsdaten sollte das Prinzip Privacy by Design berücksichtigt werden. Bei Ada kann ich dies nicht mal im Ansatz erkennen – in der App sind gleich drei Tracker verbaut und auch der Anbieter selbst erhebt bzw. verarbeitet eine ganze Menge an personenbezogenen Daten.

Der Kuketz-Blog ist spendenfinanziert! Mitmachen ➡