Jodel: Ständige Begleitung durch Facebook und Co.

Am letzten Tag der App-Review-Week wird die Android-App Jodel (Version 5.52.0) einem Kurzcheck unterzogen – eine App, die dabei helfen soll, Menschen in der Umgebung in Echtzeit miteinander zu verbinden. Bspw. um Neuigkeiten, Infos, Events etc. voneinander zu erfahren. Beginnen wir mit den Netzwerkverbindungen, die Jodel 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.tellm.android.app
    • Versionsnummer der App: 5.52.0
    • 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 Jodel CrashLytics von Google integriert:

GET /spi/v2/platforms/android/apps/com.tellm.android.app/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.7.30
Accept: application/json
X-CRASHLYTICS-DEVICE-MODEL: Xiaomi/Mi A1
X-CRASHLYTICS-OS-BUILD-VERSION: 58c9bb2632
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 Jodel dann einen Absturzbericht an CrashLytics senden.

[3] Werbung von Google-Doubleclick wird offenbar ebenfalls eingebunden – zumindest deutet eine initiale Verbindung zu den Google-Webeservern darauf hin [googleads.g.doubleclick.net]:

GET /pagead/drt/m HTTP/1.1
Authorization: Bearer ya29.ItUBjwe4tj9sygfpQtS0aTD7L_EDXJLmNdIgqhNhcGe_gD0-u4pwueZK4ZDTrEROLaojiGL0xE5lP6gAjsWuHaPhBzPPKiRyBJCW7k8Efa1COvgE8OCizTL9cLqYeN-sddBKMOPj1Mw3QFumwQG5ndwYjK1a0wU7fiXPM1JjDN2NaH6c7gqV-FKgXyKsvbLXLyfO3o-8lb_qmEBxigI-iHjxrr5RP4WhZbqACMUJzSeRXHFxi5EQujHzMA5twSs7zCdLmYO8NC6y1pEc2uSkg-Z0K5r6WOIw
User-Agent: Dalvik/2.1.0 (Linux; U; Android 9; Mi A1 Build/PQ3A.190801.002)
Host: googleads.g.doubleclick.net
Connection: close
Accept-Encoding: gzip, deflate

[4] Ein Tracker von Branch.io (eine Open-Source-Plattform) mit Firmensitz Palo Alto, USA ist ebenfalls vertreten und sammelt Daten [api.branch.io]:

POST /v1/open HTTP/1.1
Content-Type: application/json
Accept: application/json
User-Agent: Dalvik/2.1.0 (Linux; U; Android 9; Mi A1 Build/PQ3A.190801.002)
Host: api.branch.io
Connection: close
Accept-Encoding: gzip, deflate
Content-Length: 902

{"device_fingerprint_id":"704983671564384579","identity_id":"704983671585326400","hardware_id":"af9e53408108c2f5","is_hardware_id_real":true,"brand":"Xiaomi","model":"Mi A1","screen_dpi":480,"screen_height":1920,"screen_width":1080,"wifi":true,"ui_mode":"UI_MODE_TYPE_NORMAL","os":"Android","os_version":28,"country":"DE","language":"de","local_ip":"192.168.50.25","app_version":"5.52.0","facebook_app_link_checked":false,"is_referrable":1,"debug":false,"update":1,"latest_install_time":1563440085294,"latest_update_time":1569395493354,"first_install_time":1563440085294,"previous_update_time":1568892792416,"environment":"FULL_APP","cd":{"mv":"-1","pn":"com.tellm.android.app"},"metadata":{},"google_advertising_id":"a6d89b01-cd12-4f1f-96a2-3c4de090c02c","lat_val":0,"instrumentation":{"v1\/open-qwt":"0"},"sdk":"android2.19.5","branch_key":"key_live_jcESXFnKwxb53gafuWSRFijozto4BLB5","retryNumber":0}

Mal etwas aufgeschlüsselt:

  • Die lokale IP-Adresse: 192.168.50.25
  • Bildschirmauflösung: 480×1920
  • Die Google-Advertising-ID: a6d89b01-cd12-4f1f-96a2-3c4de090c02c
  • Device Fingerprint: 704983671564384579
  • Ob es sich um einen Emulator oder echte Hardware handelt
  • Hersteller bzw. Modell: Xiaomi Mi A1
  • Land und eingestellte Sprache
  • […]

