La sécurité des applications

par 3 contributeurs :

Cet article explique en détail le modèle de sécurité des applications Firefox OS.

Les contrôles de sécurité d'applications web introduites dans Firefox OS sont les suivants :

  • Les applications Web sont explicitement installées et lancées plutôt que d'être chargées depuis un navigateur. Les applications doivent être installées avant toute utilisation et les contrôles de sécurité régissent la mise à jour et la suppresion des applications afin de protéger l'utilisateur.
  • L'accès aux nouvelles API Web est contrôlé par un système de permissions, une application doit déclarer les autorisations qu'elle veut utiliser avant l'installation. Afin d'avoir accès à certaines API, les applications doivent respecter certaines exigences, et être examinées, approuvées et signées par le Marketplace.
  • Les applications web sont mises dans une sandbox afin qu'elles ne voient que leurs propres ressources (cookies, base de données IndexedDB, etc.). Même si deux applications chargent la même URL, ces deux pages ne seront pas considérées comme provenant de la même origine car elles sont en cours d'éxecution sur des applications différentes.

Types d'applications

Firefox OS supporte trois type d'applications : web, privilégiée et certifiée. Le type d'application est déclaré dans le manifeste d'application, et indique la liste des permissions  qu'elle peut demander.

  • Application web : La plupart des applications tierces seront des applications "web". C'est le type par défaut qui ne dispense pas d'autorisations supplémentaires en plus de celles déjà en place sur le Web. Les applications web peuvent être installées à partir de n'importe quel site web, sans autre vérification. Elles peuvent aussi être empaquetées, mais cela n'induira pas d'autres autorisations.
  • Application privilegiée : Les applications sont autorisées à demander des autorisations accrues. Ces applications privilégiées doivent être vérifiées et signées par le Marketplace.
  • Application certifiée : Les applications certifiées sont obligatoirement préinstallées sur le périphérique, seul le constructeur/opérateur peut choisir le constructeur.

Note : Pour plus de détails sur les différents types d'applications, voir la documentation du manifeste d'application.

Mettre une application à disposition

Sous Firefox OS, les applications peuvent être mises à disposition de deux facons différentes : hébergées ou empaquetées. Les applications web classiques peuvent être mises à disposition via deux mécanismes, les applications privilégiées et certifiées en revanche doivent être empaquetées.

Les applications hébergées

Une application hébergée est constituée uniquement d'un fichier manifeste sur le serveur web du développeur, qui contient un launch_path pour indiquer quelles pages doivent figurer lorsque l'application est lancée. D'un point de vue de la sécurité, les applications hébergées fonctionnent presque comme des sites web normaux. Lorsqu'une application hébergée est chargée, l'URL des pages chargées seront les URL « normales » de ces pages sur le serveur web, ou chargées à partir de l'appareil si elles étaient stockées dans un fichier cache.

Les applications empaquetées

Une application packagée est un application web ayant l'ensemble de ses ressources (HTML, CSS, JavaScript, manifeste, et ainsi de suite) contenues dans un fichier zip (plutôt que celles-ci soient présentes sur un serveur web). Pour plus de détails sur ce format, voir la page sur les applications empaquetées.

Origine de l'application

Pour les applications hébergées, l'origine de l'application correspond à l'origine du manifeste de l'application.

Pour les applications packagées, l'origine est affectée de façon unique à l'application lors de l'installation. Les applications privilégiées et certifiées peuvent également demander une origine spécifique en spécifiant le paramètre origin dans le fichier manifeste de l'application.

Installation de l'application

Les applications sont installées grâce à l'API JavaScript Apps  :

  • Les applications hébergées sont installées en appelant navigator.mozApps.install (manifestURL), manifestURL est une URL qui définit l'emplacement de l'application. Pour plus de détails, voir la page sur l'installation d'applications.
  • Les applications empaquetées : elles sont installées en appelant navigator.mozApps.installPackage(PackageURL). Pour les applications empaquetées, le manifeste de l'application principale est stocké dans le paquet lui-même, de sorte qu'il est signé. Il y a un deuxième « mini-manifeste », utilisé pour démarrer le processus d'installation. Voir l'installation d'applications empaquetées et  les applications empaquetées pour plus d'informations.

