Android erlaubt Apps vollen Zugriff auf die Netzwerkaktivität

1. Net MonitorAndroid

Als langjähriger iPhone-Benutzer bin ich vor einiger Zeit aus dem »Walled Garden« ausgebrochen, um die Android-Plattform zu erkunden. Auf Android interessiert mich insbesondere die Implementierung der Sicherheitsmaßnahmen und wie der Schutz der Privatsphäre eines Nutzers gewährleistet wird. Durch einen Beitrag auf dem Kuketz-Blog bin ich auf die App Net Monitor (Neu: PCAPdroid) aufmerksam geworden. Diese App erlaubt es, die gesamte Netzwerkaktivität unter Android zu protokollieren – also welche App sich wann, wohin über das TCP- oder UDP-Protokoll verbindet.

Net Monitor

Mich wunderte dabei, dass die App für diese Aufgabe keinerlei Berechtigung einholen musste. Das würde bedeuten: Im Prinzip kann jede Android-App die gesamte Netzwerkaktivität erfassen. Sie benötigt dafür weder eine explizite Berechtigung, noch wird der Benutzer in angemessener Form darüber informiert. Im vorliegenden Beitrag werde ich diese Beobachtung näher erläutern und über mögliche Auswirkungen informieren.

Gastbeitrag

Ein Gastbeitrag von Daniel Struck.

2. Sandbox

Android realisiert seine Sandbox für Apps unter anderem mit SELinux. Da SELinux standardmäßig jeden Zugriff auf Ressourcen blockiert, muss man explizit Regeln definieren, um Zugriffe auf die unterschiedlichsten Ressourcen zu erlauben. Wie sich herausstellt, erlaubt Android den kompletten Lesezugriff auf »/proc/net«. Unter »/proc/net« stellt der Kernel ausführliche Informationen über die Netzwerkaktivität zur Verfügung. Man kann die SELinux Regel im Android Quelltext in der Datei »untrusted_app.te« unter »android/platform/external/sepolicy« einsehen:

# access /proc/net/xt_qtguid/stats
r_dir_file(untrusted_app, proc_net)

Die dargestellte SELinux Regel erlaubt Apps (»unstrusted app«) nicht nur Zugriff auf »stats« unter »proc/net«, wie der Kommentar vermuten ließe, sondern auf alle Ressourcen unter »/proc/net«. Eben diese weit gefasste Regel erlaubt Net Monitor die ausführliche Protokollierung der Netzwerkaktivität.

Unterstütze den Blog mit einem Dauerauftrag!

Unabhängig. Kritisch. Informativ. Praxisnah. Verständlich.

Die Arbeit von kuketz-blog.de wird vollständig durch Spenden unserer Leserschaft finanziert. Sei Teil unserer Community und unterstütze unsere Arbeit mit einer Spende.

Mitmachen ➡

2.1 Anpassung von SELinux

Meine nächste Frage war, ob Apps diese »Lücke« ausnutzen. Dafür habe ich ein Custom-ROM kompiliert (LineageOS 14.1) und oben genannte Regel auskommentiert. Dies hat zur Folge, dass Zugriffe durch Apps auf »/proc/net« blockiert und in einer Logdatei erfasst werden (adb logcat). Nach der Anpassung funktionierte Net Monitor nicht mehr – es wurden keinerlei Netzwerkaktivitäten angezeigt. Ebenso waren die fehlgeschlagenen Zugriffe unter adb logcat protokolliert.

2.2 Facebook App

Als nächstes testete ich die Facebook App, die unmittelbar nach dem Start versucht auf »/proc/net/xt_qtaguid/stats« zuzugreifen:

02-11 09:22:26.117 5343 5343 W Bg_Shared7: type=1400 audit(0.0:13): avc: denied { read } for name="stats" dev="proc" ino=4026535946 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:proc_net:s0 tclass=file permissive=0

02-11 09:22:26.122 4452 5343 E 2Ob : Unable to find /proc/net/xt_qtaguid/stats 

02-11 09:22:26.122 4452 5343 E 2Ob : java.io.FileNotFoundException: /proc/net/xt_qtaguid/stats (Permission denied) 

02-11 09:22:26.122 4452 5343 E 2Ob : at java.io.FileInputStream.open(Native Method) 

02-11 09:22:26.122 4452 5343 E 2Ob : at java.io.FileInputStream.(FileInputStream.java:146) 

02-11 09:22:26.122 4452 5343 E 2Ob : at java.io.FileReader.(FileReader.java:72)

Leider ist der Quelltext der Facebook App nicht öffentlich einsehbar. Es bleibt daher unklar, welche Informationen beim Zugriff auf »proc/net/xt_qtaguid/stats« ausgelesen werden.

Hinweis

Mit einem »Wächter« könnte der Zugriff von Apps auf »/proc/net« protokolliert werden. Das könnte bspw. über ein Xposed-Modul realisiert werden, mit dem auch eine Auswertung des Inhalts möglich wäre – also welche Informationen eine App genau abfragt. Gut möglich, dass sich bspw. über Droidmon entsprechende Hooks realisieren lassen. Freiwillige vor – aus zeitlichen Gründen werde ich dies aktuell nicht durchführen können.