[5] 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.

[6] Nachdem die ganzen Tracker mit Daten versorgt wurden, baut die App auch eine Verbindung mit den Jodel-Servern auf und übersendet ein paar Analyse-Informationen bzw. Tracking-Daten [analytics.ext.go-tellm.com | s.jodel.com]:

POST /collect?v=11 HTTP/1.1
Content-Type: application/task; charset=utf-8
Content-Length: 496
User-Agent: Dalvik/2.1.0 (Linux; U; Android 9; Mi A1 Build/PQ3A.190801.002)
Host: analytics.ext.go-tellm.com
Connection: close
Accept-Encoding: gzip, deflate

[zusätzlich verschlüsselt]

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

Registrierung: Anmeldung via E-Mail-Adresse

Nachdem ich auf »Werde Jodler!« tippe, erscheint die Fehlermeldung:

Certificate pinning failure!

Die App verwendet demnach Certificate-Pinning, um die verschlüsselte TLS-Verbindung zusätzlich zu schützen. Mit der Umgehung von Cert-Pinning auf Android habe ich Erfahrung. Leider nutzt die App nicht die Standard-TLS-Bibliotheken wie TrustManager, Network Security Configuration oder den bekannten HTTP-Client OkHttp, um Certificate-Pinning zu realisieren.

Da die Entwickler also auf die bekannten Systembibliotheken verzichten und die TLS-Zertifikatsvalidierung mit einer Eigenimplementierung durchführen, stößt die Kombination aus Frida & Objection an ihre Grenzen. Letztendlich bleibt in diesen Fällen nichts anderes übrig, als die App bspw. mit dex2jar zu dekompilieren und die entsprechenden Methoden-Aufrufe zu identifizieren, die für die Zertifikatsvalidierung verantwortlich sind. Das habe ich allerdings nicht durchgeführt – es ist App-Review-Week und nicht App-Debugging-Week. ;-)

Über den weiteren Verlauf der Verbindungen bzw. Datenübermittlungen kann ich daher keine Aussage treffen.

Kurzcheck der Datenschutzerklärung

Die Datenschutzerklärung von Jodel ist umfangreich, aber relativ transparent. Wer diese gelesen hat, der weiß: Jodel und die eingebundenen Tracking- und Werbeunternehmen erheben dauerhaft (massenhaft) Daten vom Nutzer. Unter anderem die IP-Adresse, den aktuellen Standort und andere Identifikationsmerkmale. In der Datenschutzerklärung wird auch klar darauf hingewiesen:

Wir analysieren auch Nutzungsdaten, um die Präferenzen der Nutzer durch Benutzeraktivitäten besser zu verstehen. Neben unserer eigenen Anwendungen verwenden wir auch die folgenden Mittel.

Und zu den folgenden Mitteln zählen unter anderem Facebook, Google, Branch.io – aus meiner Sicht ist eine datenschutzfreundliche Nutzung der App somit nicht möglich. Jeder, der Wert auf Datenschutz legt, kann Jodel folglich eigentlich nicht verwenden.

Abschließend noch folgender Satz:

Seit es Jodel gibt haben wir immer die Privatsphäre unserer Nutzer auf das Tiefste respektiert während wir gleichzeitig das Recht auf freie, unzensierte Meinungsäußerung garantieren.

Da bin ich anderer Meinung. Der Einbau von Tracking- und Werbenetzwerken, insbesondere Facebook, ist aus Datenschutzperspektive eine Bankrotterklärung und hat mit dem Respekt vor dem Nutzer bzw. seiner Privatsphäre wenig zu tun.

Fazit

Jodel ist ein gutes Beispiel dafür, dass bereits der Start einer App genügt, um einen Eindruck von der Datenschutzfreundlichkeit zu erhalten. Mein Eindruck: Miserabel. Zumindest sind die Angaben in der Datenschutzerklärung relativ transparent – datenschutzsensible Nutzer werden Jodel daher vermutlich nicht verwenden.

Der Kuketz-Blog ist spendenfinanziert! Mitmachen ➡