Mastodon IzzyOnDroid


Say thanks!
↓ Your product here? ↓
Das Inoffizielle Android-HandbuchAndroid kennenlernen, Tipps & TricksDas Inoffizielle Android-Handbuch
Android kennenlernen, Tipps & Tricks
Für EUR 16,99 bei Amazon kaufen
Das Inoffizielle Android SystemhandbuchTiefer ins System einsteigenDas Inoffizielle Android Systemhandbuch
Tiefer ins System einsteigen
Für EUR 7,00 bei Amazon kaufen
Die besten Android-AppsDen Androiden austattenDie besten Android-Apps
Den Androiden austatten
Für EUR 5,00 bei Amazon kaufen
 
enhelp

Exodus Privacy: Der Tracker-Checker

Exodus-Tracker
Tracker in einer App gefunden;
© Exodus Privacy (CC-BY)

Tracker stecken mittlerweile in zwei Dritteln aller Apps. Selbst in kostenpflichtigen. Mehr als zehn Tracker in einer App sind keine Seltenheit. Knapp zwanzig Tracker sind dem Autor dieses Artikels auch bereits in einer App untergekommen – beim „Tracker Checker“ Exodus Privacy finden sich auch Apps mit über dreißig dieser Unholde.

Was sind denn nun „Tracker”? Dabei handelt es sich um in Apps eingebundene Module von Drittanbietern, die das Verhalten der Anwender beobachten und „nach Hause telefonieren“. Diese Module haben Zugriff auf alles, auf das auch die App selbst zugreifen kann – sie sind ja schließlich Bestandteil derselben. Und so landen dann auch gelegentlich das komplette Adressbuch oder Zugangsdaten auf den Servern der Drittanbieter.

Im Google Play Store sind diese Tracker jedoch nicht ausgewiesen – hier mangelt es an der nötigen Transparenz. Bei Appbrain sind bei einigen Apps die verwendeten Bibliotheken angemerkt. Leider jedoch nicht bei allen – denn für diese Daten ist man auf die Mithilfe der Anwender angewiesen: Die dafür notwendigen Daten werden über die App Appbrain Ad Detector auf den Geräten der Anwender ermittelt.

Bei Exodus Privacy hingegen kann man, ohne eine spezielle App installiert zu haben, beliebige konstenlose Android Apps zur Analyse einreichen. Exodus bezieht dann die APK Datei aus dem Play Store, analysiert sie, und weist die Ergebnisse aus.

Für welche Betriebssysteme ist Exodus verfügbar?

Exodus selbst lässt sich über den Web-Browser bedienen. Es kann derzeit ausschließlich Android Apps untersuchen. Die Untersuchung von iOS Apps ist nicht möglich; die FAQ weist darauf hin, dass Apple’s DRM die Untersuchung strikt verbietet. Technisch wäre es durchaus möglich – nur leider illegal (die einzige Ausnahme ist „Forschung”). Das Exodus-Team weist jedoch darauf hin, dass meist in iOS Apps die gleichen Tracking-Bibliotheken zum Einsatz kommen wie bei ihren Android Pendants. Gibt es also zur gewünschten iOS App ein Android Pendent, sollte man einfach dieses untersuchen lassen.

In welchen Sprachen wird der Dienst angeboten?

Derzeit beschränkt sich die Website auf Französisch und Englisch. Gern würde man aber auch weitere Sprachen – etwa Deutsch und Spanisch – anbieten. Das gesamte Team besteht jedoch aus (überwiegend französischen) Freiwilligen. Keiner dieser Freiwilligen ist der deutschen (oder spanischen) Sprache derart mächtig, die Projekte (Website, Videos etc) in diese Sprachen zu übersetzen. Weitere Freiwillige, die dies übernehmen könnten, sind daher herzlich willkommen! Kontaktmöglichkeiten finden sich auf der Website.

Wer steht da hinter?

Exodus Privacy ist eine Französische non-profit Organization. Verwaltet wird sie von Hacktivists, deren Ziel es ist, die Privatsphäre zu schützen wo immer möglich. Auf ihrer Website gibt das Team unter „Who“ einen kurzen Hinweis dazu, wer dahinter steht, und führt sowohl die „Main Contributors” als auch Kontaktmöglichkeiten auf.

Zur Entstehungsgeschichte erzählt ein Team-Mitglied1:

