GrapheneOS: Apps bauen trotz fehlender Berechtigung eine Internetverbindung auf

Hey Leute, ich wollte mal etwas mit euch teilen, was mir jetzt häufiger aufgefallen ist.

Zunächst einmal zu mir: ich nutze ein Pixel 6 mit Grapheneos (Sandboxed Playservices nur im Zweitprofil vorhanden), basierend auf Android 13.

Wenn man unter Grapheneos eine neue App installiert, dann kann man direkt bei der Installation mit einem Häkchen auswählen, ob die App ins Internet darf oder nicht (Network-Permission). Mir ist es hierbei schon ein paar Mal passiert, dass man trotz Entfernen der Internetberechtigung bei den Einstellungen der App unter „Mobile Daten und WLAN“ sehen kann, dass Daten empfangen/gesendet wurden. Zu sehen anhand der KBs und MBs bei „Insgesamt“, „Vordergrund“ und „Hintergrund“.

Als jüngstes Beispiel kann ich hier den Matrix-Client " Schildichat" erwähnen. Ich habe die App über F-Droid installiert, bei der Installation die „Network“-Berechtigung entfernt, die App kein einziges Mal gestartet und TROTZDEM sieht man in den Einstellungen, dass es Datenübertragungen zwischen der App und dem Internet gab.

Wie ist das möglich? Ist die in GrapheneOS implementierte Firewall etwa nicht ganz „dicht“? Könnte es da Lücken geben?

Ich habe eine lange Zeit TrackerControl genutzt. Nun nutze ich zur Werbe- und Trackingfilterung das in Android eingebauten Private DNS (mit dnsforge) und ProtonVPN in der kostenlosen Variante. Egal ob mit Extra-Firewall (TrackerControl, Netguard) oder nicht: dieses Verhalten mit der ungewollten Datenübertragung passiert immer mal wieder.

Weiß jemand hierzu mehr? Ist euch das auch schon mal passiert/aufgefallen? Danke im Voraus!

Also ich habe jetzt nur mal kurz auf meinem Pixel 6 die Apps überflogen, denen ich keine Netzwerk-Berechtigungen geben habe, und von denen zeigt keine einen Datenverbrauch an. Von daher kann zumindest ich das auf meinem Telefon mit GOS nicht nachvollziehen…

Erstmal danke für deine Antwort!

Wie gesagt, das ist etwas das ich selten beobachtet habe… aber es ist mir eben ein paar Mal passiert. Wieso, weshalb, warum kann ich mir leider auch nicht erklären. Ich hoffe nur, dass die Leute dieses Phänomen beobachten bzw. im Hinterkopf behalten. Damit es zumindest mal erwähnt wurde. Eventuell ist das nur ein Darstellungsfehler oder aber irgendwas leakt da tatsächlich gelegentlich, auch bei so sicheren ROMs wie bei GrapheneOS.

Für weitere Infos wäre ich dankbar!

Ich habe mal ein wenig gestöbert und bin auf ein paar Ideen gekommen. Erstmal ein paar Fragen zu deiner Situation:

  1. Hast du in den Einstellungen bei den Berechtigungen noch mal überprüft, ob die betreffenden Apps auch wirklich keine Netzwerk-Berechtigung haben? Nur zur Sicherheit.

  2. Hast du im betroffenen Benutzerprofil Sandboxed Google Play installiert?

  3. Könnten die betroffenen Apps mit einer anderen App mit Netzwerk-Berechtigung zu kommunizieren versucht haben?

  4. Sind die aufgerufenen Verbindungen die Links, die die betroffenen Apps automatisch öffnen dürfen?

IPC

Wenn sich das Problem nicht wider Erwartens schon nach Schritt 1 löst, könnte es an IPC mit Google Play Services oder anderen Apps liegen. Inter-process communication, oder zu deutsch Interprozesskommunikation, ist der Weg auf dem auf Android verschiedene Apps miteinander kommunizieren können. Das ist auch gut so, denn nur so kann Android trotz des app sandboxings überhaupt funktionieren.

Aus einem Thread zu IPC aus dem GrapheneOS Forum:

IPC has restrictions. It’s mostly used to send „messages“ not „data“ between apps. Like a valid IPC would be „hey, Vanadium, open www.youtube.com“. Invalid IPC would be „hey, Google Play Services, here’s this person’s entire photos collection“.

For IPC to work, it has to be mutual. Google Play won’t randomly make up some IPC call to a random app to get data from it, but even if it were to do that, that app would have to have that receiver set up, otherwise the IPC will be blocked by the OS.

Das bedeutet, dass es für Apps ohne Netzwerk-Berechtigung möglich sein könnte, über andere Apps Daten zu senden. Das allerdings nur sehr limitiert und sofern eine andere App vorhanden ist, die damit explizit kompatibel ist. Die Google Play Services sind auf GrapheneOS zwar Sandboxed und haben daher nur die Berechtigungen einer normalen App, statt Systemzugriff. Da IPC auch normale Apps können und Google das eigene Ecosystem natürlich aufeinander abgestimmt hat, kann so etwas beispielsweise passieren, wenn man Google Apps in einem Benutzerprofil mit Google Play Services benutzt.

Mehr Links

Hier mal eine Sammlung von nützlichen Threads und auszugsweise Zitaten:

Thread zur Nutzung von GBoard

the most private way to use Gboard is with Network permission OFF and without sandboxed Play Services as the two could communicate

Thread zur Isolation durch entzogene Netzwerk-Berechtigung

Just keep in mind apps in the same user profile can communicate with one another with mutual consent which is also transparent via their manifest… So an evil app you don’t trust can tell shit about you to the good app you trust if they are in conspiracy

Thread mit Daniel Micay über Lecks und allgemein zum Vertrauen in Apps

When you give an app a permission or another form of access, you trust it to be secure against being exploited by an attacker to gain access to what that permission […] provides.

For example, if you give an app Contacts access, you trust it not to leak access to that data. You trust it not to provide an API for other apps in the same profile to read or write contacts without either requiring explicit consent from you on a case-by-case basis or guarding it with the Contacts read/write permissions. […] The same thing applies to every permission and other form of access you can grant to apps.

Anmerkung: Contact Scopes dürften mittlerweile in der beschriebenen Situation mehr Schutz bieten.

Thread zum Umgehen der fehlenden Netzwerk-Berechtigung durch Google Play Services

  1. Is it theoretically and technically possible that data or metadata could be intentionally or unintentionally sent to Google by way of sandboxed play services?
  2. Do we have the technical means to know for sure whether this is or is not happening?
  1. If Sandboxed Play Services has Network permission then yes, it can receive some data from other apps via IPC and potentially send it to Google. Some data needs to be sent to Google if apps are using Google APIs.
  2. One could MITM at the router level or VPN level and inspect the traffic to see what exactly is being sent to where.

Contra IPC

Vielleicht liegt es aber doch an etwas anderem. Im GrapheneOS Feature Overview steht zum Network Permissions Toggle nämlich Folgendes:

GrapheneOS adds a Network permission toggle for disallowing both direct and indirect access to any of the available networks. The device-local network (localhost) is also guarded by this permission, which is important for preventing apps from using it to communicate between profiles. Unlike a firewall-based implementation, the Network permission toggle prevents apps from using the network via APIs provided by the OS or other apps in the same profile as long as they’re marked appropriately.

Da würde ich grundsätzlich schon davon ausgehen, dass trotz IPC keine direkten Verbindungen ins Internet hergestellt werden. Und da es keine Firewall ist, kann auch eine Lücke in ebenjener nicht das Problem sein. Was sonst könnte es sein?

App Link Verification

(Weil wir bisher so wenige hatten) hier ein Thread zu vermeintlichen Datenlecks durch App Link Verification, in dem OP ein ähnliches Problem zu haben scheint:

I have been revoking network access from apps which I do not believe need it. […] I was looking at my NextDNS logs and noticed that the app was making DNS connections to its servers, while I had blocked it in permissions.

Erklärt wird das auch hier im GrapheneOS Usage Guide unter dem Punkt App Link Verification:

Android apps can declare associations with domains in order to handle those URLs in the app automatically. […] The OS will securely confirm that the domain authorizes the app to handle the domain’s URLs. […] Verification of app links by the OS is done by the Intent Filter Verification Service system app. It will use an HTTPS GET request to fetch https://example.com/.well-known/assetlinks.json in order to process a request to verify that an app can handle example.com links.

