1. Net Monitor
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.
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.
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 KonstruktWenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:
15 Ergänzungen zu “Android erlaubt Apps vollen Zugriff auf die Netzwerkaktivität”
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-ForumAbschließ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.
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.
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.
Richtig. Sozusagen die Metadaten. Inhaltsdaten (Netzwerkverkehr) ist nicht einsehbar.
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
CopperheadOS wird in Zukunft wohl auch die Pixel Geräte unterstützen:
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!
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
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?
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
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 ;-)
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, …
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!
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.
Generell guter Artikel, allerdings muss ich in einem Punkt widersprechen:
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?
Ja ab 6.x – siehe hier.