Afin de garantir qu'une application est bien installée comme une application web, il faut s'assurer que le site web ne trompe pas le mécanisme avec un manifeste d'application. Pour cela, on vérifie que le type MIME du manifeste servi est application/x-web-app-manifest+json. Cette restriction est levée lorsque le manifeste de l'application a la même origine que la page demandant l'installation de l'application.

Mise à jour

Le processus de mise à jour pour les applications est décrite à la mise à jour des applications.

Autorisations

Les applications peuvent avoir des privilèges supplémentaires par rapport à celles accordées aux sites web normaux. Par défaut, une application possède les mêmes autorisations qu'une page web normale. Afin d'obtenir des autorisations supplémentaires, il faut tout d'abord lister les autorisations nécessaires dans le manifeste :

Declaration de manifeste

Pour chaque autorisation supplémentaire, le manifeste doit lister cette autorisation ainsi qu'une description lisible de la raison pour laquelle l'application souhaite accéder à cette autorisation. Par exemple, si une application souhaite utiliser l'API de navigator.geolocation, le manifeste devra contenir le fragment suivant :

"permissions": {
  "geolocation":{ 
    "description": "Required for autocompletion in the share screen",  
  }
},

Cela permettra à l'application de demander la permission pour utiliser la géolocalisation (de la même manière qu'une page web). Pour plus de détails sur le fichier de manifeste, voir manifeste d'application.

Note : À l'heure actuelle, les descriptions des autorisations ne sont pas affichées : voir le bug 823385.

Accorder les permissions

Lorsque les autorisations sont demandées dans le manifeste, il y a deux modes pour activer les permissions : la demande ou l'activation par défaut. L'activation par défaut est mise en place grâce au manifeste, sans autre interaction. Les permissions demandées sont affichées lors de la première utilisation et l'utilisateur peut choisir d'autoriser ou non l'API. En général, Firefox OS ne demande les autorisations que si celles-ci ont un impact sur la vie privée et qu'il est pertinent que l'utilisateur sache pourquoi l'API est utilisée. Par exemple, l'application demandera un permission pour accéder aux contacts, mais l'établissement d'une connexion TCP brut est implicitement autorisé car ici, il n'est pas nécessaire que l'utilisateur fournisse son accord. Lorsque les applications sont revues pour être intégrées au Marketplace, l'utilisation des permissions est examinée afin d'assurer la protection des utilisateurs.

Révoquer les permissions

À tout moment, les utilisateurs peuvent changer d'avis sur les permissions qui auront été demandées. Pour révoquer une permission, il faut aller dans l'application Paramètres. En revanche, les permissions activées par défaut ne sont pas paramétrables.

Application web Sandbox

Stockage des données par application

Chaques application s'exécute dans une sandbox de facon indépendante, ce qui signifie que toutes les données stockées par une application sont séparées des données stockées par les autres applications. Parmi ces données , on retrouve les cookies, les données locales et les autorisations liées au site.

A diagram showing three Firefox OS apps all open is separate sandboxes, so none of them can affect each other.

Cela signifie que si l'utilisateur possède deux applications installées, Appli A et Appli B, ces applications ne partageront pas les cookies, les différentes données locales et les autorisations. Ceci s'applique également si ces deux applications ouvrent un <iframe> qui pointe vers la même origine. Par exemple, si Appli A et Appli B ouvrent un <iframe> pointant vers http://www.mozilla.org, elles iront toutes les deux sur ce site, mais ce dernier sera récupéré et servi avec des cookies distincts selon les deux applications.
 