These network requests by the Intent Filter Verification Service to verify app associations with domains are commonly confused for network requests made by the apps. It’s simply an HTTPS GET request without identifying information and doesn’t offer a communication channel with the app.

Und hier noch ein Thread, mit ein bisschen unkomplizierterer Erklärung:

Any app can claim it can open any address. An app can claim hundreds of addresses if it wants, and Android will check all of them. […] [It] does this to protect people from apps that want to steal our information.

Für mich wirkt es am plausibelsten, dass die Verbindungen durch die App Link Verification zustande kommen. Scheinbar passiert es ja des Öfteren, dass dadurch jemand falsche Eindrücke bekommt. In dem Fall wäre es recht harmlos. Und wenn man es unbedingt ganz ausschalten möchte, kann man dank GrapheneOS der Intent Filter Verification Service Systemapp einfach die Netzwerk-Berechtigung entziehen. Dann sollte Ruhe sein.

Fazit

Das war für mich ein wilder, aber interessanter Ritt. Ich kann aus der Ferne schwer sagen, ob es bei dir konkret wirklich an IRC bzw. App Link Verification liegt, oder nicht doch an etwas anderem. Ich würde dir dazu raten, einfach mal die theoretisch vorstellbaren Lösungen durchzuprobieren. Wenn eine funktioniert, hast du auch wahrscheinlich das zugehörige Problem identifiziert – sofern es sich wirklich um ein Problem handelt.

Sollte gar nichts helfen, kann ich dir empfehlen, (idealerweise mit Bildern) im GrapheneOS Discussion Forum oder im GrapheneOS Matrix Raum nachzufragen. Es würde mich sehr wundern, wenn es dafür keine gute Erklärung gibt.

Viel Erfolg und sag gerne mal Bescheid, wenn du mehr weißt!:slight_smile:

3 „Gefällt mir“

Wow, eine sehr ausführliche Antwort. Viele Informationen, die ich vorher nicht kannte. Danke dafür s6eyf!

Nun zu deinen Fragen:

Ja, ich habe die Einstellungen überprüft und die App hat definitiv keine Netzwerk-Berechtigung bzw. das Häkchen wurde schon direkt bei der Installation entfernt.

Im betroffenen Benutzerprofil (Hauptprofil) sind keine Sandboxed Play Services installiert. Diese sind nur im zweiten Profil installiert, welches ich für Banking nutze.

Das kann ich leider nicht beurteilen. Ich wüsste jetzt aber nicht, mit welcher App Schildichat kommunizieren sollte.

Es wurden keine Verbindungen aufgerufen. Ich habe die App installiert und direkt in den Einstellungen nachgeschaut, ob Daten übermittelt wurden, was leider der Fall war (nochmal: die App habe ich vorher nicht gestartet). Falls du standardmäßiges Öffnen von Links meinst: nein, auch diese Einstellungen war deaktiviert.

Diesen Part habe ich nicht ganz verstanden. Für was ist der Intent Filter Verificatioon Service denn überhaupt gut und was passiert, wenn ich dieser die Netzwerk-Berechtigung entziehe?

Und nun ein kleines Update: Es ist schon wieder passiert!

Ich habe die App „Booking .com“ installiert und wieder bereits bei der Installation das Häkchen bei „Network-Permission“ entfernt. Diesmal habe ich die App danach (aus Versehen) gestartet und danach in den Einstellungen geschaut. Siehe da: erneut wurden Daten übertragen! Zu sehen bei App-Info, Mobile Daten und WLAN, dann sowohl bei „Insgesamt“, „Vordergrund“ und auch „Hintergrund“.

Wie kann das passieren? Dieses Verhalten sorgt nicht gerade für Vertrauen, wenn ihr mich fragt. Entweder es ist ein Darstellungsfehler oder die App hat es wirklich irgendwie geschafft, trotz fehlender Berechtigung Daten ins Internet zu übertragen. Ich hoffe sehr, dass dieser Vorgang untersucht und der Fehler beseitigt wird.

1 „Gefällt mir“