Im Spätsommer 2017 berichtete eine Online-Zeitung über die Entdeckung eines bestimmten Trackers in mehr als 50 populären französischer Apps – betroffen waren etwa 10 Millionen französische Nutzer. Verschiedene Leute begannen sich zu fragen: „Und was ist mit anderen Apps?” Auf Twitter formte sich eine kleine Gruppe, und innerhalb weniger Tage entwickelten wir die erste funktionsfähige Platform. Dann gründeten wir eine französische non-profit Organization, um das Projekt zukunftsfähig zu machen.

Unser Ziel ist es Menschen (einschließlich nicht technik-affiner) bewusst zu machen, wie sie von Apps auf ihren Smartphones getrackt werden. Dafür entwickelten wir Analyse-Tools und auch pädagogische Inhalte, wie etwa unsere Videos. Derzeit arbeiten wir an verschiedenen Projekten, einschließlich der Verbesserung der Benutzererfahrung unserer Platform – um unsere Analyse-Reports für jedermann besser verständlich zu machen.

Wie funktioniert Exodus Privacy technisch?

Exodus Privacy führt lediglich eine statische Analyse aus – stellt also fest, welche Bibliotheken im Code einer App eingebunden sind. Dabei wird keine Aussage darüber getroffen, ob eine bestimmte Bibliothek überhaupt, nur in Teilen oder gar nicht aktiv ist. Der Ablauf einer Untersuchung wird auf der Website erklärt:

Die Grundidee ist es, das Vorhandensein bekannter Tracker in einer Anwendung zu erkennen, ohne die Anwendung auszuführen. Tatsächlich kann sich εxodus nicht beliebig viel Zeit für jede einzelne Analyse nehmen; daher muss die Erkennungsmethode zeitlich effizient, reproduzierbar und frei von „Falscherkennungen” (false positives) sein.

Android Anwendungen werden in JVM kompatiblen Sprachen wie Java, Kotlin, etc. geschrieben. In einer JVM laufende Applikationen haben diverse Unterschiede zu etwa C oder Go Programmen. Einer davon ist, dass sich die Klassen-Namen ohne Dekompilation direkt aus der Binärdatei lesen lassen. JVM identifiziert sie anhand ihres voll-qualifizierten Klassennamens – wie etwa org.exodus.Report: wobei org.exodus der Paketname und Report der Klassenname ist.

Google bietet dexdump -- ein Program zum Parsen von .dex Dateien. In der Java-Welt ist kompilierter Code in .class Dateien (eine pro Klasse) enthalten. In der Android-Welt wird kompilierter Code in .dex Dateien (eine oder mehrere je App) gespeichert. Die ganze App befindet sich dann in einer .apk Datei – bei der es sich um ein signiertes ZIP Archiv handelt. Diese .apk Datei enthält die Anwendung (.dex Dateien) sowie die Assets (Fonts, Bilder etc.).

Lassen wir dexdump über eine .apk Datei laufen, erhalten wir eine Ausgabe wie diese:

Class #0            -
  Class descriptor  : ’Landroid/databinding/Observable;’
  Access flags      : 0x0601 (PUBLIC INTERFACE ABSTRACT)
  Superclass        : ’Ljava/lang/Object;’
  Interfaces        -
  Static fields     -
  Instance fields   -
  Direct methods    -
  Virtual methods   -
    #0              : (in Landroid/databinding/Observable; )
      name          : ’addOnPropertyChangedCallback’
      type          : ’(Landroid/databinding/Observable$OnPropertyChangedCallback;​ )V’
      access        : 0x0401 (PUBLIC ABSTRACT)
      code          : (none)
    #1              : (in Landroid/databinding/Observable; )
      name          : ’removeOnPropertyChangedCallback’
      type          : ’(Landroid/databinding/Observable$OnPropertyChangedCallback; )V’
      access        : 0x0401 (PUBLIC ABSTRACT)
      code          : (none)
  source_file_idx   : 25639 (Observable.java)

Class #1            -
  Class descriptor  : ’Landroid/databinding/BaseObservable;’
[…]

Diese Ausgabe ist nicht wirklich „menschenfreundlich lesbar“ – aber für jede in der App deklarierte Klasse haben wir hier einen Block, der auch einen „Class Descriptor“ enthält. Der Class descriptor ist die JVM-Repräsentation der Namensräume einer App (voll qualifizierte Klassennamen, siehe oben). In obigem Beispiel ist Class #0 android.databinding.Observable mit dem Paketnamen android.databinding und dem Klassennamen Observable.