Ainsi, si l'utilisateur se connecte sur Facebook avec l'Appli A, cela n'aura aucun impact sur l'utilisation de Facebook par l'Appli B. Le cookie de connexion entre Facebook et l'Appli A n'est disponible que pour l'Appli A. Si l'Appli B ouvre un <iframe> pour Facebook, le cookie ne sera pas disponible. C'est pourquoi, quand l'Appli B ouvre Facebook, elle affichera la page de connexion plutôt que le compte de l'utiisateur.

Une application ne peut en ouvrir une autre

Cela signifie que les applications ne peuvent pas ouvrir d'autres applications en utilisant les iframes. Si l'application A crée une <iframe> dont le src correspond à l'URL de l'application B, cela n'ouvrira pas l'application B dans l'<iframe>. Cela ouvrira uniquement le site web situé à cet emplacement. Elle n'utilisera aucun des cookies de l'application B et le comportement observé sera le même que si l'application n'était pas installée sur l'appareil de l'utilisateur.

Cela s'applique aussi également aux applications empaquetées (voir ci-après pour plus d'informations). Si l'application A tente d'ouvrir l'application empaquetée B en utilisant un <iframe> dirigant vers l'URL app:// de l'application B, celle-ci ne sera pas chargée. Cela provoquera une erreur 404 ou une autre erreur. Que l'application B soit installée ou non, cela échouera car l'application A ne peut pas détecter si l'application B est installée.

La même chose se produit si la frame de plus haut niveau de l'application A est dirigée vers une URL de l'application B. Pour chaque frame, le système connaît l'application ouverte, ainsi, toute tentative d'ouvrir l'application B depuis une frame de l'application A échouera comme décrit précédemment et l'application A ne pourra accéder à aucune des ressources de B.
 

Les raisons de ce fonctionnement

Cette approche possède des avantages et des inconvénients. Un des premiers inconvénients est le suivant : si l'utilisateur interagit avec le même site web à travers plusieurs applications, il devra se connecter à toutes les applications. De même, si un site web veut stocker des données localement, et l'utilisateur interagit avec ce site web parmi les différentes applications, les données vont ainsi se dupliquer pour chaque application. Cela peut poser problème lorsque le volume de données devient conséquent.

Le principal avantage de cette approche est qu'il s'agit d'un modèle plus stable. Il n'est pas possible que plusieurs applications puissent interagir les unes avec les autres par un site tiers de manière inattendue. Par exemple, l'installation d'une application ne peut pas empêcher le fonctionnement d'une autre application. Quand une application est désinstallée, les données utilisées par une autre application ne peuvent pas être supprimées. De même, la désinstallation d'une application ne pourra poser aucun problème de dépendance pour une autre application.
 

Cela permet aussi de bénéficier d'une meilleure sécurité. Un utilisateur peut ainsi utiliser son application SuperRéseauSocial pour se connecter à Facebook sans se soucier du fait que l'application DessineMoiUnMouton puisse exploiter des données tierces grâce à d'éventuelles failles du site.

Cela permet aussi de bénéficier de certains avantages en ce qui concerne la vie privée. L'utilisateur peut ainsi installer l'application MonPartiPolitique en toute sécurité sans se soucier du fait que MonAppliProfessionnelle puisse détecter les nouvelles données

Isolation des permissions

De façon analogue aux données, les permissions sont isolées les unes des autres. Ainsi si l'application A charge une page de http://maps.google.com et demandant à l'utilisateur la permission d'utiliser la géolocalisation, que l'utilisateur autorise la page et choisit « oui, se souvenir de cette décision », cela signifie seulement que http: //maps.google com aura accès à la géolocalisation depuis l'application A. Si l'application B utilise la page http://maps.google.com, cette page n'aura pas accès à la géolocalisation sauf si l'utilisateur accorde à nouveau la permission.
 
De façon semblable au navigateur, les permissions sont isolées selon l'origine. Si l'application A est autorisée à utiliser l'API Geolocation, cela ne signifie pas que toutes les origines présentes dans l'application A pourront utiliser l'API. Par exemple, si l'application A ouvre une <iframe> vers http://maps.google.com, alors http://docs.google.com devra demander la permission à l'utilisateur pour pouvoir utiiser l'API de géolocalisation.
 

