mercredi 5 décembre 2012

Les fondements de la sécurité sur Android

Techniquement Android est un système linux avec un noyau optimisé pour fonctionner sur de l'embarqué. A ce système linux s'ajoute une machine virtuelle Java spécialisée pour les environnements à faible ressource : la machine Dalvik. La base de la sécurité d'Android repose donc principalement sur les mêmes bases que la sécurité sous Linux plus l'encapsulation en bac à sable de chaque application Java. Plus précisément on a:
  • Séparation des privilèges de chaque application et des différentes sections de l'architecture système (UID et GUI différent). Contrairement aux OS de bureau, Android crée un utilisateur et un groupe par application (exceptions pour certaines applications qui partagent certaines données). Une application n'a donc pas par défaut les même droits que l'utilisateur qui l'utilise. Vrai pour Java et le code natif.
  • Applications Java fonctionnant dans un bac à sable (sandbox). Une machine virtuelle Dalvik pour chaque application, même les applications système.
  • L'application doit demander explicitement différentes permissions d'accéder à différents services et ressources. (fichier AndroidManifest.xml). Génération d'une demande d'autorisation à l'utilisateur lors de l'installation pour accéder par exemple à Internet, à la caméra, aux contacts, etc. On retrouve ici exactement le même système utilisé sur l'ancien système Symbian. Cela concerne également le code natif.
  • Nécessité de signer l'application (certificat auto signé possible). Vérification à l'installation. Impossibilité de mettre à jour une application avec un certificat différente de la version de base par exemple.
  • Protection des applications par licence LVL (là on touche plus à la lutte contre le piratage).
  • Scan et analyse automatique des applications publiées sur l'Android Market.
  • Suppression de l'Android Market des applications jugées néfastes qui seraient passées à travers les mailles des scans automatiques. Google peut même aller plus loin et supprimer à distance une application sur le téléphone des utilisateurs (là on déborde de l'aspect sécurité pour empiéter sur la vie privée de l'utilisateur).
  • Gestion des droits d'accès entre applications mais également entre sous composants (Activity, Content Provider, Service, Broadcast Receivers). Une application peut déclarer ses propres permissions que les autres applications pourront demander pour partager des données avec celle ci. Le principal moyen de communication entre processus est le Content Provider qui permet de contrôler les échanges.
  • Librairies de chiffrage permettant au développeur de stocker des données chiffrées (ex: AES) et de les transmètre de manière sécurisée (ex: TLS).
  • Android étant majoritairement open source des failles de sécurités sont plus facilement et rapidement corrigées. (Ou découvertes c'est selon ;-)
Concernant la sécurité des applications Android, il existe plusieurs livres sur le sujet qui ne sont pas tous de qualité égale. Personnellement ma préférence va pour le Application Security for The Android Platform d'O Reilly. Le livre est clairement destiné aux développeurs d'applications qui veulent protéger au maximum leurs utilisateurs. En revanche les sujets tels que les rootkits, les malwares, etc ne sont pas réellement abordés. Du moins pas sur leur fonctionnement, uniquement sur les conséquences qu'ils peuvent avoir.



Aucun commentaire:

Enregistrer un commentaire