Wir können jetzt die Ausgabe von dexdump bereinigen, sodass wir nur den jewiligen Class Descriptor sehen – und das Ganze dann sortieren:

$ dexdump my.apk | grep "Class descriptor" | sort | uniq
  Class descriptor  : ’Landroid/databinding/adapters/AbsListViewBindingAdapter;’
  Class descriptor  : ’Landroid/databinding/adapters/AbsListViewBindingAdapter;’
  Class descriptor  : ’Landroid/databinding/adapters/AbsListViewBindingAdapter$OnScroll;’
  Class descriptor  : ’Landroid/databinding/adapters/AbsListViewBindingAdapter$OnScrollStateChanged;’
  Class descriptor  : ’Landroid/databinding/adapters/AbsSeekBarBindingAdapter;’
  Class descriptor  : ’Landroid/databinding/adapters/AbsSpinnerBindingAdapter;’
  Class descriptor  : ’Landroid/databinding/adapters/ActionMenuViewBindingAdapter;’
  Class descriptor  : ’Landroid/databinding/adapters/AdapterViewBindingAdapter;’
  Class descriptor  : ’Landroid/databinding/adapters/AdapterViewBindingAdapter$OnItemSelected;’
  Class descriptor  : ’Landroid/databinding/adapters/AdapterViewBindingAdapter$OnItemSelectedComponentListener;’
  Class descriptor  : ’Landroid/databinding/adapters/AdapterViewBindingAdapter$OnNothingSelected;’
  Class descriptor  : ’Landroid/databinding/adapters/AutoCompleteTextViewBindingAdapter;’
  Class descriptor  : ’Landroid/databinding/adapters/AutoCompleteTextViewBindingAdapter;’
  Class descriptor  : ’Landroid/databinding/adapters/AutoCompleteTextViewBindingAdapter$FixText;’

In Java, C++, Python und anderen Sprachen sind Namensräume wirklich wichtig. Hat man eine Bibliothek muss man sicherstellen, dass ihr Namensraum nicht mit anderen Bibliotheken kollidiert. Man kann somit eine Bibliothek am verwendeten Namensraum erkennen.

εxodus durchsucht .apk Dateien, um Tracker zu finden – und diese Tracker können an den von ihnen verwendeten Namensräumen erkannt werden. So ist beispielsweise die Wurzel des Namensraums (der „Paketname”) der Amazon Ad Bibliothek com.amazon.device.ads und sie teilt sich den com.amazon Präfix mit anderen Amazon Bibliotheken. Somit kann der Namespace als „Tracker Signatur” verwendet werden.

Derzeit (Juni 2019) kennt εxodus 196 Tracker.

Wollen wir beispielsweise nach der Bibliothek von Flurry schauen, haben wir die Erkennungs-Regel com.flurry. – bei der es sich um einen regulären Ausdruck handelt.

Schauen wir doch einmal, ob my.apk Flurry’s Klassen enthält:

$ dexdump my.apk | grep "Class descriptor" | sort | uniq | grep -E "com.flurry." | head -n 10
  Class descriptor  : ’Lcom/flurry/android/Constants;’
  Class descriptor  : ’Lcom/flurry/android/FlurryAgent;’
  Class descriptor  : ’Lcom/flurry/android/FlurryAgent;’
  Class descriptor  : ’Lcom/flurry/android/FlurryAgent;’
  Class descriptor  : ’Lcom/flurry/android/FlurryAgent;’
  Class descriptor  : ’Lcom/flurry/android/FlurryAgent;’
  Class descriptor  : ’Lcom/flurry/android/FlurryAgent$Builder;’
  Class descriptor  : ’Lcom/flurry/android/FlurryAgentListener;’
  Class descriptor  : ’Lcom/flurry/android/FlurryEventRecordStatus;’
  Class descriptor  : ’Lcom/flurry/android/FlurryGamingAgent;’
Analyse-Prozess
Überblick über den statischen Analyse-Prozess
© Exodus Privacy (CC-BY-SA)

wie wir sehen, sind Flurry’s Klassen in my.apk zu finden.