Hinweis: Google stellt in der offiziellen API eine Funktion bereit, um Statistiken der Netzwerkaktivität abzufragen. Dabei wird sichergestellt, dass diese Informationen nicht von anderen Apps eingesehen werden können.

2.3 CopperheadOS

Ich habe mit dem Hauptentwickler von CopperheadOS über diese Problematik auf Reddit diskutiert und eine interessante Antwort bekommen. Er hat sich die API von Google -die Zugriff auf die Nezwerkaktivität ermöglicht- angeschaut und folgendes festgestellt:

The problem is that the kernel API doesn’t actually filter the content based on UID as they claim so it’s apparently just a meaningless client-side check. Access to the kernel API in /proc has to be removed for untrusted_app to conceal the information, which hopefully won’t break anything.

CopperheadOS blockiert in der neuen Version daher den Zugriff auf »proc/net« für alle Apps – außer für Net Monitor.

3. Fazit

Anwender sollten Folgendes wissen: Unter Android 5,6 und 7 sind Apps theoretisch in der Lage, jegliche Netzwerkaktivitäten zu erfassen. Die relativ weit gefasste SELinux Regel ermöglicht damit eine ganz neue Art von User-Tracking. Fragwürdige Apps könnten bspw. lückenlos nachvollziehen, welche Apps ein Nutzer einsetzt und zu welchen Servern bzw. Zielen im Internet eine Verbindung aufgebaut wird. Dies würde ein empfindlicher Eingriff in die Privatsphäre eines Nutzers darstellen.

Empfehlung: Anwender sollten nach Möglichkeit quelloffene Apps benutzen, die man unter anderem aus F-Droid beziehen kann. Bei quelloffenen Apps besteht zumindest die Möglichkeit, den Quelltext zu prüfen und in Erfahrung zu bringen, welche Daten erfasst und weitergeleitet werden.

Wer bspw. unbedingt soziale Netzwerke wie Facebook oder Twitter nutzen möchte, der sollte auf die Verwendung der proprietären Apps verzichten und über den mobilen Browser auf die Plattformen zugreifen.

Hinweis

Die Beobachtung von Daniel unterstreicht mein negatives Bild vom Android Berechtigungsmodell: Das Android Berechtigungsmodell: Ein perfides Konstrukt

Über den Autor | Gastbeitrag

Gastbeiträge werden von Autoren verfasst, die nicht zum festen Redaktionsteam des Kuketz-Blogs gehören. Bevor ein Gastbeitrag veröffentlicht wird, findet eine inhaltliche Abstimmung mit mir statt. Dabei übernehme ich die redaktionelle Bearbeitung des Textes, prüfe den Inhalt und bereite den Beitrag sorgfältig für die Veröffentlichung im Blog vor.

Gastbeitrag ➡

SpendeUnterstützen

Die Arbeit von kuketz-blog.de wird zu 100% durch Spenden unserer Leserinnen und Leser finanziert. Werde Teil dieser Community und unterstütze auch du unsere Arbeit mit deiner Spende.

Folge dem Blog

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

Bleib aktuell ➡


Diskussion

