Android: Screen-Inhalt mit ScreenStream | scrcpy auf den Rechner bzw. Beamer übertragen

Dank zahlreicher Tipps habe ich zwei Lösungen gefunden, mit denen sich der Android-Screen-Inhalt auf den Rechner übertragen lässt und von dort aus auf einem Beamer ausgeben lässt. Die beiden Lösungen bzw. Varianten möchte ich kurz vorstellen.

Zunächst einmal die App ScreenStream aus dem F-Droid-Store. Damit die Übertragung zwischen Android-Smartphone und Rechner funktioniert, müssen beide im selben WLAN sein und miteinander kommunizieren dürfen. Anschließend muss ScreenStream lediglich auf Android gestartet werden. Über den Rechner lässt sich der komplette Android-Screen dann einfach innerhalb eines Browser-Fensters (Adresse bspw. http://192.168.1.25:8080) via HTTP aufrufen. Es ist keine weitere Zusatzsoftware notwendig. Tipp: Wenn ihr über Einstellungen -> Bild die JPEG-Kompression auf 30 einstellt, ist die Übertragung bzw. Darstellung nahezu ohne zeitliche Verzögerung. Eine tolle App.

Die zweite Variante ist etwas mächtiger und lässt sich ebenfalls kabelgebunden (USB-Kabel) betreiben – diese Lösung ist gerade dann eine Alternative, wenn kein WLAN zur Verfügung steht, der Screen-Inhalt von Android aber dennoch auf dem Rechner und von dort aus auf dem Beamer dargestellt werden soll. Das Tool scrpy ist quelloffen und für GNU/Linux, Windows und macOS verfügbar. Unter Debian GNU/Linux bekommt ihr die Anwendung relativ schnell mit einem Snap-Package zum Laufen:

apt-get install snapd
snap install core
snap install scrcpy
systemctl restart snapd.service

Anschließend müsst ihr das Smartphone via USB-Kabel mit dem Rechner verbinden und adb aktivieren. Mit folgendem Befehl erscheint der Android-Bildschirminhalt dann ohne merkliche Verzögerung direkt auf dem Desktop des Rechners – und lässt sich von dort aus sogar per Maus steuern:

snap run scrcpy --max-size 1024 --always-on-top --show-touches

Beide Lösungen sind spitze. Aufgrund der sehr geringen Latenz und kabelgebundenen-Lösung favorisiere ich allerdings scrpy.

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.

Garmin Connect: Facebook und Google dürfen auch tracken

Am zweiten Tag der App-Review-Week wird die Android-App Garmin Connect (Version 4.22.1) einem Kurzcheck unterzogen – eine App, die benötigt wird, um Fitness-Daten von Garmin-Geräten auszuwerten bzw. zu synchronisieren. Beginnen wir mit den Netzwerkverbindungen, die Garmin Connect 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. Unter anderem werden folgende Informationen übermittelt [graph.facebook.com]:

  • 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: com.garmin.android.apps.connectmobile
    • Versionsnummer der App: 4.22.1
    • Android-Versionsnummer: 9
    • Gerätemodell: Mi A1
    • Länderkennung: de_DE
    • Zeitzone: MESZ, Europe/Berlin
    • Displayauflösung: 1080×1920

Wie bedenklich die Einbindung von Facebook-Bausteinen (SDK) hinsichtlich der Privatsphäre sind, scheint noch immer nicht an die App-Entwickler durchgedrungen zu sein – einfach unverantwortlich. Allein die Übermittlung der Google-Advertising-ID genügt im Grunde, 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.

Mit dem Server »graph.facebook.com« kommuniziert die App im Verlauf der App-Nutzung übrigens regelmäßig – auch wenn man überhaupt kein Facebook-Konto hat. Facebook erfährt also unter anderem, in welcher View (Ansicht in der App) sich der Nutzer gerade befindet.

[2] Zur Analyse von Abstürzen hat Garmin Connect CrashLytics von Google integriert:

GET /spi/v2/platforms/android/apps/com.garmin.android.apps.connectmobile/settings?instance=02b81de25e16366e2a65ae4fe52170c009d4be7c&build_version=5045&display_version=4.22.1&source=4&icon_hash=ca86f75f2554f117aec789e590c0c32182e4650d HTTP/1.1
User-Agent: Crashlytics Android SDK/1.4.8.32
X-CRASHLYTICS-DEVELOPER-TOKEN: 470fa2b4ae81cd56ecbcda9735803434cec591fa
X-CRASHLYTICS-API-KEY: 4e3b4ae0663da5099f310ac3d7e1961044e54379
X-CRASHLYTICS-API-CLIENT-TYPE: android
X-CRASHLYTICS-API-CLIENT-VERSION: 1.4.8.32
Accept: application/json
X-CRASHLYTICS-DEVICE-MODEL: Xiaomi/Mi A1
X-CRASHLYTICS-OS-BUILD-VERSION: 0ae0a9df12
X-CRASHLYTICS-OS-DISPLAY-VERSION: 9
X-CRASHLYTICS-INSTALLATION-ID: c262fa24a00c4698b2b98137885bce47
Host: settings.crashlytics.com
Connection: close
Accept-Encoding: gzip, deflate

Bei einem Absturz wird Garmin Connect dann einen Absturzbericht an CrashLytics senden.

[3] Ebenfalls integriert ist der Google-Tracker »app-measurement.com«, der den Google-Cloud-Messaging (GCM) Nachfolger Firebase-Cloud-Messaging (FCM) standardmäßig mit Daten beliefert, sofern die Entwickler dies nicht aktiv deaktivieren [app-measurement.com]:

POST /a HTTP/1.1
Content-Encoding: gzip
Content-Length: 436
Content-Type: application/x-www-form-urlencoded
User-Agent: Dalvik/2.1.0 (Linux; U; Android 9; Mi A1 Build/PQ3A.190705.003)
Host: app-measurement.com
Connection: close
Accept-Encoding: gzip, deflate

Leider können wir die Daten nicht einsehen, da Google eine zusätzliche Verschlüsselung darüber legt.

[4] Die Server der App-Entwickler werden ebenfalls kontaktiert [static.garmincdn.com | geolocation.garmin.com]. Unter anderem, um eine Standortbestimmung durchzuführen und ein paar Informationen vom Gerät zu übermitteln:

GET /geolocation/whereami/akamai HTTP/1.1
Content-Type: application/json
X-app-ver: 5045
X-lang: de
User-Agent: com.garmin.android.apps.connectmobile 4.22.1 5045 Dalvik/2.1.0 (Linux; U; Android 9; Mi A1 Build/PQ3A.190705.003)
Authorization: OAuth oauth_consumer_key="fc3e99d2-118c-44b8-8ae3-03370dde24c0", oauth_nonce="-2597516023199816155", oauth_signature="ez1zFbhvUN1C4BviwqZlv0aTF2s%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1568889817", oauth_version="1.0"
Host: geolocation.garmin.com
Connection: close
Accept-Encoding: gzip, deflate

Registrierung: Anmeldung via E-Mail-Adresse

Nach der Zustimmung in die EULA, kann ein Konto bei Garmin Connect angelegt werden. Darunter findet sich noch folgender Hinweis:

Datenschutz ist für Garmin sehr wichtig. Unsere Garmin Connect-Datenschutzrichtlinie ist zur Ansicht verfügbar.

Damit ist Garmin in guter Gesellschaft: Auf dem Papier bzw. vordergründig hat der Datenschutz einen hohen Stellenwert, in der Praxis leider weniger – siehe unter anderem der Facebook-Tracker. Ich werte das mittlerweile als Verbrauchertäuschung – denn erst ein Blick in die Datenschutzerklärung informiert den Nutzer darüber, dass Facebook-Tracker und Co. eingebunden werden. Mit Datenschutz hat diese Einbindung jedoch wenig zu tun. Es ist wirklich erstaunlich, nach all den Datenskandalen, in die Facebook verwickelt ist / war, gibt es noch immer Unternehmen, die Facebook in ihre Apps integrieren.

Nach Einwilligung in die EULA wird eine Verbindung zu sso.garmin.com aufgebaut (inklusive Cert-Pinning) – dazwischen auch immer zu Cloudflare [ajax.cloudflare.com], um von dort JavaScript nachzuladen. Innerhalb der App wird man anschließend gebeten Name, E-Mail-Adresse und Kennwort anzugeben:

POST /sso/createNewAccount?service=https%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed&source=https%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed&redirectAfterAccountLoginUrl=https%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed&redirectAfterAccountCreationUrl=https%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed&gauthHost=https%3A%2F%2Fsso.garmin.com%2Fsso&locale=de&id=gauth-widget&cssUrl=https%3A%2F%2Fstatic.garmincdn.com%2Fcom.garmin.connect%2Fui%2Fcss%2Fgauth-custom-gcm-bic-v1.3-min.css&clientId=GarminConnectMobileAndroid&rememberMeShown=false&rememberMeChecked=false&createAccountShown=false&openCreateAccount=true&displayNameShown=false&consumeServiceTicket=true&initialFocus=true&embedWidget=true&socialEnabled=false&generateExtraServiceTicket=false&generateTwoExtraServiceTickets=false&generateNoServiceTicket=false&globalOptInShown=true&globalOptInChecked=false&mobile=true&connectLegalTerms=false&showTermsOfUse=false&showPrivacyPolicy=false&showConnectLegalAge=true&locationPromptShown=true&showPassword=true HTTP/1.1
Host: sso.garmin.com
Connection: close
Content-Length: 262
Pragma: no-cache
Cache-Control: no-cache
Origin: https://sso.garmin.com
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Linux; Android 9; Mi A1 Build/PQ3A.190705.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3770.101 Mobile Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer: [...]
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: [...]
X-Requested-With: com.garmin.android.apps.connectmobile

name=Test&username=test%40tutanota.de&email=test%40tutanota.de&emailMatch=test%40tutanota.de&password=secretPassword&location=DE&confirmAge=on&_csrf=82664008B7740A90FA9FC52D8BF7B4ADBD016EE349A38BFBC00FAD15C086F9D78AC4D4FD143DABE250B8B898CCDDFAF61974

Während der Nutzung

Leider konnte ich kein Garmin-Gerät mit Garmin Connect verknüpfen – ich habe schlichtweg keines. Eine Aussage darüber, welche Daten dann während der App-Nutzung übermittelt werden ist daher schwierig. Beim Klicken durch die Menüs wird hauptsächlich eine Verbindung zu connectapi.garmin.com aufgebaut und Daten ausgetauscht. Hin und wieder auch zum Facebook-Tracker – Facebook muss ja auf dem Laufenden bleiben, was ihr so innerhalb Garmin Connect alles so antippt bzw. zu welchem Zeitpunkt ihr die App benutzt.

Kurzcheck der Datenschutzerklärung

Die Datenschutzerklärung ist in deutscher Sprache einsehbar. Erster Satz:

Garmin schützt Ihre Privatsphäre.

Der integrierte Facebook-Tracker spricht da aber eine ganz andere Sprache. Insgesamt ist die Datenschutzerklärung relativ umfangreich und erklärt transparent wofür die Daten verwendet bzw. zu welchem Zweck sie verarbeitet werden. Selbst Drittanbieter werden genannt. Wer die Datenschutzerklärung im Vorfeld liest, der weiß: Garmin Connect verarbeitet jede Menge von (personenbezogenen) Daten bzw. nutzt dafür diverse Drittanbieter. Persönlich würde ich kein Gerät nutzen wollen, dass zwingend auf die Garmin-Connect-App angewiesen ist.

Fazit

Wer heute noch Facebook-Bibliotheken in seine Apps integriert, der verhöhnt den aufgeklärten Nutzer geradezu, wenn er in der Datenschutzerklärung Sätze wie

Garmin schützt Ihre Privatsphäre.

platziert. Die Integration von Facebook-Trackern und die massive Nutzung von Google-Diensten hat mit Privatsphäre jedenfalls nichts gemein.

Nein Danke Garmin, die App dürft ihr behalten.

Enpass: Proprietärer Passwortmanager mit optionaler Cloud-Anbindung

Die App-Review-Week startet mit der Android-App Enpass (Version 6.1.0.227) – ein proprietärer Passwort-Manager, der optional eine Cloud-Anbindung mitbringt, um die Tresore bzw. Passwörter geräteübergreifend über eine Cloud zu synchronisieren. Beginnen wir mit den Netzwerkverbindungen, die Enpass während der Nutzung aufbaut.

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

Stille. Es wird keine Verbindung aufgebaut.

Inbetriebnahme (Neuer Benutzer)

Nach der Vergabe des Master-Passworts baut Enpass eine Verbindung zur Gegenstelle »rest.enpass.io« auf und versendet dabei folgende Informationen:

  • Package-Name: io.enpass.app
  • Android-Version: 9
  • App-Version: 6.1.0.227
  • Verwendete Sprache: de
GET /enpass/alert/?package=io.enpass.app&os=9&version=6.1.0.227&version_code=227&language=de%7Cde HTTP/1.1
Host: rest.enpass.io
User-Agent: Mozilla/5.0
Accept: */*
Connection: close

Es handelt sich dabei offenbar um eine Art »Ping« bzw. Übermittlung von Meta-Informationen. Die Übertragung der Informationen findet nicht nur einmalig statt, sondern auch dann, wenn die App vollständig beendet wurde und erneut nach dem Master-Passwort fragt.

Während der Nutzung

Während der Testphase baut Enpass keine weitere Verbindung mit einem Server im Internet auf. Erst wenn ein Tresor bzw. Passwortdatenbank mit einem Cloud-Anbieter (Google, Dropbox, iCloud) oder einer privaten Cloud (Nextcloud) synchronisiert werden soll, werden entsprechende Verbindungen initiiert.

Enpass bietet ebenfalls die Funktion, seine Passwörter mit der haveibeenpwned.com-Datenbank abzugleichen, um festzustellen, ob das Passwort bereits kompromittiert wurde. Vor der Verwendung gibt Enpass allerdings folgende Warnung aus:

Enpass wird eine Verbindung zum Internet herstellen, um die Passwörter des Tresors Standard mit haveibeenpwned.com abzugleichen.

Man hat dann die Auswahl zwischen Abbrechen und Fortfahren. Tippt man auf Fortfahren, übermittelt Enpass nicht das Passwort, sondern arbeitet auf Basis des k-Anonymity-Modells. Die ersten fünf Zeichen werden mit SHA-1 gehasht und an haveibeenpwned.com übermittelt. Als Antwort erhält man eine Liste mit kompromittierten Passwörtern, die mit den gleichen fünf Zeichen beginnen. Enpass vergleicht dann lokal den Hash der Passwörter mit der Liste. Wenn es ein passendes Passwort findet, erhält man eine Warnung:

GET /range/7c4a8 HTTP/1.1
Host: api.pwnedpasswords.com
User-Agent: Mozilla/5.0
Accept: */*
Connection: close

Kurzcheck der Datenschutzerklärung

Die Datenschutzerklärung ist relativ übersichtlich und allgemein gehalten. Eine Anpassung an Anforderungen der DSGVO kann ich nicht erkennen. Bedenklich ist der folgende Absatz:

Sinew do not collect any other personal information from our products until & unless it is explicitly specified. Sinew may track the user’s behavior on our products using the third party analytics tools to make our products better to use.

Innerhalb der Enpass-App sind (aktuell) keine Tracker verbaut, die das Nutzerverhalten analysieren. Allerdings räumt sich Enpass bzw. die Sinew Software Systems Pvt. Ltd grundsätzlich das Recht dazu ein.

Fazit

Enpass bindet in der aktuellen App-Version keine Tracker ein. Allerdings sendet die App nach jeder Eingabe des Master-Passworts einen »Ping« an den Hersteller. Darin sind zwar keine sensiblen Informationen enthalten, dennoch lässt sich dieses Verhalten über die Optionen nicht deaktivieren.

Abgesehen von diesem »Ping« hinterlässt Enpass einen soliden Eindruck. Es werden erst dann Verbindungen mit Drittanbietern aufgebaut, wenn diese bspw. zur Speicherung bzw. Synchronisation genutzt werden. Persönlich würde ich den Passwort-Manager allerdings nicht benutzen, da er nicht quelloffen ist.

Die Datenschutzerklärung macht auf mich einen kurzen und unvollständigen Eindruck. Hier könnte der Nutzer besser informiert werden.

Datenskandel: Millionenfach Patientendaten ungeschützt im Netz

Heute Abend 21:45 Uhr in report München (ARD):

Datenskandel im Gesundheitsbereich: Sensible Patietendaten offen im Netz

Auszug aus Millionenfach Patientendaten ungeschützt im Netz:

Brustkrebsscreenings, Wirbelsäulenbilder, Röntgenaufnahmen eines Brustkorbs, der Herzschrittmacher ist gut erkennbar. Es sind intimste Bilder, die über Jahre hinweg frei verfügbar im Netz zu finden gewesen sind. Diese Datensätze von weltweit mehreren Millionen Patienten liegen auf Servern, die nicht geschützt sind. Auch Tausende Patienten aus Deutschland lassen sich in diesem Datenleck finden. Das hat eine gemeinsame Auswertung des Bayerischen Rundfunks und des US-amerikanischen Rechercheportals ProPublica ergeben.

Die Bilder sind hochauflösend und gespickt mit zahlreichen Informationen. Fast alle davon sind personenbezogen: Geburtsdatum, Vor- und Nachname, Termin der Untersuchung und Informationen über den behandelnden Arzt oder die Behandlung selbst.

Gesundheitsdaten fallen nach EU-DSGVO Art. 9 unter die Kategorie der besonders schützenswerten Daten. Gesundheitsdaten begleiten einen das ganze Leben! Selbst diejenigen, die meinen »sie hätten nichts zu verbergen« wollen wohl kaum, dass ihre Inkontinenz, Krebsleiden, Erektionsprobleme etc. öffentlich wird. Vor diesem Hintergrund finde ich es unbegreiflich wie an der elektronischen Gesundheitsakte (eGA) / Patientenakte (ePA), Telematikinfrastruktur (TI) und Dienstleistern wie Vivy unbeirrt festgehalten wird – skandalös und unverantwortlich.

Die Popularität einer Plattform korreliert nicht notwendigerweise mit ihrer Qualität oder ihrer Eignung, den verfassungsrechtlichen Informationsauftrag zu erfüllen. Es gibt andere, rechtlich weniger bedenkliche Wege, diesen Auftrag zu erfüllen. Ganz zu schweigen von der kostenlosen Werbung für einen Konzern, der zu den größten Datensammlern der Welt zählt.

@Bundesregierung

2/2

Auf Mastodon lesen ➡

»WhatsApp ist der in Deutschland am häufigsten genutzte Messenger-Dienst«. [...,] Als Bundespresseamt überprüfe man regelmäßig, wie man dem verfassungsrechtlich gebotenen Informationsauftrag gerecht werden könne »und das kann eben nur gelingen, wenn wir uns auch an der tatsächlichen Mediennutzung der Bürgerinnen und Bürger orientieren«.

Wenn man dieser Argumentation folgt, lässt sich vieles als legitim rechtfertigen, trotz bestehender ethischer und rechtlicher Bedenken.

1/2

Auf Mastodon lesen ➡

. Die Überarbeitung der Messenger-Matrix ist nun vollständig abgeschlossen. Über einen Tipp/Klick auf Teilen würde ich mich riesig freuen, damit sich die Messenger-Übersicht (weiter) verbreitet. ❤️ 👍

Deutsch: messenger-matrix.de/messenger-
Englisch: messenger-matrix.de/messenger-
FAQ: messenger-matrix.de/#faq
Mitarbeit: codeberg.org/kuketzblog/www.me

Auf Mastodon lesen ➡

"Mit unserem neuen WhatsApp-Kanal bekommen Sie politische Neuigkeiten aus erster Hand, schnell und direkt per Benachrichtigung auf Ihr Mobiltelefon."

So sieht also digitale Verantwortung und Souveränität aus @Bundesregierung. 🤦

social.bund.de/@Bundesregierun

Auf Mastodon lesen ➡

An alle Facebook Messenger und Google Messages Nutzer. Bitte mal prüfen, ob die neu aufgenommenen Werte der beiden Messenger in der Messenger-Matrix korrekt sind. 👇

messenger-matrix.de/messenger-

Auf Mastodon lesen ➡

Neue Zeile in der Messenger-Matrix ergänzt: »Unterstützte Push-Benachrichtigungsdienste«. Ich habe nicht zu jedem Messenger ausreichend Informationen gefunden, daher wäre es lieb ❤️ , wenn ihr dazu Feedback abgebt. Korrekturen nehme ich gerne vor. 👇

messenger-matrix.de/messenger-

Auf Mastodon lesen ➡

Nach einem Test von cwtch habe ich mich umentschieden. Das ist in der Praxis kaum benutzbar. Schönes Konzept, aber die Umsetzung IMHO mangelhaft. Ich verzichte daher auf die Aufnahme in der Matrix.

Auf Mastodon lesen ➡

Habe mich nun für die Aufnahme der folgenden Messenger entschieden:
- (Facebook) Messenger
- Google Messages

Kommt nach und nach.

messenger-matrix.de/messenger-

Auf Mastodon lesen ➡

Für den Nachrichtenempfang muss man online sein.

Edit: Trotz Akku-Optimierung aus bin ich für einige offenbar "offline".

Auf Mastodon lesen ➡

Kontakt Authentifizierung ist wohl nicht vorgesehen / implementiert. 

Auf Mastodon lesen ➡

Immer aktuell

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

Bleib aktuell ➡