Wenn man also eine App zur Analyse an εxodus übermittelt, lädt εxodus diese vom Google Play Store herunter, extrahiert die .apk Datei, ruft dexdump auf, speichert die gefilterte Ausgabe in einer Datei (welche bei Updates des Reports genutzt wird, um die Analyse zu beschleunigen), nimmt die Erkennungs-Regeln jedes bekannten Trackers und schaut, ob sich passende Klassen finden. Gibt es einen oder mehrere Treffer wird davon ausgegangen, dass der Tracker in der App eingebunden ist – andernfalls nicht.

Welche Schwächen und Lücken hat das Verfahren und wie kann man sie eventuell mit anderen Mitteln stopfen?

Wie bereits ausgeführt, kann eine statische Analyse nur das Vorhandensein von Bibliotheken feststellen – jedoch keine Aussage darüber treffen, ob der entsprechende Code aktiv ist (also irgendwann ausgeführt wird) oder nicht.

Derzeit dürfen in Frankreich lediglich Forscher Anwendungen dekompilieren (und somit feststellen, ob ein Tracker aktiv ist oder nicht). Das ist keine Schwachstelle von Exodus selbst, sondern vom Gesetz. An dem Tag, an dem das Gesetz die Prüfung von Tracker Aktivität erlaubt (entweder, weil eine App Open Source wird, oder weil das Gesetz das Dekompilieren erlaubt), wird Exodus dies auch umsetzen. Die größte Schwachstelle ist, dass jede Tracker-Signatur manuell erfasst werden muss, basierend auf der Hilfe der Community.

Als Anwender kann man jedoch die Netzwerk-Aktivität einer App z. B. mittels Net Monitor testen (wobei eine Zuordnung zu einem bestimmten Tracker dabei nicht unbedingt immer einfach ist) – oder auch ClassyShark3xodus verwenden (welches die Apps direkt auf dem Gerät prüft).

Anders als Exodus Privacy führt beispielsweise AppCensus eine dynamische Analyse durch. Das heisst: Die Apps werden in einer Laufzeitumgebung gestartet und der Netzwerkverkehr einer App wird auf die Übermittlung sensibler, personenbeziehbarer Daten / Identifier überprüft. Kurz beschrieben ist dies beim Sicherheits-Experten (und c’t Autoren) Mike Kuketz. Die aktuellste Analyse dort stammt allerdings von August 2018; es ist daher unklar, ob der Dienst aktuell noch aktiv ist. Anders als bei εxodus kann der Anwender hier keine Apps zum Scannen einreichen, sondern nur in vorhandenen Ergebnissen suchen.

Beispiele einiger prominenter Tracker

Eine Liste der Apps mit den meisten Trackern findet sich u. a. auch bei Exodus Privacy. Sprach ich eingangs davon, bereits Apps mit bis zu 20 Trackern gesehen zu haben, ist hier der höchste „Tracker-Befall” 40 oder mehr – bei gleich 6 Apps2!

Ebenfalls bei Exodus Privacy zu finden: Eine Statistik mit den am häufigsten anzutreffenen Trackern.

Es gibt verschiedene Arten von Trackern. Ihnen ist gemein, dass sie Daten in der Regel ohne Einverständnis bzw. gar ohne Wissen der Anwender verschicken:

Den Entwicklern ist die Übergriffigkeit dieser Module oftmals gar nicht bewusst; gelegentlich werden sie trotz Wissens jedoch auch ignoriert. Insbesondere in Bezug auf Analytics und Crash Reporting ist der Grund häufig, dass die verwendeten Dienste vom Entwickler weit bequemer zu nutzen sind, und ausführlichere/tiefer-greifende Details bieten.

Ist IzzyOnDroid mit Exodus verbandelt?

In gewisser Weise, ja: die Applisten machen sich Exodus’ Services zu Nutze. Wann immer eine App (hinzugefügt oder) aktualisiert wird, fragt der „App List Updater“ bei Exodus an, ob für die neue Version Scan-Ergebnisse vorliegen – ist dies nicht der Fall, wird die entsprechende App sogar für einen Scan eingereicht. Ergebnisse landen in der Datenbank, und werden für die Anzeige in den App-Listen verwendet: Neben der App erscheint ein Contains no known trackers o/ wenn Exodus sie als „Tracker-frei“ ausweist – oder ein (e Reihe von) sofern sie besonders intrusive Tracker enthält. Daher an dieser Stelle auch mein besonderer Dank an das Exodus-Team!

Weiterführende Links

appshowtoprivacy


  1. per Email an mich ↩︎

  2. Stand: Juni 2019 ↩︎

2019-06-10