Comment les dépassements de tampon peuvent-ils être potentiellement dangereux dans Android?
Plus précisément, si chaque application a son propre identifiant utilisateur et qu'elle est exécutée dans Dalvik VM qui a le même identifiant. Je pensais que même si le débordement se produit, le shellcode écrit sur la page mem de l'application ne sera que ont les mêmes privilèges que l'application elle-même?
Prenons l'exemple de Stagefright, la bibliothèque multimédia écrite en C++
La façon dont les débordements contournent les privilèges attribués est simple; Le code C peut directement écrire dans la mémoire. C'est votre travail en tant que développeur de vous assurer que ce que vous mettez en place, sinon il remplira volontiers les autres instructions du même privilège. Stagefright a beaucoup de privilèges. Et les informations qui sortent du tampon pourraient être une vidéo aléatoire de chat provenant d'Internet (qui gagne alors les privilèges de la médiathèque)
Il serait donc naïf de supposer que les débordements ne sont pas nocifs. Stagefright contenait des débordements de tampon, ce qui est extrêmement dangereux. Android les développeurs ont rendu l'exploitation plus difficile en implémentant (entre autres mesures) la randomisation de la disposition de l'espace d'adressage (ASLR), ce qui rend les décalages à utiliser imprévisibles, provoquant une erreur plutôt que l'exécution de code. Mais en combinant cela avec les vulnérabilités du navigateur, des informations peuvent être divulguées sur l'emplacement actuel des pages de mémoire, de sorte que l'exécution de code est toujours possible.
Je recommanderais de lire Metaphor, une implémentation Stagefright incluant le contournement ASLR, le papier et le code PoC sont disponibles en ligne
Permettez-moi de paraphraser la question de l'op: Android avoir un modèle d'isolement d'application basé sur l'ID utilisateur et comment un débordement pourrait-il contourner cela?
La réponse est que vous débordez les parties partagées entre les applications: les services, les applications système et le noyau Linux lui-même. Beaucoup de ces composants sont écrits en C/C++, ils sont donc vulnérables.
C'est effectivement ainsi que vous effectuez l'escalade de privilèges dans tous les systèmes multi-utilisateurs et Android n'a rien de spécial.
Je pensais que même si le débordement se produit, le shellcode écrit sur la page mem de l'application n'aura que les mêmes privilèges que l'application elle-même?
À moins que le débordement ne soit dans le noyau ou dans quelque chose exposé par la communication inter-processus (Android fournit beaucoup de choses en tant que services), oui.
Notez cependant que les trois applications clés: messagerie, e-mail et navigateur, ont assez de privilèges. De quoi voler des données privées importantes. Ces applications sont également celles qui interprètent un contenu extérieur non fiable. Il appartient donc à ces applications de s'assurer que le contenu extérieur (comme les pages Web) ne peut pas utiliser les autorisations qu'il ne devrait pas.
Ces applications exécutent également beaucoup de code C ou C++ potentiellement vulnérable, car l'interprétation d'une partie du contenu (en particulier la vidéo et le javascript) est gourmande en CPU et en mémoire au point Java et la JVM (la = Android JVM est inférieur à celui de bureau) ne sont pas à la hauteur, et aussi avant que le code ne soit réutilisé à partir d'autres plates-formes. Ce sont les vulnérabilités de ce code que la plupart des exploits sérieux ciblent.
Je ne suis pas un Android expert en sécurité mais je pense que je peux répondre à la question disons pour un scénario Apache/Linux et je pense que des menaces équivalentes existent également pour Android (laissons de côté la question pour le moment si des débordements de buffer sont possibles en Android ou pas).
Disons que vous avez injecté votre code dans un processus. Maintenant vous pouvez:
Donc, même si vous ne pouvez (initialement) accéder qu'à votre propre espace d'adressage, vous avez beaucoup de possibilités.
Pour clarification: le processus de l'application s'exécute avec l'ID utilisateur. Le processus pourrait être la machine virtuelle Dalvik. Il peut également s'agir de code natif utilisant le NDK Android Android écrit en C/C++. Il est souvent utilisé par les bibliothèques multimédias, les jeux et les fonctionnalités de système d'exploitation de bas niveau.
En général, seules les vulnérabilités critiques de débordement de tampon sont discutées dans les médias, ce ne sont qu'une petite partie de toutes les vulnérabilités.