Sandbox pour l'API Browser

Pour sécuriser les applications qui ouvrent un grand nombre d'URL, comme les navigateurs, nous avons ajouté un indicateur (flag) browserContentL'indicateur browserContent permet à chaque application d'avoir non pas un, mais deux bacs à sable (sandboxes) : un pour l'application elle-même, et l'autre pour tout le contenu web ouvert par l'application.

Par exemple, si l'application monNavigateur est chargée depuis https://monnavigateur.com Les scripts et ressources seront chargées dans ce bac à sable, ils appartiennent à ce domaine.

Ensuite, si une page de l'application crée un <iframe mozbrowser>, une sandbox différente sera créée et utilisée pour cette <iframe>. Cette sandbox sera différente de la première. Ainsi, si cet <iframe> dirige vers https://monnavigateur.com, cela se traduira par l'utilisation d'autres cookies pour cet <iframe mozbrowser>. De même, le contenu à l'intérieur de la <iframe mozbrowser> verra des données locales différentes de celles correspondant à l'application.

Ceci s'appliquera également si l'application monNavigateur souhaite intégrer des fonctionnalités de Google Maps pour proposer des outils de navigation basés sur la géolocalisation. Ainsi, si l'application ouvre un <iframe> vers http://maps.google.com, il recevra un ensemble de cookies pour http://maps.google.com. Si l'utilisateur navigue alors à l'intérieur du <iframe mozbrowser> contenant http://maps.google.com, cela utilisera différents cookies et d'autres autorisations au niveau le plus haut de l'application.

Voici un autre scénario où cela peut être utile : l'application Yelp. Cette application permet d'ouvrir différents sites Internet de restaurants. En utilisant <iframe mozbrowser> afin d'ouvrir le site du restaurant, l'application Yelp s'assure que le site web du restaurant ne contiendra pas d'<iframe> pointant vers l'application Yelp. En effet, si le site du restaurant pointe d'une certaine façon vers http://yelp.com, il « verra » le site web Yelp plutôt que l'application. Ainsi, il est théoriquement impossible que le site du restaurant attaque les données de l'application Yelp.

Résumé sur la sécurité des applications

Le tableau ci-dessous résume les différents types d'applications de Firefox OS, et décrit le format, l'installation et les processus de mise à jour pour les applications web fonctionnant sur Firefox OS.
 
Les types d'application web
Type Mise à disposition Modèle d'autorisations Installation Mise à jour
Web Hébergée ou empaquetée Les permissions les moins sensibles qui ont le moins d'impact lorsqu'un contenu web non autorisé est exposé Peut être installée depuis n'importe où
Peut être mis à jour de façon transparente pour l'utilisateur ou explicitement grâce au Marketplace, en fonction de l'emplacement où l'application a été installée, et le mécanisme de livraison
Privilégié Empaquetée ou signée Les API privilégiées ont besoin une validation et d'une authentification de l'application Doit être installée depuis le Marketplace Mise à jour via un Marketplace de confiance, l'utilisateur est invité à approuver le téléchargement et l'installation des mises à jour
Certifié Empaquetée
Les API puissantes et dangereuses ne sont pas disponibles pour les applications tierces.
.
L'application est préinstallée sur l'appareil Mise à jour uniquement dans le cadre des mises à jour système

Note : Pour la version 1.0 de Firefox OS, bien que les applications web puissent être installées depuis n'importe quel site ou Marketplace, certaines applications privilégiées ne peuvent être installées que depuis le Marketplace de Mozilla. La gestion des autres Marketplace de confiance n'est pas encore finalisée.

 

Étiquettes et contributeurs liés au document

Étiquettes : 
Contributeurs à cette page : Mozinet, SphinxKnight, Herdir
Dernière mise à jour par : Mozinet,
Masquer la barre latérale