15 Ergänzungen zu “Android erlaubt Apps vollen Zugriff auf die Netzwerkaktivität”

  1. Comment Avatar Mert sagt:

    Mittlerweile braucht man sich nicht wundern wenn man paranoid wird…Eigentlich kann man keiner Soft/Hardware trauen solange man nicht jeden Aspekt geprüft hat, und das ist den Aufwand meist nicht wert.

  2. Comment Avatar superlupo sagt:

    Was ist unter „gesamte Netzwerkaktivität“ zu verstehen? Ich nehme stark an, es handelt sich um Infos über offene Verbindungen (Source- und Target-IP, Protokoll – tcp oder udp), also in etwa das, was man in `netstat` sieht, und nicht um Inhalte dieser Verbindungen.

  3. Comment Avatar libreJoker sagt:

    Schöner Beitrag. Schon ein starkes Stück was Google hier wieder abgeliefert hat. Hintertüren zum Schnüffeln offen lassen hat halt System.
    Leider gibt es Copperhead nicht für mehr Devices. Gerade ein Nexus wollte ich mir nicht extra für mehr Privacy holen.. Naja mal sehen xD

    • Comment Avatar Daniel Struck sagt:

      CopperheadOS wird in Zukunft wohl auch die Pixel Geräte unterstützen:

      #Pixel development has begun thanks to a generous hardware donation by @GuardedbyGenius. Stay tuned for updates!

  4. Comment Avatar KuMB sagt:

    Jungs, ihr seid großartig! Weiter so!
    Wie oft die NSA wohl schon bereut hat, SELinux programmiert zu haben?
    Was Quelloffenheit möglich macht, unglaublich geil!

    • Comment Avatar Kevin Spacebar sagt:

      Du bist witzig!
      NIE! Warum auch, 1%* der Menschen redet sich die Mäuler heiss, argumentiert, dokumentiert, schafft workarounds**. 99%* der Anwender nutzen diese „Fehlprogrammierung“ dennoch mehr oder minder arglos.
      Effizienter kann man kaum arbeiten.

      P.S. Vielleicht sollten wir auf Red Star OS umschwenken – selbst wenn das leakte wie ein Fass ohne Boden täten uns die Daten in NK nicht weh ;)

      * grobe Schätzung
      ** in der Zeit hat die NSA bereits wieder n neue Schwachstellen platziert

  5. Comment Avatar MakeAndroidGreatAgain sagt:

    Danke für diesen Beitrag. Habe gerade mal bei mir Xprivacy gecheckt und dort kann man unter Identifikation /proc blocken. Sollte sich das Problem damit nicht erledigt haben?

    • Comment Avatar Anonymous sagt:

      Reicht vermutlich nicht ganz. Wenn du dir Net Monitor installierst, verlangt die App (zumindest bei mir, Android 6) den Zugriff auf eine Shell-Berechtigung (z.B. für Kommandos), im Detail shell/exec mit den Befehlen cat /proc/net/tcp, cat /proc/net/udp, cat /proc/net/tcp6 und cat /proc/net/udp6

      • Comment Avatar MakeAndroidGreatAgain sagt:

        Danke. Hast Recht gehabt. Blocke ich shell/exec in Xprivacy kann Net Monitor die Verbindungen nicht mehr auflisten. Im Aktivitätslog von Xprivacy wird der blockierte Zugriff auf die von dir genannten Shell Funktion klar gekennzeichnet.

        Puuhhh, nochmal Glück gehabt. Ich dachte schon, dass ich mir für mehrere Hundert Euro ein neues, CopperheadOS kompatibles Smartphone kaufen muss. Schleichwerbung im Internet wird immer ausgefuchster, das sag ich euch ;-)

        • Comment Avatar Daniel Struck sagt:

          CopperheadOS ist frei verfügbar ;-) Die Quelltexte sind auf Github verfügbar.

          Man sollte bedenken, dass der Zugriff auf /proc/net nur eine Lücke unter Vielen ist. Sehr aufschlussreich sind die ausführlichen Berichtigungslisten auf dem Google Play Store. Auszug aus den Berichtigungen für die Facebook App (Berechtigungen > Details ansehen): Aktive Apps abrufen, Konten auf dem Gerät finden, Kalendertermine sowie vertrauliche Informationen lesen, SMS oder MMS lesen, Telefonnummern direkt anrufen, Anrufliste bearbeiten, WLAN-Verbindungen abrufen, Dateien ohne Benachrichtigung herunterladen, Zugriff auf alle Netzwerke, …

  6. Comment Avatar NoName sagt:

    Wieder einmal ein großartiger Beitrag!
    Meine Frage wäre, ob man unter Lineage nicht einfach das einsehen Blockieren z.B. durch eine App kann wenn man nicht unbedingt XPrivacy drauf haben möchte. Ich weiß hört sich sehr laienhaft an, aber nicht jeder kann ein Linux Hero sein!

    • Comment Avatar animusanima sagt:

      Hallo NoName,

      ich kann aus Erfahrung sagen, dass es kein Hexenwerk ist, sein Gerät zu rooten und die entsprechenden Tools aus Mikes Beitrag zu installieren.

      Ich habe mich zuvor nicht wirklich mit dem Thema beschäftigt und war in knapp 3 Stunden durch mit der Nummer. Dazu gibt es genügend Guides und Hilfestellungen in Foren. Aller Anfang ist schwer, aber das, was am Ende dabei herauskommt, lohnt sich.

      P. S.: Sorry für den Off-Topic Beitrag. Aber ich hoffe, die Motivation fruchtet dennoch.

  7. Comment Avatar Wilma456 sagt:

    Generell guter Artikel, allerdings muss ich in einem Punkt widersprechen:

    Mich wunderte dabei, dass die App für diese Aufgabe keinerlei Berechtigung einholen musste.

    Bei mir (Android 5.1) hat die App die Berechtigung „voller Netzwerkzugriff“. Kann es vielleicht ein, dass sich das in späteren Android Version geändert hat?

HilfeWenn du konkrete Fragen hast oder Hilfe benötigst, sind das offizielle Forum oder der Chat geeignete Anlaufstellen, um dein Anliegen zu diskutieren. Per E-Mail beantworte ich grundsätzlich keine (Support-)Anfragen – dazu fehlt mir einfach die Zeit. Kuketz-Forum

Abschließender Hinweis

Blog-Beiträge erheben nicht den Anspruch auf ständige Aktualität und Richtigkeit wie Lexikoneinträge (z.B. Wikipedia), sondern beziehen sich wie Zeitungsartikel auf den Informationsstand zum Zeitpunkt des Redaktionsschlusses.

Kritik, Anregungen oder Korrekturvorschläge zu den Beiträgen nehme ich gerne per E-Mail entgegen.