Umgehen von App-Privilegien für Android

vorhergehende Artikel in: Java Security Rants Android
20.03.2015

Es ist erstaunlich, wie sehr die Menschen vorgeblichen Fakten vertrauen, die ihnen durch Medien und Marketing vorgesetzt werden. Ein typisches Beispiel dafür ist die sogenannte Sicherheitsarchitektur von Android.

Privilegien und ihre Änderungen im Laufe der verschiedenen Android-Versionen

Die App-Privilegien wurden in Android früher einzeln angezeigt, bei einem Update sah man nochmals alle Privilegien, die die App haben wollte: die die sie bereits hatte und eventuell neu benötigte.

Dann wurden die Privilegien in Gruppen zusammengafasst - der Anwender musste nun nur noch der Vergabe der Gruppen zustimmen, ohne genau zu wissen, welche Privilegien sich hinter den einzelnen Gruppen verbargen.

Außerdem wird bei Updates jetzt nur noch darüber informiert, welche zusätzlichen Privilegien die App benötigt - der Anwender wird nicht mehr daran erinnert, was er der App schon gegeben hat. Das macht den hier beschriebenen Angriff noch viel einfacher, als er es sowieso schon ist.

Die falsche Auffassung zur Sicherheit durch explizite Vergabe von Privilegien für Apps

Anwender denken - und sie werden von Medien und Marketing darin bestärkt - über Apps als singuläre Objekte, die keine Verbindung zu anderen auf dem Gerät haben. Sie denken, dass sie sicher sind, wenn eine App Zugriff auf ihre Kontakte haben will, jedoch keine Netzwerkverbindungen fordert.

Dabei müsste jedem klar sein, der ein Mobiles Gerät in die Hand nimmt um mehr damit zu tun, als zu telefonieren, dass die Apps untereinander Informationen austauschen: Jeder hat schon mal einen Link aus dem Browser heraus mit anderen getauscht oder eine Notiz exportiert oder per EMail verschickt. In jedem dieser Fälle und in unzähligen mehr arbeiten zwei Apps zusammen an der Umsetzung einer Anforderung.

Daher kann man sich nicht sicher sein, dass kein Unfug mit den Kontaktdaten getrieben wird, nur weil die App, die diese Erlaubnis haben möchte, nicht gleichzeitig die für die Kommunikation über das Internet haben möchte: Sie kann so programmiert sein, dass sie einfach einer anderen App mittels eines Intents interessante Daten zukommen lässt, die diese dann verschickt. Diese andere App ist auch als sicher eingestuft worden, da sie zwar Verbindung übers Internet aufnimmt, aber keinen Zugriff auf Daten aus dem Telefonbuch haben möchte. Jede der Apps für sich genommen, würde es nicht schaffen, sensible Daten aus dem Gerät auszuschleusen - beide in Kooperation aber schon! Und eine App braucht keine Erlaubnis, um Daten mit anderen austauschen zu können, beziehungsweise Intents von anderen Apps aufzurufen...

Aber alles unwichtig - wie hoch ist die Wahrscheinlichkeit, daß ich beide benötigten Apps installiere?

Diese Wahrscheinlichkeit ist sehr hoch, weil Cyber-Kriminelle heutzutage Marktforschung betreiben - sie werten Statistiken aus, welche Apps sich besonderer Beliebtheit erfreuen, sie nehmen erfolgreiche Konzepte von Bezahl-Apps und bieten sie kostenlos an. Sie manipulieren "Nutzer, die diese App heruntergeladen haben, haben auch installiert:" Wertungen. Außerdem muss es nicht so sein, daß man exakt zwei Apps installiert haben muss: Cyberkriminelle könnten auch beispielsweise 10 Apps entwerfen, die die Kontaktdaten abgreifen und 30, die Daten auf Verlangen ins Netz schicken können. Jede der 10 Apps kennt die 30 Kandidaten - und plötzlich ist aus einer Paarung, die auf dem Gerät installiert sein muss, um verwundbar zu sein, eine Menge von 10*30=300 möglichen Paarungen geworden, die den Angriff erfolgreich durchführen kann. Mit einem Minimum an Aufwand haben wir die Wahrscheinlichkeit einer Infektion auf das 300-fache erhöht!

Die Änderungen an der Art und Weise, wie Privilegien verteilt werden, macht Anwender über diesen Mechanismus angreifbar

Wie bereits oben geschildert, informiert Android seit neuestem nur noch darüber, welche neuen Rechte eine App braucht. Damit ist der Angreifer jetzt nicht mehr darauf angewiesen, ein Paar zueinander passender Apps auf das Gerät eines potentiellen Opfers zu bekommen: Er liefert seine App einfach so aus, dass sie nur das Privileg "Zugriff auf Kontakte" benötigt. Nach ein oder zwei Updates ändert er schließlich den Code so, dass nunmehr die abgegriffenen Daten ins Internet geschickt werden. Der Anwender sieht beim nächsten Update nur, dass zusätzlich das Privileg "Kommunikation über das Intenet" benötigt wird. Da hat er aber schon vergessen, dass die App ja Zugriff auf seine Kontakte hat. Durch die Änderungen beim Updateprozess wird er auch nicht an diese Tatsache erinnert und voila! - schon haben wir eine App auf dem Gerät unseres Opfers, die ihn aushorchen und sensible Daten ausschleusen kann.

Alle Artikel rss Wochenübersicht Monatsübersicht Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Certstream, InfluxDB, Grafana und Netflix

    16.04.2019

    Nachdem ich vor kurzem über mein erstes Spielen mit dem certstream berichtete, habe ich weitere Experimente gemacht und die Daten zur besseren Auswertung in eine InfluxDB gepackt, um sie mit Grafana untersuchen zu können.

    Weiterlesen...

Neueste Artikel

  • Die sQLshell ist nun cloudnative!

    Die sQLshell hat eine weitere Integration erfahren - obwohl ich eigentlich selber nicht viel dazu tun musste: Es existiert ein Projekt/Produkt namens steampipe, dessen Slogan ist select * from cloud; - Im Prinzip eine Wrapperschicht um diverse (laut Eigenwerbung mehr als 140) (cloud) data sources.

    Weiterlesen...
  • LinkCollections 2024 III

    Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet von 2024 folgt hier gleich die nächste:

    Weiterlesen...
  • Funktionen mit mehreren Rückgabewerten in Java

    Da ich seit nunmehr einem Jahr bei meinem neeun Arbeitgeber beschäftigt und damit seit ungefähr derselben Zeit für Geld mit Python arbeite, haben sich gewisse Antipathien gegenüber Python vertieft (ich kann mit typlosen Sprachen einfach nicht umgehen) - aber auch einige meiner Gründe, Python zu lieben sind ebenso stärker geworden. Einer davon ist der Fakt, dass eine Methode in Python mehr als einen Wert zurückgeben kann.

    Weiterlesen...

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muß damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.